pseudomodem: Clearing bearers should remove them from DBus connection.
Bearers will now get properly removed from the DBus connection when the
pseudomodem is reset. Also fixed bug involving Ip4Config/Ip6Config
property of bearer.
BUG=chromium:240598
TEST=network_3GSmokeTest.pseudomodem should pass.
Change-Id: I96ae164ee01514ffe10c0db70593705314c050ac
Reviewed-on: https://gerrit.chromium.org/gerrit/51159
Commit-Queue: Arman Uguray <armansito@chromium.org>
Reviewed-by: Arman Uguray <armansito@chromium.org>
Tested-by: Arman Uguray <armansito@chromium.org>
diff --git a/client/cros/cellular/pseudomodem/bearer.py b/client/cros/cellular/pseudomodem/bearer.py
index e73b12c..ad1b951 100644
--- a/client/cros/cellular/pseudomodem/bearer.py
+++ b/client/cros/cellular/pseudomodem/bearer.py
@@ -86,7 +86,8 @@
self._AddProperty('Ip4Config')
self.Set(mm1.I_BEARER, config_prop, {
- 'method': dbus.types.UInt32(mm1.MM_BEARER_IP_METHOD_DHCP)
+ 'method': dbus.types.UInt32(mm1.MM_BEARER_IP_METHOD_DHCP,
+ variant_level=1)
})
self._active = True
self.Set(mm1.I_BEARER, 'Connected', dbus.types.Boolean(True))
diff --git a/client/cros/cellular/pseudomodem/modem.py b/client/cros/cellular/pseudomodem/modem.py
index ab5d068..4c8a2d9 100644
--- a/client/cros/cellular/pseudomodem/modem.py
+++ b/client/cros/cellular/pseudomodem/modem.py
@@ -17,6 +17,10 @@
ALLOWED_BEARER_PROPERTIES = [
'apn',
+ 'operator-id',
+ 'allowed-modes',
+ 'preferred-mode',
+ 'bands',
'ip-type',
'user',
'password',
@@ -434,9 +438,29 @@
@param bearer: Object path of the bearer to delete.
"""
- self.Disconnect(bearer)
- if bearer in self.bearers:
- self.bearers.pop(bearer)
+ logging.info('Modem.DeleteBearer: ' + str(bearer))
+ if not bearer in self.bearers:
+ logging.info('Unknown bearer. Nothing to do.')
+ return
+ bearer_object = self.bearers[bearer]
+ if bearer_object.IsActive():
+ def _SuccessCallback():
+ logging.info('Modem: Bearer %s disconnected.', str(bearer))
+ def _ErrorCallback(error):
+ logging.info('Modem: Failed to disconnect bearer: %s',
+ str(error))
+ self.Disconnect(bearer, _SuccessCallback, _ErrorCallback)
+
+ bearer_object.remove_from_connection()
+ self.bearers.pop(bearer)
+
+ def ClearBearers(self):
+ """
+ Deletes all bearers that are managed by this modem.
+
+ """
+ for b in self.bearers.keys():
+ self.DeleteBearer(b)
@dbus.service.method(mm1.I_MODEM)
def Reset(self):
@@ -465,7 +489,7 @@
if manager:
manager.Remove(self)
- self.bearers.clear()
+ self.ClearBearers()
# Reappear.
def _DelayedReappear():