<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19302">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BSC_Tests: test handling of EMERGENCY SETUP<br><br>The EMERGENCY SETUP is an L3 message that normally gets passed through<br>transparently to the A interface. Nomrally the BSC will not look into L3<br>messages. However if EMERGENCY CALLS are allowed on a BTS or not is set<br>in the system information. Also osmo-bsc has the option to deny<br>EMERGENCY CALLS globally for all BTSs.<br><br>Since EMERGENCY CALLS are a crucial application, the BSC should not only<br>send the appropiate sysinfo messages that forbid emergency calling. It<br>should also make sure that any attempt to make an emergency call is<br>rejected early if emergency calls are denied.<br><br>Lets add some checks to verify that the allow/deny mechanisms for<br>EMERGENCY CALLS are working as expected.<br><br>Depends: osmo-bsc Ia6eb38370ce4165d221d2ffbe1cd105c0628313c<br>Change-Id: I486d99953529a1ce9f0a3950c9a97900922eee92<br>Related: OS#4548<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 140 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/02/19302/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 410bc24..bb42a30 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -5810,6 +5810,142 @@</span><br><span>       f_vty_transceive(BSCVTY, "exit");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Allow/Deny emergency calls globally via VTY */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_vty_allow_emerg_msc(boolean allow) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_enter_cfg_msc(BSCVTY, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (allow) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_vty_transceive(BSCVTY, "allow-emergency allow");</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_vty_transceive(BSCVTY, "allow-emergency deny");</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_transceive(BSCVTY, "exit");</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_transceive(BSCVTY, "exit");</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%);">+/* Allow/Deny emergency calls per BTS via VTY */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_vty_allow_emerg_bts(boolean allow, integer bts_nr) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_enter_cfg_bts(BSCVTY, bts_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (allow) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_vty_transceive(BSCVTY, "rach emergency call allowed 1");</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_vty_transceive(BSCVTY, "rach emergency call allowed 0");</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_transceive(BSCVTY, "exit");</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_transceive(BSCVTY, "exit");</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%);">+/* Begin assignmet procedure and send an EMERGENCY SETUP (RR) */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_assignment_emerg_setup() runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        var PDU_ML3_MS_NW emerg_setup;</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring emerg_setup_enc;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RSL_Message emerg_setup_data_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_establish_fully(omit, omit);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      emerg_setup := valueof(ts_ML3_MO_CC_EMERG_SETUP(1, valueof(ts_Bcap_voice)));</span><br><span style="color: hsl(120, 100%, 40%);">+  emerg_setup_enc := enc_PDU_ML3_MS_NW(emerg_setup);</span><br><span style="color: hsl(120, 100%, 40%);">+    emerg_setup_data_ind := valueof(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), emerg_setup_enc));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        RSL.send(emerg_setup_data_ind);</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%);">+/* Test if the EMERGENCY SETUP gets passed on to the MSC via A when EMERGENCY</span><br><span style="color: hsl(120, 100%, 40%);">+ * CALLS are permitted by the BSC config. */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_emerg_setup_allow(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+   var PDU_BSSAP emerg_setup_data_ind_bssap;</span><br><span style="color: hsl(120, 100%, 40%);">+     var PDU_ML3_MS_NW emerg_setup;</span><br><span style="color: hsl(120, 100%, 40%);">+        timer T := 3.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_assignment_emerg_setup()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP.receive(tr_BSSAP_DTAP) -> value emerg_setup_data_ind_bssap {</span><br><span style="color: hsl(120, 100%, 40%);">+              emerg_setup := dec_PDU_ML3_MS_NW(emerg_setup_data_ind_bssap.pdu.dtap);</span><br><span style="color: hsl(120, 100%, 40%);">+                if (not isbound(emerg_setup.msgs.cc.emergencySetup)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        setverdict(fail, "no emergency setup");</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%);">+     [] BSSAP.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail, "unexpected BSSAP message!");</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "timout waiting for EMERGENCY SETUP!");</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   setverdict(pass);</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%);">+/* Test if the EMERGENCY SETUP gets blocked by the BSC if EMERGENCY CALLS are</span><br><span style="color: hsl(120, 100%, 40%);">+ * forbidden by the BSC config. */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_assignment_emerg_setup_deny(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    var PDU_BSSAP emerg_setup_data_ind_bssap;</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 3.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_assignment_emerg_setup()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_RR_RELEASE)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "unexpected RSL message!");</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "timout waiting for RR CHANNEL RELEASE!");</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%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* EMERGENCY CALL situation #1, allowed globally and by BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_emerg_setup_allow() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var TestHdlrParams pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_allow_emerg_msc(true);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_allow_emerg_bts(true, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_allow), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn.done;</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%);">+/* EMERGENCY CALL situation #2, forbidden globally but allowed by BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_emerg_setup_deny_msc() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var TestHdlrParams pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_allow_emerg_msc(false);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_allow_emerg_bts(true, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_deny), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</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%);">+/* EMERGENCY CALL situation #3, allowed globally but forbidden by BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_emerg_setup_deny_bts() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var TestHdlrParams pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Note: This simulates a spec violation by the MS, correct MS</span><br><span style="color: hsl(120, 100%, 40%);">+         * implementations would not try to establish an emergency call because</span><br><span style="color: hsl(120, 100%, 40%);">+        * the system information tells in advance that emergency calls are</span><br><span style="color: hsl(120, 100%, 40%);">+    * not forbidden */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_allow_emerg_msc(true);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_allow_emerg_bts(false, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_conn := f_start_handler(refers(f_TC_assignment_emerg_setup_deny), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Dyn PDCH todo:</span><br><span>    * activate OSMO as TCH/F</span><br><span>    * activate OSMO as TCH/H</span><br><span>@@ -6023,6 +6159,10 @@</span><br><span>       execute( TC_early_conn_fail() );</span><br><span>     execute( TC_late_conn_fail() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   /* Emergency call handling (deny / allow) */</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_assignment_emerg_setup_allow() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_assignment_emerg_setup_deny_msc() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_assignment_emerg_setup_deny_bts() );</span><br><span> }</span><br><span> </span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19302">change 19302</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/c/osmo-ttcn3-hacks/+/19302"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I486d99953529a1ce9f0a3950c9a97900922eee92 </div>
<div style="display:none"> Gerrit-Change-Number: 19302 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>