This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Pau Espin Pedrol gerrit-no-reply at lists.osmocom.orgReview at https://gerrit.osmocom.org/2484 ofono_client: Implement network registration during connect() Also add a new simple test to check network registration is working Change-Id: I3092edc3dd76131da9aeeef6ad5082d1a9009342 --- M src/osmo_gsm_tester/ofono_client.py M src/osmo_gsm_tester/osmo_nitb.py A suites/netreg/one_register.py A suites/netreg/suite.conf M suites/sms/mo_mt_sms.py 5 files changed, 117 insertions(+), 8 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/84/2484/1 diff --git a/src/osmo_gsm_tester/ofono_client.py b/src/osmo_gsm_tester/ofono_client.py index 1f0380a..8e4c75e 100644 --- a/src/osmo_gsm_tester/ofono_client.py +++ b/src/osmo_gsm_tester/ofono_client.py @@ -32,6 +32,10 @@ I_NETREG = 'org.ofono.NetworkRegistration' I_SMS = 'org.ofono.MessageManager' +# See https://github.com/intgr/ofono/blob/master/doc/network-api.txt#L78 +ST_REGISTERED = 'registered' +ST_ROAMING = 'roaming' + def poll(): global glib_main_ctx while glib_main_ctx.pending(): @@ -59,6 +63,10 @@ self._dbus_obj = None self._interfaces = set() self.sms_received_list = [] + self.netreg_status = None + self.connect_requested = False + self.mnc = None + self.mcc = None # init interfaces and connect to signals: self.dbus_obj() test.poll() @@ -145,6 +153,10 @@ if retries <= 0: self.err('Interface enabled by signal, but not available:', I_SMS) raise + elif interface_name == I_NETREG: + self.dbus_obj()[I_NETREG].PropertyChanged.connect(self._on_netreg_property_changed) + if self.connect_requested: + self.register_async() def _on_interface_disabled(self, interface_name): self.dbg('Interface disabled:', interface_name) @@ -152,19 +164,75 @@ def has_interface(self, name): return name in self._interfaces - def connect(self, nitb): - 'set the modem up to connect to MCC+MNC from NITB config' - self.log('connect to', nitb) + def _on_netreg_property_changed(self, name, value): + self.log('%r.PropertyChanged() -> %s=%s' % (I_NETREG, name, value)) + + def get_netreg_status(self): + try: + self.netreg_status = self.properties(I_NETREG).get('Status') + except Exception: + self.netreg_status = None + return self.netreg_status + + def is_roaming(self): + status = self.get_netreg_status() + return status == ST_ROAMING + + def is_connected(self): + status = self.get_netreg_status() + return status == ST_REGISTERED or status == ST_ROAMING + + def register_async_default(self): + if nitb == None: + return #connect() was not called yet + self.log('Registering with the network...', nitb) + if self.is_connected(): + self.log('Already registered with the network') + return + nr = self.dbus_obj()[I_NETREG] + nr.Scan() + nr.Register() + + def register_async(self): + if self.mcc is None or self.mnc is None: + self.register_async_default() + return + nr = self.dbus_obj()[I_NETREG] + nr.Scan() + ops = nr.GetOperators() + myop = None + for op in ops: + op_path, op_prop = op + self.dbg('Checking operator: ', op_path, op_prop) + if op_prop.get('MobileCountryCode') == self.mcc and op_prop.get('MobileNetworkCode') == self.mnc: + myop = op_path + break + if myop is None: + raise RuntimeError('Failed to find Network Operator ', self.mcc, self.mnc) + dbus_op = systembus_get(myop) + dbus_op.Register() + + def power_reset(self): + 'Power the modem and put it online' + self.log('Powering on') prepowered = self.properties().get('Powered') if prepowered is not None and prepowered: self.set_online(False) self.set_powered(False) self.set_powered() self.set_online() - if not self.has_interface(I_NETREG): - self.log('No %r interface, hoping that the modem connects by itself' % I_NETREG) + + def connect(self, mcc=None, mnc=None): + 'set the modem up to connect to MCC+MNC' + self.log('connect to', mcc, mnc) + self.mcc = mcc + self.mnc = mnc + self.connect_requested = True + if self.has_interface(I_NETREG): + self.register_async() else: - self.log('Use of %r interface not implemented yet, hoping that the modem connects by itself' % I_NETREG) + self.log('No %r interface, delaying registration until it appears' % I_NETREG) + def sms_send(self, to_msisdn): if hasattr(to_msisdn, 'msisdn'): diff --git a/src/osmo_gsm_tester/osmo_nitb.py b/src/osmo_gsm_tester/osmo_nitb.py index 4cd6055..5d78755 100644 --- a/src/osmo_gsm_tester/osmo_nitb.py +++ b/src/osmo_gsm_tester/osmo_nitb.py @@ -38,6 +38,7 @@ self.set_log_category(log.C_RUN) self.set_name('osmo-nitb_%s' % nitb_iface.get('addr')) self.bts = [] + self.config = None def start(self): self.log('Starting osmo-nitb') @@ -73,6 +74,7 @@ config.overlay(values, dict(nitb=dict(net=dict(bts_list=bts_list)))) self.dbg(conf=values) + self.config = values['nitb'] with open(self.config_file, 'w') as f: r = template.render('osmo-nitb.cfg', values) diff --git a/suites/netreg/one_register.py b/suites/netreg/one_register.py new file mode 100755 index 0000000..9ce9f7e --- /dev/null +++ b/suites/netreg/one_register.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +from osmo_gsm_tester.test import * + +print('use resources...') +nitb = suite.nitb() +bts = suite.bts() +ms = suite.modem() + +print('start nitb and bts...') +nitb.bts_add(bts) +nitb.start() +sleep(1) +assert nitb.running() +bts.start() + +nitb.subscriber_add(ms) + +ms.power_reset() +ms.connect(nitb.config['net']['mcc'], nitb.config['net']['mnc']) +print(ms.properties()) +wait(nitb.subscriber_attached, ms) +wait(ms.is_connected) diff --git a/suites/netreg/suite.conf b/suites/netreg/suite.conf new file mode 100644 index 0000000..2a82721 --- /dev/null +++ b/suites/netreg/suite.conf @@ -0,0 +1,10 @@ +resources: + nitb_iface: + - times: 1 + bts: + - times: 1 + modem: + - times: 1 + +defaults: + timeout: 60s diff --git a/suites/sms/mo_mt_sms.py b/suites/sms/mo_mt_sms.py index 7176197..647972f 100755 --- a/suites/sms/mo_mt_sms.py +++ b/suites/sms/mo_mt_sms.py @@ -17,11 +17,18 @@ nitb.subscriber_add(ms_mo) nitb.subscriber_add(ms_mt) -ms_mo.connect(nitb) -ms_mt.connect(nitb) +ms_mo.power_reset() +ms_mt.power_reset() + +ms_mo.connect(nitb.config['net']['mcc'], nitb.config['net']['mnc']) +ms_mt.connect(nitb.config['net']['mcc'], nitb.config['net']['mnc']) print(ms_mo.properties()) print(ms_mt.properties()) + wait(nitb.subscriber_attached, ms_mo, ms_mt) +wait(ms_mo.is_connected) +wait(ms_mt.is_connected) + sms = ms_mo.sms_send(ms_mt.msisdn) wait(ms_mt.sms_was_received, sms) -- To view, visit https://gerrit.osmocom.org/2484 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3092edc3dd76131da9aeeef6ad5082d1a9009342 Gerrit-PatchSet: 1 Gerrit-Project: osmo-gsm-tester Gerrit-Branch: master Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>