You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.1 KiB
122 lines
4.1 KiB
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import dbus
|
|
|
|
import dbus_std_ifaces
|
|
import utils
|
|
|
|
import common
|
|
from autotest_lib.client.cros.cellular import mm1_constants
|
|
from autotest_lib.client.cros.cellular import net_interface
|
|
|
|
class Bearer(dbus_std_ifaces.DBusProperties):
|
|
"""
|
|
Fake implementation of the org.freedesktop.ModemManager1.Bearer
|
|
interface. Bearer objects are owned and managed by specific Modem objects.
|
|
A single Modem may expose one or more Bearer objects, which can then be
|
|
used to get the modem into connected state.
|
|
|
|
"""
|
|
|
|
count = 0
|
|
|
|
def __init__(self, bus, properties, config=None):
|
|
self._active = False
|
|
self._bearer_props = properties
|
|
path = '%s/Bearer/%d' % (mm1_constants.MM1, Bearer.count)
|
|
Bearer.count += 1
|
|
dbus_std_ifaces.DBusProperties.__init__(self, path, bus, config)
|
|
|
|
|
|
def _InitializeProperties(self):
|
|
props = {
|
|
'Interface': net_interface.PseudoNetInterface.IFACE_NAME,
|
|
'Connected': dbus.types.Boolean(False),
|
|
'Suspended': dbus.types.Boolean(False),
|
|
'Properties': self._bearer_props
|
|
}
|
|
return { mm1_constants.I_BEARER: props }
|
|
|
|
|
|
def _AddProperty(self, property_key):
|
|
self._properties[mm1_constants.I_BEARER][property_key] = None
|
|
|
|
|
|
def _RemoveProperty(self, property_key):
|
|
try:
|
|
self._properties[mm1_constants.I_BEARER].pop(property_key)
|
|
except KeyError:
|
|
pass
|
|
|
|
|
|
def IsActive(self):
|
|
"""
|
|
@returns: True, if the bearer is currently active.
|
|
|
|
"""
|
|
return self._active
|
|
|
|
|
|
@property
|
|
def bearer_properties(self):
|
|
"""
|
|
@returns: The current bearer properties that were set during a call to
|
|
org.freedesktop.ModemManager1.Modem.Simple.Connect.
|
|
|
|
"""
|
|
return self._bearer_props
|
|
|
|
|
|
@utils.log_dbus_method()
|
|
@dbus.service.method(mm1_constants.I_BEARER)
|
|
def Connect(self):
|
|
"""
|
|
Requests activation of a packet data connection with the network using
|
|
this bearer's properties. Upon successful activation, the modem can
|
|
send and receive packet data and, depending on the addressing
|
|
capability of the modem, a connection manager may need to start PPP,
|
|
perform DHCP, or assign the IP address returned by the modem to the
|
|
data interface. Upon successful return, the "Ip4Config" and/or
|
|
"Ip6Config" properties become valid and may contain IP configuration
|
|
information for the data interface associated with this bearer.
|
|
|
|
Since this is a mock implementation, this bearer will not establish
|
|
a real connection with the outside world. Since shill does not specify
|
|
IP addressing information to the bearer, we do not need to populate
|
|
these properties.
|
|
|
|
"""
|
|
# Set the ip config property
|
|
ip_family = self._bearer_props.get('ip-type', None)
|
|
if ip_family and ip_family >= mm1_constants.MM_BEARER_IP_FAMILY_IPV6:
|
|
config_prop = 'Ip6Config'
|
|
else:
|
|
config_prop = 'Ip4Config'
|
|
|
|
self._AddProperty('Ip4Config')
|
|
self.Set(mm1_constants.I_BEARER, config_prop, {
|
|
'method': dbus.types.UInt32(mm1_constants.MM_BEARER_IP_METHOD_DHCP,
|
|
variant_level=1)
|
|
})
|
|
self._active = True
|
|
self.Set(mm1_constants.I_BEARER, 'Connected', dbus.types.Boolean(True))
|
|
|
|
|
|
@utils.log_dbus_method()
|
|
@dbus.service.method(mm1_constants.I_BEARER)
|
|
def Disconnect(self):
|
|
"""
|
|
Disconnect and deactivate this packet data connection. In a real bearer,
|
|
any ongoing data session would be terminated and IP addresses would
|
|
become invalid when this method is called, however, the fake
|
|
implementation doesn't set the IP properties.
|
|
|
|
"""
|
|
self._RemoveProperty('Ip4Config')
|
|
self._RemoveProperty('Ip6Config')
|
|
self._active = False
|
|
self.Set(mm1_constants.I_BEARER, 'Connected',
|
|
dbus.types.Boolean(False))
|