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/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20668 ) Change subject: sysmocom: Introduce suite to test emergency calls ...................................................................... sysmocom: Introduce suite to test emergency calls Change-Id: I2e851c94311ded0abd4ff072b8cc72316d972750 --- M src/osmo_gsm_tester/obj/bts.py M src/osmo_gsm_tester/obj/ms.py M src/osmo_gsm_tester/obj/ms_ofono.py M src/osmo_gsm_tester/obj/msc_osmo.py M src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl M src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl A sysmocom/suites/emergency/emergency_mo_mt_call.py A sysmocom/suites/emergency/suite.conf 8 files changed, 109 insertions(+), 2 deletions(-) Approvals: pespin: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/osmo_gsm_tester/obj/bts.py b/src/osmo_gsm_tester/obj/bts.py index 56e5aaa..5b43642 100644 --- a/src/osmo_gsm_tester/obj/bts.py +++ b/src/osmo_gsm_tester/obj/bts.py @@ -19,7 +19,10 @@ import copy from abc import ABCMeta, abstractmethod -from ..core import log, config, schema +from ..core import log +from ..core import config +from ..core import schema +from ..core import util def on_register_schemas(): resource_schema = { @@ -31,6 +34,7 @@ 'ciphers[]': schema.CIPHER, 'channel_allocator': schema.CHAN_ALLOCATOR, 'gprs_mode': schema.GPRS_MODE, + 'emergency_calls_allowed': schema.BOOL_STR, 'num_trx': schema.UINT, 'max_trx': schema.UINT, 'trx_list[].addr': schema.IPV4, @@ -132,6 +136,8 @@ if self.bvci is not None: config.overlay(values, { 'bvci': self.bvci }) + config.overlay(values, { 'emergency_calls_allowed': util.str2bool(values.get('emergency_calls_allowed', 'false')) } ) + conf = copy.deepcopy(self.conf) trx_list = conf.get('trx_list') if trx_list and len(trx_list) != self.num_trx(): diff --git a/src/osmo_gsm_tester/obj/ms.py b/src/osmo_gsm_tester/obj/ms.py index 60103d7..70ce558 100644 --- a/src/osmo_gsm_tester/obj/ms.py +++ b/src/osmo_gsm_tester/obj/ms.py @@ -120,5 +120,8 @@ self.set_msisdn(self.testenv.msisdn()) return self._msisdn + def emergency_numbers(self): + return ['112'] + def get_counter(self, counter_name): raise log.Error('get_counter() not implemented!') diff --git a/src/osmo_gsm_tester/obj/ms_ofono.py b/src/osmo_gsm_tester/obj/ms_ofono.py index 38fa4d4..a5ee3ea 100644 --- a/src/osmo_gsm_tester/obj/ms_ofono.py +++ b/src/osmo_gsm_tester/obj/ms_ofono.py @@ -834,4 +834,10 @@ service_type, response = ss.Initiate(command) return response + def emergency_numbers(self): + cmgr = self.dbus.interface(I_CALLMGR) + props = cmgr.GetProperties() + self.dbg('got Call properties', props) + return props.get('EmergencyNumbers', []) + # vim: expandtab tabstop=4 shiftwidth=4 diff --git a/src/osmo_gsm_tester/obj/msc_osmo.py b/src/osmo_gsm_tester/obj/msc_osmo.py index 173bc94..67e1d31 100644 --- a/src/osmo_gsm_tester/obj/msc_osmo.py +++ b/src/osmo_gsm_tester/obj/msc_osmo.py @@ -27,6 +27,7 @@ def on_register_schemas(): resource_schema = { 'path': schema.STR, + 'emergency_call_msisdn': schema.MSISDN, } schema.register_resource_schema('modem', resource_schema) @@ -43,6 +44,7 @@ self.use_osmux = "off" self.testenv = testenv self.ip_address = ip_address + self._emergency_call_msisdn = None self.hlr = hlr self.mgw = mgw self.stp = stp @@ -94,7 +96,8 @@ if self.authentication is not None: config.overlay(values, dict(msc=dict(net=dict(authentication=self.authentication)))) config.overlay(values, dict(msc=dict(use_osmux=self.use_osmux))) - + if self._emergency_call_msisdn is not None: + config.overlay(values, dict(msc=dict(emergency_call_msisdn=self._emergency_call_msisdn))) self.config = values @@ -146,6 +149,10 @@ def imsi_list_attached(self): return OsmoMscCtrl(self).subscriber_list_active() + def set_emergency_call_msisdn(self, msisdn): + self.dbg('Setting Emergency Call MSISDN', msisdn=msisdn) + self._emergency_call_msisdn = msisdn + def running(self): return not self.process.terminated() diff --git a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl index a03bb0b..66fa9e5 100644 --- a/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl +++ b/src/osmo_gsm_tester/templates/osmo-bsc.cfg.tmpl @@ -58,6 +58,11 @@ % endif ip.access unit_id ${bts.ipa_unit_id} 0 oml ip.access stream_id ${bts.stream_id} line 0 +% if bts.get('emergency_calls_allowed', False): + rach emergency call allowed 1 +% else: + rach emergency call allowed 0 +%endif % if bts.get('sgsn', False) and bts['gprs_mode'] != 'none': gprs mode ${bts.gprs_mode} gprs routing area ${bts.routing_area_code} @@ -105,6 +110,7 @@ msc core-mobile-country-code ${bsc.net.mcc} core-mobile-network-code ${bsc.net.mnc} + allow-emergency allow ip.access rtp-base 25000 mgw remote-ip ${mgw.ip_address.addr} mgw remote-port 2427 diff --git a/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl index 8d0ab23..bf7fc2b 100644 --- a/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl +++ b/src/osmo_gsm_tester/templates/osmo-msc.cfg.tmpl @@ -31,6 +31,9 @@ mgw bts-base 8000 osmux ${msc.use_osmux} assign-tmsi +%if msc.get('emergency_call_msisdn', None) is not None: + emergency-call route-to-msisdn ${msc.emergency_call_msisdn} +%endif cs7-instance-iu 0 cs7-instance-a 0 ctrl diff --git a/sysmocom/suites/emergency/emergency_mo_mt_call.py b/sysmocom/suites/emergency/emergency_mo_mt_call.py new file mode 100755 index 0000000..7fa9b6f --- /dev/null +++ b/sysmocom/suites/emergency/emergency_mo_mt_call.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +from osmo_gsm_tester.testenv import * + +hlr = tenv.hlr() +bts = tenv.bts() +mgw_msc = tenv.mgw() +mgw_bsc = tenv.mgw() +stp = tenv.stp() +msc = tenv.msc(hlr, mgw_msc, stp) +bsc = tenv.bsc(msc, mgw_bsc, stp) +ms_mo = tenv.modem() +ms_mt = tenv.modem() + +hlr.start() +stp.start() + +# Set MSC to route emergency call to ms_mt: +msc.set_emergency_call_msisdn(ms_mt.msisdn()) +msc.start() + +mgw_msc.start() +mgw_bsc.start() + +bsc.bts_add(bts) +bsc.start() + +bts.start() +wait(bsc.bts_is_connected, bts) + +hlr.subscriber_add(ms_mo) +hlr.subscriber_add(ms_mt) + +ms_mo.connect(msc.mcc_mnc()) +ms_mt.connect(msc.mcc_mnc()) + +ms_mo.log_info() +ms_mt.log_info() + +print('waiting for modems to attach...') +wait(ms_mo.is_registered, msc.mcc_mnc()) +wait(ms_mt.is_registered, msc.mcc_mnc()) +wait(msc.subscriber_attached, ms_mo, ms_mt) + +assert len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0 +# Calling emergency number should be redirected to ms_mt as configured further above: +emerg_numbers = ms_mo.emergency_numbers() +assert len(emerg_numbers) > 0 +print('dialing Emergency Number %s' % (emerg_numbers[0])) +mo_cid = ms_mo.call_dial(emerg_numbers[0]) +mt_cid = ms_mt.call_wait_incoming(ms_mo) +print('dial success') + +assert not ms_mo.call_is_active(mo_cid) and not ms_mt.call_is_active(mt_cid) +ms_mt.call_answer(mt_cid) +wait(ms_mo.call_is_active, mo_cid) +wait(ms_mt.call_is_active, mt_cid) +print('answer success, call established and ongoing') + +sleep(5) # maintain the call active for 5 seconds + +assert ms_mo.call_is_active(mo_cid) and ms_mt.call_is_active(mt_cid) +ms_mt.call_hangup(mt_cid) +wait(lambda: len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0) +print('hangup success') diff --git a/sysmocom/suites/emergency/suite.conf b/sysmocom/suites/emergency/suite.conf new file mode 100644 index 0000000..eb0de71 --- /dev/null +++ b/sysmocom/suites/emergency/suite.conf @@ -0,0 +1,12 @@ +resources: + ip_address: + - times: 6 # msc, bsc, hlr, stp, mgw*2 + bts: + - times: 1 + modem: + - times: 2 + features: + - voice +modifiers: + bts: + - emergency_calls_allowed: true -- To view, visit https://gerrit.osmocom.org/c/osmo-gsm-tester/+/20668 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-gsm-tester Gerrit-Branch: master Gerrit-Change-Id: I2e851c94311ded0abd4ff072b8cc72316d972750 Gerrit-Change-Number: 20668 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin at sysmocom.de> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201015/7df62fe1/attachment.htm>