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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">msc: Add Iu related tests for most existing 2G tests<br><br>This might look a bit like copy+paste programming for our testcases.<br><br>However, we actually want the Iu related tests show up as separate<br>'testscase' in the TTCN-3 sense, so there's no way that's more elegant<br>than this :/<br><br>Change-Id: I3b56e17487c9df839e67ed390a1ff89979683e8e<br>---<br>M msc/BSC_ConnectionHandler.ttcn<br>M msc/MSC_Tests.ttcn<br>A msc/MSC_Tests_Iu.ttcn<br>3 files changed, 590 insertions(+), 58 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn</span><br><span>index 1fd02aa..b1a0491 100644</span><br><span>--- a/msc/BSC_ConnectionHandler.ttcn</span><br><span>+++ b/msc/BSC_ConnectionHandler.ttcn</span><br><span>@@ -86,7 +86,7 @@</span><br><span>        boolean ran_is_geran</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function imsi_hex2oct(hexstring imsi) return octetstring {</span><br><span style="color: hsl(120, 100%, 40%);">+function imsi_hex2oct(hexstring imsi) return octetstring {</span><br><span>         var hexstring tmp := ''H;</span><br><span>    var octetstring ret;</span><br><span>         var integer i;</span><br><span>diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn</span><br><span>index af654a3..d4be96b 100644</span><br><span>--- a/msc/MSC_Tests.ttcn</span><br><span>+++ b/msc/MSC_Tests.ttcn</span><br><span>@@ -1,5 +1,7 @@</span><br><span> module MSC_Tests {</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+friend module MSC_Tests_Iu;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> import from General_Types all;</span><br><span> import from Osmocom_Types all;</span><br><span> </span><br><span>@@ -41,6 +43,7 @@</span><br><span> import from BSSMAP_Templates all;</span><br><span> import from RAN_Emulation all;</span><br><span> import from BSC_ConnectionHandler all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RANAP_Templates all;</span><br><span> </span><br><span> import from SGsAP_Templates all;</span><br><span> import from SGsAP_Types all;</span><br><span>@@ -518,6 +521,10 @@</span><br><span>                 use_umts_aka := false,</span><br><span>               ran_is_geran := ran_is_geran</span><br><span>         };</span><br><span style="color: hsl(120, 100%, 40%);">+    if (not ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+               pars.use_umts_aka := true;</span><br><span style="color: hsl(120, 100%, 40%);">+            pars.net.expect_auth := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span>    return pars;</span><br><span> }</span><br><span> </span><br><span>@@ -587,7 +594,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Do LU by IMSI, refuse it on GSUP and expect LU REJ back to MS */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_imsi_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_imsi_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>       f_init_handler(pars);</span><br><span>        var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi);</span><br><span> </span><br><span>@@ -613,8 +620,10 @@</span><br><span>  vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Do LU by IMSI, timeout on GSUP */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_imsi_timeout_gsup(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_imsi_timeout_gsup(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>    f_init_handler(pars);</span><br><span>        var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi);</span><br><span> </span><br><span>@@ -641,6 +650,7 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_lu_imsi_auth_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>     pars.net.expect_auth := true;</span><br><span>        f_init_handler(pars);</span><br><span>@@ -655,7 +665,8 @@</span><br><span>  vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_imsi_auth3g_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_imsi_auth3g_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>        pars.net.expect_auth := true;</span><br><span>        pars.use_umts_aka := true;</span><br><span>   f_init_handler(pars);</span><br><span>@@ -670,8 +681,9 @@</span><br><span>  vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Send CM SERVICE REQ for IMSI that has never performed LU before */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_cmserv_imsi_unknown(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_cmserv_imsi_unknown(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>   f_init_handler(pars);</span><br><span> </span><br><span>@@ -712,7 +724,8 @@</span><br><span>      vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mo_call(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mo_call(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>  f_init_handler(pars);</span><br><span>        var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span>      cpars.bss_rtp_port := 1110;</span><br><span>@@ -731,8 +744,9 @@</span><br><span>    vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test LU (with authentication enabled), where HLR times out sending SAI response */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_auth_sai_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_auth_sai_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>       f_init_handler(pars);</span><br><span> </span><br><span>    var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)</span><br><span>@@ -745,7 +759,9 @@</span><br><span>        f_cl3_or_initial_ue(l3_lu);</span><br><span> </span><br><span>      /* Send Early Classmark, just for the fun of it */</span><br><span style="color: hsl(0, 100%, 40%);">-      BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi));</span><br><span>  /* The HLR would normally return an auth vector here, but we fail to do so. */</span><br><span>@@ -762,8 +778,9 @@</span><br><span>         vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test LU (with authentication enabled), where HLR rejects sending SAI error */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_auth_sai_err(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_auth_sai_err(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>    f_init_handler(pars);</span><br><span> </span><br><span>    var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)</span><br><span>@@ -776,7 +793,9 @@</span><br><span>        f_cl3_or_initial_ue(l3_lu);</span><br><span> </span><br><span>      /* Send Early Classmark, just for the fun of it */</span><br><span style="color: hsl(0, 100%, 40%);">-      BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi));</span><br><span>  GSUP.send(ts_GSUP_SAI_ERR(g_pars.imsi, 13));</span><br><span>@@ -793,6 +812,7 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test LU but BSC will send a clear request in the middle */</span><br><span> private function f_tc_lu_clear_request(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>     f_init_handler(pars);</span><br><span>@@ -837,7 +857,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Test LU but BSC will send a clear request in the middle */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_disconnect(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_disconnect(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>       f_init_handler(pars);</span><br><span> </span><br><span>    var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)</span><br><span>@@ -850,7 +870,9 @@</span><br><span>        f_cl3_or_initial_ue(l3_lu);</span><br><span> </span><br><span>      /* Send Early Classmark, just for the fun of it */</span><br><span style="color: hsl(0, 100%, 40%);">-      BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        f_sleep(1.0);</span><br><span>        /* send clear request in the middle of the LU */</span><br><span>@@ -866,9 +888,8 @@</span><br><span>       vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Test LU but with illegal mobile identity type = IMEI */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>      f_init_handler(pars);</span><br><span> </span><br><span>    var PDU_ML3_MS_NW l3_lu := f_build_lu_imei(g_pars.imei)</span><br><span>@@ -881,7 +902,9 @@</span><br><span>        f_cl3_or_initial_ue(l3_lu);</span><br><span> </span><br><span>      /* Send Early Classmark, just for the fun of it */</span><br><span style="color: hsl(0, 100%, 40%);">-      BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span>    /* wait for LU reject, ignore any ID REQ */</span><br><span>  alt {</span><br><span>        [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) { }</span><br><span>@@ -898,6 +921,7 @@</span><br><span>         vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test LU by TMSI with unknown TMSI, expect (and answer) ID REQ. */</span><br><span> private function f_tc_lu_tmsi_noauth_unknown(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>        /* We piggyback a test for an MSC crash on overlong IMSI (OS#2864) onto this test. */</span><br><span>@@ -953,7 +977,7 @@</span><br><span> </span><br><span> </span><br><span> /* Test IMSI DETACH (MI=IMSI) */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_imsi_detach_by_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_imsi_detach_by_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>         f_init_handler(pars);</span><br><span> </span><br><span>    var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span>@@ -962,7 +986,9 @@</span><br><span>        f_cl3_or_initial_ue(valueof(ts_ML3_MO_MM_IMSI_DET_Ind(mi)));</span><br><span> </span><br><span>     /* Send Early Classmark, just for the fun of it? */</span><br><span style="color: hsl(0, 100%, 40%);">-     BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        /* wait for normal teardown */</span><br><span>       f_expect_clear();</span><br><span>@@ -975,8 +1001,9 @@</span><br><span>     vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test IMSI DETACH (MI=TMSI) */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_imsi_detach_by_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_imsi_detach_by_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>    f_init_handler(pars);</span><br><span> </span><br><span>    var MobileIdentityLV mi := valueof(ts_MI_TMSI_LV('01020304'O));</span><br><span>@@ -985,7 +1012,9 @@</span><br><span>       f_cl3_or_initial_ue(valueof(ts_ML3_MO_MM_IMSI_DET_Ind(mi)));</span><br><span> </span><br><span>     /* Send Early Classmark, just for the fun of it? */</span><br><span style="color: hsl(0, 100%, 40%);">-     BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        /* wait for normal teardown */</span><br><span>       f_expect_clear();</span><br><span>@@ -998,8 +1027,9 @@</span><br><span>     vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test IMSI DETACH (MI=IMEI), which is illegal */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_imsi_detach_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_imsi_detach_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>  f_init_handler(pars);</span><br><span> </span><br><span>    var MobileIdentityLV mi := valueof(ts_MI_IMEI_LV(g_pars.imei));</span><br><span>@@ -1008,7 +1038,9 @@</span><br><span>      f_cl3_or_initial_ue(valueof(ts_ML3_MO_MM_IMSI_DET_Ind(mi)));</span><br><span> </span><br><span>     /* Send Early Classmark, just for the fun of it? */</span><br><span style="color: hsl(0, 100%, 40%);">-     BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        /* wait for normal teardown */</span><br><span>       f_expect_clear();</span><br><span>@@ -1032,7 +1064,7 @@</span><br><span> }</span><br><span> </span><br><span> /* establish an emergency call by IMEI, no SIM inserted (and hence no IMSI) */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_emerg_call_imei_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_emerg_call_imei_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>      f_init_handler(pars);</span><br><span> </span><br><span>    var MobileIdentityLV mi := valueof(ts_MI_IMEI_LV(g_pars.imei));</span><br><span>@@ -1049,8 +1081,9 @@</span><br><span>      vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* establish an emergency call by IMSI, SIM inserted (and hence IMSI) */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_emerg_call_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_emerg_call_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>    f_init_handler(pars);</span><br><span>        /* First perform location update to ensure subscriber is known */</span><br><span>    f_perform_lu();</span><br><span>@@ -1065,6 +1098,7 @@</span><br><span>      vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* CM Service Request for VGCS -> reject */</span><br><span> private function f_tc_cm_serv_req_vgcs_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>     f_init_handler(pars);</span><br><span>@@ -1276,7 +1310,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Test Complete L3 with random payload */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_establish_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_establish_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>        f_init_handler(pars);</span><br><span> </span><br><span>    f_perform_lu();</span><br><span>@@ -1292,8 +1326,9 @@</span><br><span>      vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test MO Call SETUP with no response from MNCC */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_mo_setup_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_mo_setup_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>       f_init_handler(pars, 190.0);</span><br><span> </span><br><span>     var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span>@@ -1322,8 +1357,9 @@</span><br><span>      vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test MO Call with no response to RAN-side CRCX */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_mo_crcx_ran_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_mo_crcx_ran_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>        f_init_handler(pars);</span><br><span>        var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span>      var MNCC_PDU mncc;</span><br><span>@@ -1361,8 +1397,9 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test MO Call with reject to RAN-side CRCX */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_mo_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_mo_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>       f_init_handler(pars);</span><br><span>        var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span>      var MNCC_PDU mncc;</span><br><span>@@ -1475,7 +1512,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Test MT Call */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_mt_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_mt_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>         f_init_handler(pars);</span><br><span>        var CallParameters cpars := valueof(t_CallParams('123456'H, 0));</span><br><span>     var MNCC_PDU mncc;</span><br><span>@@ -1544,8 +1581,9 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test MT Call T310 timer */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_mt_t310(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_mt_t310(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>      f_init_handler(pars, 200.0);</span><br><span>         var CallParameters cpars := valueof(t_CallParams('123456'H, 0));</span><br><span>     var MNCC_PDU mncc;</span><br><span>@@ -1596,8 +1634,9 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Perform successful LU + MO call, then GSUP LocationCancel. Subscriber must be denied CM SERV */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_gsup_cancel(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_gsup_cancel(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>  f_init_handler(pars);</span><br><span>        var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span>      cpars.bss_rtp_port := 1110;</span><br><span>@@ -1644,6 +1683,7 @@</span><br><span>  vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* A5/1 only permitted on network side, and MS capable to do it */</span><br><span> private function f_tc_lu_imsi_auth_tmsi_encr_1_13(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>     pars.net.expect_auth := true;</span><br><span>@@ -1900,7 +1940,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Test MO Call with no response to RAN-side CRCX or DTAP Release */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_mo_release_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_mo_release_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>    f_init_handler(pars);</span><br><span>        var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span>      var MNCC_PDU mncc;</span><br><span>@@ -1983,12 +2023,20 @@</span><br><span>         setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Two BSSMAP resets from two different BSCs plus one IuCS RANAP Reset */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_reset_two_1iu() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_sleep(2.0);</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> /***********************************************************************</span><br><span>  * SMS Testing</span><br><span>  ***********************************************************************/</span><br><span> </span><br><span> /* LU followed by MO SMS */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mo_sms(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mo_sms(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>        var SmsParameters spars := valueof(t_SmsPars);</span><br><span> </span><br><span>   f_init_handler(pars);</span><br><span>@@ -2010,6 +2058,7 @@</span><br><span>        vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_vty_sms_send(charstring imsi, charstring msisdn, charstring text)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>   f_vty_transceive(MSCVTY, "subscriber imsi "&imsi&" sms sender msisdn "&msisdn&" send "&text);</span><br><span>@@ -2023,7 +2072,7 @@</span><br><span> }</span><br><span> </span><br><span> /* LU followed by MT SMS */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mt_sms(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mt_sms(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>     var SmsParameters spars := valueof(t_SmsPars);</span><br><span>       var OCT4 tmsi;</span><br><span> </span><br><span>@@ -2062,8 +2111,9 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Paging for MT SMS but no response */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mt_sms_paging_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mt_sms_paging_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>   var SmsParameters spars := valueof(t_SmsPars);</span><br><span>       var OCT4 tmsi;</span><br><span>       f_init_handler(pars, 150.0);</span><br><span>@@ -2082,18 +2132,22 @@</span><br><span>       f_vty_sms_send(hex2str(pars.imsi), "2342", "Hello SMS");</span><br><span> </span><br><span>     /* Expect the MSC to page exactly once */</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi)) { };</span><br><span style="color: hsl(120, 100%, 40%);">+     f_expect_paging();</span><br><span> </span><br><span>       /* Wait some time to make sure the MSC is not delivering any further</span><br><span>          * paging messages or anything else that could be unexpected. */</span><br><span>     timer T := 20.0;</span><br><span>     T.start</span><br><span>      alt {</span><br><span style="color: hsl(0, 100%, 40%);">-           [] BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi))</span><br><span style="color: hsl(120, 100%, 40%);">+               [pars.ran_is_geran] BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi))</span><br><span>             {</span><br><span>                    setverdict(fail, "paging seems not to stop!");</span><br><span>                     mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+             [not pars.ran_is_geran] BSSAP.receive(tr_RANAP_Paging(cs_domain, imsi_hex2oct(g_pars.imsi), ?)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(fail, "paging seems not to stop!");</span><br><span style="color: hsl(120, 100%, 40%);">+                      mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            [] BSSAP.receive {</span><br><span>                   setverdict(fail, "unexpected BSSAP message received");</span><br><span>                     self.stop;</span><br><span>@@ -2116,8 +2170,9 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* mobile originated SMS from MS/BTS/BSC side to SMPP */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_smpp_mo_sms(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_smpp_mo_sms(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>    var SmsParameters spars := valueof(t_SmsPars);</span><br><span> </span><br><span>   f_init_handler(pars);</span><br><span>@@ -2175,8 +2230,9 @@</span><br><span>        f_vty_config2(MSCVTY, { "smpp", "esme msc_tester"}, "no default-route");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test MO-SMS from MS/BTS/BSC towards HLR (via GSUP) */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_gsup_mo_sms(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_gsup_mo_sms(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>       var SmsParameters spars := valueof(t_SmsPars);</span><br><span>       var GSUP_PDU gsup_msg_rx;</span><br><span>@@ -2244,8 +2300,9 @@</span><br><span>    f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test MO-SMMA from MS/BTS/BSC towards HLR (via GSUP) */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_gsup_mo_smma(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_gsup_mo_smma(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>      var SmsParameters spars := valueof(t_SmsPars);</span><br><span>       var GSUP_PDU gsup_msg_rx;</span><br><span>@@ -2300,6 +2357,7 @@</span><br><span>    f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Helper for sending MT SMS over GSUP */</span><br><span> private function f_gsup_forwardSM_req(SmsParameters spars, OCT1 mms := '00'O)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>@@ -2319,7 +2377,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Test successful MT-SMS (RP-ACK) over GSUP */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_gsup_mt_sms_ack(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_gsup_mt_sms_ack(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>         var SmsParameters spars := valueof(t_SmsPars);</span><br><span> </span><br><span>@@ -2381,8 +2439,9 @@</span><br><span>   f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test rejected MT-SMS (RP-ERROR) over GSUP */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_gsup_mt_sms_err(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_gsup_mt_sms_err(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>  var SmsParameters spars := valueof(t_SmsPars);</span><br><span>       var OCT1 sm_rp_cause := '78'O; /* dummy RP-Cause value */</span><br><span>@@ -2447,8 +2506,9 @@</span><br><span>    f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test SM-RP-MR assignment for MT-SMS over GSUP */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_gsup_mt_sms_rp_mr(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_gsup_mt_sms_rp_mr(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>  var SmsParameters spars1 := valueof(t_SmsPars); /* 1st SMS */</span><br><span>        var SmsParameters spars2 := valueof(t_SmsPars); /* 2nd SMS */</span><br><span>@@ -2559,8 +2619,9 @@</span><br><span>        f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test SM-RP-MR assignment for MT-SMS over GSUP */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_gsup_mo_mt_sms_rp_mr(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_gsup_mo_mt_sms_rp_mr(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>    var SmsParameters spars_mo := valueof(t_SmsPars); /* MO SMMA */</span><br><span>      var SmsParameters spars_mt := valueof(t_SmsPars); /* MT SMS */</span><br><span>@@ -2663,6 +2724,7 @@</span><br><span>       f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test multi-part MT-SMS over GSUP */</span><br><span> private function f_tc_gsup_mt_multi_part_sms(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>@@ -2696,7 +2758,7 @@</span><br><span> </span><br><span>                /* Expect Paging Request and Establish connection */</span><br><span>                 if (i == 3) { /* ... only once! */</span><br><span style="color: hsl(0, 100%, 40%);">-                      BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+                 f_expect_paging();</span><br><span>                   f_establish_fully(EST_TYPE_PAG_RESP);</span><br><span>                }</span><br><span> </span><br><span>@@ -2902,7 +2964,7 @@</span><br><span> }</span><br><span> </span><br><span> /* LU followed by MO USSD request */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mo_ussd_single_request(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mo_ussd_single_request(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>  f_init_handler(pars);</span><br><span> </span><br><span>@@ -2978,8 +3040,9 @@</span><br><span>    vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* LU followed by MT USSD notification */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mt_ussd_notification(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mt_ussd_notification(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>       f_init_handler(pars);</span><br><span> </span><br><span>@@ -3021,7 +3084,10 @@</span><br><span>   /* Send it to MSC and expect Paging Request */</span><br><span>       GSUP.send(gsup_req);</span><br><span>         alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi)) {</span><br><span style="color: hsl(120, 100%, 40%);">+     [pars.ran_is_geran] BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi)) {</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%);">+     [not pars.ran_is_geran] BSSAP.receive(tr_RANAP_Paging(cs_domain, imsi_hex2oct(g_pars.imsi), ?)) {</span><br><span>            setverdict(pass);</span><br><span>            }</span><br><span>    /* We don't expect anything else */</span><br><span>@@ -3081,8 +3147,9 @@</span><br><span>      vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* LU followed by MT call and MO USSD request during this call */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mo_ussd_during_mt_call(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mo_ussd_during_mt_call(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>   f_init_handler(pars);</span><br><span> </span><br><span>@@ -3168,7 +3235,7 @@</span><br><span> }</span><br><span> </span><br><span> /* BSSMAP Clear Request in the middle of a call, see OS#3062 */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_mo_cc_bssmap_clear(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_mo_cc_bssmap_clear(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>     f_init_handler(pars);</span><br><span>        var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span>      var MNCC_PDU mncc;</span><br><span>@@ -3192,15 +3259,28 @@</span><br><span>         MGCP.receive(tr_CRCX);</span><br><span> </span><br><span>   f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   BSSAP.send(ts_BSSMAP_ClearRequest(0));</span><br><span style="color: hsl(120, 100%, 40%);">+        if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_BSSMAP_ClearRequest(0));</span><br><span style="color: hsl(120, 100%, 40%);">+        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSAP.send(ts_RANAP_IuReleaseRequest(ts_RanapCause_om_intervention));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> </span><br><span>        var default ccrel := activate(as_optional_cc_rel(cpars));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] MNCC.receive(tr_MNCC_REL_ind(?, ?)) { };</span><br><span style="color: hsl(0, 100%, 40%);">-     [] BSSAP.receive(tr_BSSMAP_ClearCommand) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (pars.ran_is_geran) {</span><br><span style="color: hsl(120, 100%, 40%);">+              interleave {</span><br><span style="color: hsl(120, 100%, 40%);">+          [] MNCC.receive(tr_MNCC_REL_ind(?, ?)) { };</span><br><span style="color: hsl(120, 100%, 40%);">+           [] BSSAP.receive(tr_BSSMAP_ClearCommand) {</span><br><span>                   BSSAP.send(ts_BSSMAP_ClearComplete);</span><br><span style="color: hsl(0, 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%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              interleave {</span><br><span style="color: hsl(120, 100%, 40%);">+          [] MNCC.receive(tr_MNCC_REL_ind(?, ?)) { };</span><br><span style="color: hsl(120, 100%, 40%);">+           [] BSSAP.receive(tr_RANAP_IuReleaseCommand(?)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      BSSAP.send(ts_RANAP_IuReleaseComplete);</span><br><span style="color: hsl(120, 100%, 40%);">+                       };</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span>    }</span><br><span> </span><br><span>        deactivate(ccrel);</span><br><span>@@ -3215,8 +3295,9 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* LU followed by MT call and MT USSD request during this call */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mt_ussd_during_mt_call(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mt_ussd_during_mt_call(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>   f_init_handler(pars);</span><br><span> </span><br><span>@@ -3317,8 +3398,9 @@</span><br><span>    vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* LU followed by MO USSD request and MO Release during transaction */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_mo_ussd_mo_release(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_mo_ussd_mo_release(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>      f_init_handler(pars);</span><br><span> </span><br><span>@@ -3414,8 +3496,9 @@</span><br><span>    vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* LU followed by MO USSD request and MT Release due to timeout */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_lu_and_ss_session_timeout(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_lu_and_ss_session_timeout(charstring id, BSC_ConnHdlrPars pars)</span><br><span> runs on BSC_ConnHdlr {</span><br><span>  f_init_handler(pars);</span><br><span> </span><br><span>@@ -3486,6 +3569,7 @@</span><br><span>    f_vty_config(MSCVTY, "msc", "ncss guard-timeout 0");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* A5/1 only permitted on network side; attempt an invalid CIPHER MODE COMPLETE with A5/3 which MSC should reject. */</span><br><span> private function f_tc_cipher_complete_with_invalid_cipher(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span>       pars.net.expect_auth := true;</span><br><span>@@ -3571,6 +3655,10 @@</span><br><span>    * too long / short TLV values</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * SGsAP Testing</span><br><span style="color: hsl(120, 100%, 40%);">+ ***********************************************************************/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Check if a subscriber exists in the VLR */</span><br><span> private function f_ctrl_subscr_in_vlr(charstring imsi_or_msisdn) runs on BSC_ConnHdlr return boolean {</span><br><span> </span><br><span>@@ -3603,7 +3691,10 @@</span><br><span>       f_vty_transceive(MSCVTY, "subscriber imsi " & hex2str(g_pars.imsi) & " paging");</span><br><span> </span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi)); {</span><br><span style="color: hsl(120, 100%, 40%);">+    [g_pars.ran_is_geran] BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi)); {</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%);">+     [not g_pars.ran_is_geran] BSSAP.receive(tr_RANAP_Paging(cs_domain, imsi_hex2oct(g_pars.imsi), ?)) {</span><br><span>          setverdict(pass);</span><br><span>            }</span><br><span>    [] SGsAP.receive {</span><br><span>diff --git a/msc/MSC_Tests_Iu.ttcn b/msc/MSC_Tests_Iu.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..991c9b8</span><br><span>--- /dev/null</span><br><span>+++ b/msc/MSC_Tests_Iu.ttcn</span><br><span>@@ -0,0 +1,441 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module MSC_Tests_Iu {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSC_ConnectionHandler all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MSC_Tests all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_VTY_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from GSUP_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RAN_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from RANAP_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_CommonIE_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_SMS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from L3_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from L3_Common all;</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%);">+testcase TC_iu_lu_imsi_reject() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_lu_imsi_reject), 1003, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_imsi_timeout_gsup() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_lu_imsi_timeout_gsup), 1004, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_imsi_auth3g_tmsi() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "network", "authentication required");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler(refers(f_tc_lu_imsi_auth3g_tmsi), 1005, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_cmserv_imsi_unknown() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_cmserv_imsi_unknown), 1006, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_mo_call() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_lu_and_mo_call), 1007, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_auth_sai_timeout() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "network", "authentication required");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler(refers(f_tc_lu_auth_sai_timeout), 1008, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_auth_sai_err() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "network", "authentication required");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler(refers(f_tc_lu_auth_sai_err), 1009, ran_idx := 2, ran_is_geran := false);</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%);">+/* Test LU but RNC will send a Iu Release request in the middle */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_iu_lu_release_request(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+       var PDU_DTAP_MT dtap_mt;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* tell GSUP dispatcher to send this IMSI to us */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_create_gsup_expect(hex2str(g_pars.imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send BSSAP_Conn_Req with COMPL L3 INFO to MSC */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_cl3_or_initial_ue(l3_lu);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* send release request in the middle of the LU */</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.send(ts_RANAP_IuReleaseRequest(ts_RanapCause_om_intervention));</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSSAP.receive(tr_RANAP_IuReleaseCommand(?)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSAP.send(ts_RANAP_IuReleaseComplete);</span><br><span style="color: hsl(120, 100%, 40%);">+       alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* See https://osmocom.org/issues/2862 */</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(tr_RANAP_IuReleaseCommand(?)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      setverdict(fail, "Got a second Iu Release Command, only one expected");</span><br><span style="color: hsl(120, 100%, 40%);">+                     mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}</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%);">+testcase TC_iu_lu_release_request() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_iu_lu_release_request), 1010, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_disconnect() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_lu_disconnect), 1011, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_by_imei() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_lu_by_imei), 1012, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_imsi_detach_by_imsi() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_imsi_detach_by_imsi), 1014, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_imsi_detach_by_tmsi() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_imsi_detach_by_tmsi), 1015, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_imsi_detach_by_imei() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_imsi_detach_by_imei), 1016, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_emerg_call_imei_reject() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_emerg_call_imei_reject), 1017, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_emerg_call_imsi() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_emerg_call_imsi), 1018, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_establish_and_nothing() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_establish_and_nothing), 1027, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_mo_setup_and_nothing() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_mo_setup_and_nothing), 1028, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_mo_crcx_ran_timeout() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_mo_crcx_ran_timeout), 1029, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_mo_crcx_ran_reject() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_mo_crcx_ran_reject), 1030, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_mt_crcx_ran_reject() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_mt_crcx_ran_reject), 1031, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_mt_t310() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_mt_t310), 1032, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_gsup_cancel() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_gsup_cancel), 1033, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_mo_release_timeout() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_mo_release_timeout), 1040, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_mo_sms() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_lu_and_mo_sms), 1042, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_mt_sms() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    pars := f_init_pars(1043, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler_with_pars(refers(f_tc_lu_and_mt_sms), 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%);">+testcase TC_iu_lu_and_mt_sms_paging_and_nothing() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var BSC_ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    pars := f_init_pars(101843, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler_with_pars(refers(f_tc_lu_and_mt_sms_paging_and_nothing), 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%);">+testcase TC_iu_smpp_mo_sms() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config2(MSCVTY, { "smpp", "esme msc_tester"}, "default-route");</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn := f_start_handler(refers(f_tc_smpp_mo_sms), 1044, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config2(MSCVTY, { "smpp", "esme msc_tester"}, "no default-route");</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%);">+testcase TC_iu_gsup_mo_sms() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "msc", "sms-over-gsup");</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler(refers(f_tc_gsup_mo_sms), 1088, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</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%);">+testcase TC_iu_gsup_mo_smma() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "msc", "sms-over-gsup");</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler(refers(f_tc_gsup_mo_smma), 1089, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</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%);">+testcase TC_iu_gsup_mt_sms_ack() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var BSC_ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    pars := f_init_pars(1090, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "sms-over-gsup");</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mt_sms_ack), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</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%);">+testcase TC_iu_gsup_mt_sms_err() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var BSC_ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    pars := f_init_pars(1091, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "sms-over-gsup");</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mt_sms_err), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</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%);">+testcase TC_iu_gsup_mt_sms_rp_mr() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var BSC_ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    pars := f_init_pars(1092, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "sms-over-gsup");</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mt_sms_rp_mr), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</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%);">+testcase TC_iu_gsup_mo_mt_sms_rp_mr() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    pars := f_init_pars(1093, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "sms-over-gsup");</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler_with_pars(refers(f_tc_gsup_mo_mt_sms_rp_mr), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "no sms-over-gsup");</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%);">+testcase TC_iu_lu_and_mo_ussd_single_request() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_lu_and_mo_ussd_single_request), 1046, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_mt_ussd_notification() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_lu_and_mt_ussd_notification), 1047, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_mo_ussd_during_mt_call() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_lu_and_mo_ussd_during_mt_call), 1048, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_mo_cc_iu_release() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_mo_cc_bssmap_clear), 1043, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_mt_ussd_during_mt_call() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn := f_start_handler(refers(f_tc_lu_and_mt_ussd_during_mt_call), 1049, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_mo_ussd_mo_release() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn := f_start_handler(refers(f_tc_lu_and_mo_ussd_mo_release), 1050, ran_idx := 2, ran_is_geran := false);</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%);">+testcase TC_iu_lu_and_ss_session_timeout() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(3);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "msc", "ncss guard-timeout 3");</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_conn := f_start_handler(refers(f_tc_lu_and_ss_session_timeout), 1051, ran_idx := 2, ran_is_geran := false);</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "ncss guard-timeout 0");</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%);">+control {</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_iu_lu_imsi_reject() );</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_iu_lu_imsi_timeout_gsup() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_iu_lu_imsi_auth3g_tmsi() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_cmserv_imsi_unknown() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_lu_and_mo_call() );</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_iu_lu_auth_sai_timeout() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_lu_auth_sai_err() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_iu_lu_release_request() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_iu_lu_disconnect() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_lu_by_imei() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_iu_imsi_detach_by_imsi() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_imsi_detach_by_tmsi() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_imsi_detach_by_imei() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_emerg_call_imei_reject() );</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_iu_emerg_call_imsi() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_iu_establish_and_nothing() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_mo_setup_and_nothing() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_iu_mo_crcx_ran_timeout() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_mo_crcx_ran_reject() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_iu_mt_crcx_ran_reject() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_iu_gsup_cancel() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_mo_release_timeout() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_reset_two_1iu() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_iu_lu_and_mo_sms() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_lu_and_mt_sms() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_lu_and_mt_sms_paging_and_nothing() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_iu_smpp_mo_sms() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_gsup_mo_sms() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_gsup_mo_smma() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_iu_gsup_mt_sms_ack() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_iu_gsup_mt_sms_err() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_iu_gsup_mt_sms_rp_mr() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_iu_gsup_mo_mt_sms_rp_mr() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_iu_lu_and_mo_ussd_single_request() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_lu_and_mt_ussd_notification() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_iu_lu_and_mo_ussd_during_mt_call() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_lu_and_mt_ussd_during_mt_call() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_iu_lu_and_mo_ussd_mo_release() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_iu_lu_and_ss_session_timeout() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* TODO: Iu + SGsAP related tests, e.g. paging on IuCS */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Run this last: at the time of writing this test crashes the MSC */</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_mo_cc_iu_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></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13753">change 13753</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/13753"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I3b56e17487c9df839e67ed390a1ff89979683e8e </div>
<div style="display:none"> Gerrit-Change-Number: 13753 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>