<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11052">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Pau Espin Pedrol: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add dynts suite to test switch between PDCH and TCH<br><br>It seems for not yet clear reasons the MS require some time after the<br>PDCH channels have been activated again to use them reliably. If no<br>sleep is used between call hangup and gprs activate pdp ctx, the MS<br>fails to activate the pdp ctx due to QMI error respone to the "Start<br>network" requested.<br><br>Related: OS#2582<br>Change-Id: I73b51c31309ac4c28c64ed7eb7c8c649e535aa22<br>---<br>M example/default-suites.conf<br>A example/scenarios/mod-bts0-dynts67-ipa.conf<br>A example/scenarios/mod-bts0-dynts67-osmo.conf<br>A suites/dynts/suite.conf<br>A suites/dynts/switch_tch_pdch.py<br>5 files changed, 142 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/example/default-suites.conf b/example/default-suites.conf</span><br><span>index 1857ba5..74f54a2 100644</span><br><span>--- a/example/default-suites.conf</span><br><span>+++ b/example/default-suites.conf</span><br><span>@@ -12,6 +12,8 @@</span><br><span> - gprs:sysmo</span><br><span> - gprs:sysmo+mod-bts0-dynts-ipa</span><br><span> - gprs:sysmo+mod-bts0-dynts-osmo</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:sysmo+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:sysmo+mod-bts0-dynts67-osmo.conf+cfg-codec-fr1</span><br><span> - nitb_sms:trx-b200</span><br><span> - sms:trx-b200</span><br><span> - nitb_ussd:trx-b200</span><br><span>@@ -26,6 +28,8 @@</span><br><span> - gprs:trx-b200</span><br><span> - gprs:trx-b200+mod-bts0-dynts-ipa</span><br><span> - gprs:trx-b200+mod-bts0-dynts-osmo</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:trx-b200+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:trx-b200+mod-bts0-dynts67-osmo.conf+cfg-codec-fr1</span><br><span> - nitb_sms:trx-sysmocell5000</span><br><span> - sms:trx-sysmocell5000</span><br><span> - nitb_ussd:trx-sysmocell5000</span><br><span>@@ -40,6 +44,8 @@</span><br><span> - gprs:trx-sysmocell5000</span><br><span> - gprs:trx-sysmocell5000+mod-bts0-dynts-ipa</span><br><span> - gprs:trx-sysmocell5000+mod-bts0-dynts-osmo</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:trx-sysmocell5000+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:trx-sysmocell5000+mod-bts0-dynts67-osmo.conf+cfg-codec-fr1</span><br><span> - nitb_sms:nanobts</span><br><span> - sms:nanobts+band-1900</span><br><span> - nitb_ussd:nanobts+band-1900</span><br><span>@@ -51,6 +57,7 @@</span><br><span> - voice:nanobts+band-1900+mod-bts0-dynts-ipa</span><br><span> - gprs:nanobts+band-1900</span><br><span> - gprs:nanobts+band-1900+mod-bts0-dynts-ipa</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:nanobts+band-1900+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1</span><br><span> - sms:nanobts+band-900</span><br><span> - nitb_ussd:nanobts+band-900</span><br><span> - ussd:nanobts+band-900</span><br><span>@@ -63,6 +70,7 @@</span><br><span> - gprs:nanobts+band-900</span><br><span> - gprs:nanobts+band-900+mod-bts0-dynts-ipa</span><br><span> - gprs:nanobts+band-900+mod-bts0-numtrx2+mod-bts0-chanallocdescend</span><br><span style="color: hsl(120, 100%, 40%);">+- dynts:nanobts+band-900+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1</span><br><span> - nitb_smpp</span><br><span> - smpp</span><br><span> - encryption</span><br><span>diff --git a/example/scenarios/mod-bts0-dynts67-ipa.conf b/example/scenarios/mod-bts0-dynts67-ipa.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..087b3b0</span><br><span>--- /dev/null</span><br><span>+++ b/example/scenarios/mod-bts0-dynts67-ipa.conf</span><br><span>@@ -0,0 +1,13 @@</span><br><span style="color: hsl(120, 100%, 40%);">+modifiers:</span><br><span style="color: hsl(120, 100%, 40%);">+  bts:</span><br><span style="color: hsl(120, 100%, 40%);">+  - num_trx: 1</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_list:</span><br><span style="color: hsl(120, 100%, 40%);">+    - timeslot_list:</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'CCCH+SDCCH4'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'TCH/F_PDCH'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'TCH/F_PDCH'</span><br><span>diff --git a/example/scenarios/mod-bts0-dynts67-osmo.conf b/example/scenarios/mod-bts0-dynts67-osmo.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..3153120</span><br><span>--- /dev/null</span><br><span>+++ b/example/scenarios/mod-bts0-dynts67-osmo.conf</span><br><span>@@ -0,0 +1,13 @@</span><br><span style="color: hsl(120, 100%, 40%);">+modifiers:</span><br><span style="color: hsl(120, 100%, 40%);">+  bts:</span><br><span style="color: hsl(120, 100%, 40%);">+  - num_trx: 1</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_list:</span><br><span style="color: hsl(120, 100%, 40%);">+    - timeslot_list:</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'CCCH+SDCCH4'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'SDCCH8'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'TCH/F_TCH/H_PDCH'</span><br><span style="color: hsl(120, 100%, 40%);">+      - phys_chan_config: 'TCH/F_TCH/H_PDCH'</span><br><span>diff --git a/suites/dynts/suite.conf b/suites/dynts/suite.conf</span><br><span>new file mode 100644</span><br><span>index 0000000..3b32480</span><br><span>--- /dev/null</span><br><span>+++ b/suites/dynts/suite.conf</span><br><span>@@ -0,0 +1,10 @@</span><br><span style="color: hsl(120, 100%, 40%);">+resources:</span><br><span style="color: hsl(120, 100%, 40%);">+  ip_address:</span><br><span style="color: hsl(120, 100%, 40%);">+  - times: 8 # msc, bsc, hlr, stp, mgw*2, sgsn, ggsn</span><br><span style="color: hsl(120, 100%, 40%);">+  bts:</span><br><span style="color: hsl(120, 100%, 40%);">+  - times: 1</span><br><span style="color: hsl(120, 100%, 40%);">+  modem:</span><br><span style="color: hsl(120, 100%, 40%);">+  - times: 2</span><br><span style="color: hsl(120, 100%, 40%);">+    features:</span><br><span style="color: hsl(120, 100%, 40%);">+    - gprs</span><br><span style="color: hsl(120, 100%, 40%);">+    - voice</span><br><span>diff --git a/suites/dynts/switch_tch_pdch.py b/suites/dynts/switch_tch_pdch.py</span><br><span>new file mode 100755</span><br><span>index 0000000..f0bbd38</span><br><span>--- /dev/null</span><br><span>+++ b/suites/dynts/switch_tch_pdch.py</span><br><span>@@ -0,0 +1,98 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span style="color: hsl(120, 100%, 40%);">+from osmo_gsm_tester.testenv import *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def activate_pdp(ms_mo, ms_mt):</span><br><span style="color: hsl(120, 100%, 40%);">+    # We need to use inet46 since ofono qmi only uses ipv4v6 eua (OS#2713)</span><br><span style="color: hsl(120, 100%, 40%);">+    ctx_id_v4_mo = ms_mo.activate_context(apn='inet46', protocol=ms_mo.CTX_PROT_IPv4)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('ms_mo pdp ctx %r activated' % repr(ctx_id_v4_mo))</span><br><span style="color: hsl(120, 100%, 40%);">+    ctx_id_v4_mt = ms_mt.activate_context(apn='inet46', protocol=ms_mt.CTX_PROT_IPv4)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('ms_mt pdp ctx %r activated' % repr(ctx_id_v4_mt))</span><br><span style="color: hsl(120, 100%, 40%);">+    sleep(5)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mo.deactivate_context(ctx_id_v4_mo)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt.deactivate_context(ctx_id_v4_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def make_call(ms_mo, ms_mt):</span><br><span style="color: hsl(120, 100%, 40%);">+    assert len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0</span><br><span style="color: hsl(120, 100%, 40%);">+    mo_cid = ms_mo.call_dial(ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+    mt_cid = ms_mt.call_wait_incoming(ms_mo)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('dial success')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    assert not ms_mo.call_is_active(mo_cid) and not ms_mt.call_is_active(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt.call_answer(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(ms_mo.call_is_active, mo_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(ms_mt.call_is_active, mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('answer success, call established and ongoing')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    sleep(5) # maintain the call active for 5 seconds</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    assert ms_mo.call_is_active(mo_cid) and ms_mt.call_is_active(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mo.call_hangup(mo_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    ms_mt.call_hangup(mt_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    wait(lambda: len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+    print('hangup success')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+hlr = suite.hlr()</span><br><span style="color: hsl(120, 100%, 40%);">+bts = suite.bts()</span><br><span style="color: hsl(120, 100%, 40%);">+pcu = bts.pcu()</span><br><span style="color: hsl(120, 100%, 40%);">+mgw_msc = suite.mgw()</span><br><span style="color: hsl(120, 100%, 40%);">+mgw_bsc = suite.mgw()</span><br><span style="color: hsl(120, 100%, 40%);">+stp = suite.stp()</span><br><span style="color: hsl(120, 100%, 40%);">+ggsn = suite.ggsn()</span><br><span style="color: hsl(120, 100%, 40%);">+sgsn = suite.sgsn(hlr, ggsn)</span><br><span style="color: hsl(120, 100%, 40%);">+msc = suite.msc(hlr, mgw_msc, stp)</span><br><span style="color: hsl(120, 100%, 40%);">+bsc = suite.bsc(msc, mgw_bsc, stp)</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mo = suite.modem()</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mt = suite.modem()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+bsc.bts_add(bts)</span><br><span style="color: hsl(120, 100%, 40%);">+sgsn.bts_add(bts)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+print('start network...')</span><br><span style="color: hsl(120, 100%, 40%);">+hlr.start()</span><br><span style="color: hsl(120, 100%, 40%);">+stp.start()</span><br><span style="color: hsl(120, 100%, 40%);">+ggsn.start()</span><br><span style="color: hsl(120, 100%, 40%);">+sgsn.start()</span><br><span style="color: hsl(120, 100%, 40%);">+msc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+mgw_msc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+mgw_bsc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+bsc.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+bts.start()</span><br><span style="color: hsl(120, 100%, 40%);">+wait(bsc.bts_is_connected, bts)</span><br><span style="color: hsl(120, 100%, 40%);">+print('Waiting for bts to be ready...')</span><br><span style="color: hsl(120, 100%, 40%);">+wait(bts.ready_for_pcu)</span><br><span style="color: hsl(120, 100%, 40%);">+pcu.start()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+hlr.subscriber_add(ms_mo)</span><br><span style="color: hsl(120, 100%, 40%);">+hlr.subscriber_add(ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mo.connect(msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mt.connect(msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mo.attach()</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mt.attach()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mo.log_info()</span><br><span style="color: hsl(120, 100%, 40%);">+ms_mt.log_info()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+print('waiting for modems to attach...')</span><br><span style="color: hsl(120, 100%, 40%);">+wait(ms_mo.is_connected, msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+wait(ms_mt.is_connected, msc.mcc_mnc())</span><br><span style="color: hsl(120, 100%, 40%);">+wait(msc.subscriber_attached, ms_mo)</span><br><span style="color: hsl(120, 100%, 40%);">+wait(msc.subscriber_attached, ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+print('waiting for modems to attach to data services...')</span><br><span style="color: hsl(120, 100%, 40%);">+wait(ms_mo.is_attached)</span><br><span style="color: hsl(120, 100%, 40%);">+wait(ms_mt.is_attached)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+print('1: activate_pdp')</span><br><span style="color: hsl(120, 100%, 40%);">+activate_pdp(ms_mo, ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+print('2: make_call')</span><br><span style="color: hsl(120, 100%, 40%);">+make_call(ms_mo, ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+print('3: Wait 30 seconds to let PCU handle the PDCH channels again')</span><br><span style="color: hsl(120, 100%, 40%);">+sleep(30)</span><br><span style="color: hsl(120, 100%, 40%);">+print('3: activate_pdp')</span><br><span style="color: hsl(120, 100%, 40%);">+activate_pdp(ms_mo, ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+print('4: make_call')</span><br><span style="color: hsl(120, 100%, 40%);">+make_call(ms_mo, ms_mt)</span><br><span style="color: hsl(120, 100%, 40%);">+print('Done!')</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11052">change 11052</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11052"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I73b51c31309ac4c28c64ed7eb7c8c649e535aa22 </div>
<div style="display:none"> Gerrit-Change-Number: 11052 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>