<p>osmith <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14694">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  Vadim Yanitskiy: Looks good to me, but someone else must approve
  osmith: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">msc: add check IMEI tests<br><br>Extend BSC_ConnHdlr with new check IMEI related parameters. Add tests<br>for check IMEI and check IMEI early for multiple auth variations, as<br>well as variants where the HLR would respond with NOK or ERR.<br><br>Note that we can safely set "check-imei-rqd 0" in f_init(), because the<br>latest OsmoMSC version already suppors this VTY command.<br><br>Two tests do not always pass, sometimes the RAN connection breaks<br>before the test finishes (TC_lu_imsi_auth_tmsi_check_imei_err and<br>TC_lu_imsi_auth_tmsi_check_imei_nack). I have added them as expected<br>errors in the expected-results.xml.<br><br>Related: OS#2542<br>Change-Id: Ic34bb8dc8547cafb5a53df03884554dd4f72956d<br>---<br>M library/GSUP_Types.ttcn<br>M msc/BSC_ConnectionHandler.ttcn<br>M msc/MSC_Tests.ttcn<br>M msc/expected-results.xml<br>4 files changed, 420 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/GSUP_Types.ttcn b/library/GSUP_Types.ttcn</span><br><span>index e627538..74fbfc4 100644</span><br><span>--- a/library/GSUP_Types.ttcn</span><br><span>+++ b/library/GSUP_Types.ttcn</span><br><span>@@ -538,10 +538,30 @@</span><br><span>        ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST, {</span><br><span>                         valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_IMEI(imei)) });</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template GSUP_PDU tr_GSUP_CHECK_IMEI_REQ(</span><br><span style="color: hsl(120, 100%, 40%);">+     template hexstring imsi,</span><br><span style="color: hsl(120, 100%, 40%);">+      template hexstring imei</span><br><span style="color: hsl(120, 100%, 40%);">+) := tr_GSUP(</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST,</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             tr_GSUP_IE_IMSI(imsi),</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_GSUP_IE_IMEI(imei),</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_GSUP_IE_Message_Class(OSMO_GSUP_MESSAGE_CLASS_SUBSCRIBER_MANAGEMENT)</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%);">+template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_RES(hexstring imsi, GSUP_IMEIResult result) :=</span><br><span style="color: hsl(120, 100%, 40%);">+  ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT, {</span><br><span style="color: hsl(120, 100%, 40%);">+           valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_IMEI_Result(result)) });</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> template GSUP_PDU tr_GSUP_CHECK_IMEI_RES(template hexstring imsi, template GSUP_IMEIResult result) :=</span><br><span>       tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_RESULT, {</span><br><span>          tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_IMEI_Result(result) });</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) GSUP_PDU ts_GSUP_CHECK_IMEI_ERR(hexstring imsi, integer cause) :=</span><br><span style="color: hsl(120, 100%, 40%);">+     ts_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, {</span><br><span style="color: hsl(120, 100%, 40%);">+            valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> template GSUP_PDU tr_GSUP_CHECK_IMEI_ERR(template hexstring imsi, template integer cause) :=</span><br><span>       tr_GSUP(OSMO_GSUP_MSGT_CHECK_IMEI_ERROR, {</span><br><span>           tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });</span><br><span>diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn</span><br><span>index 1dd4d05..e951400 100644</span><br><span>--- a/msc/BSC_ConnectionHandler.ttcn</span><br><span>+++ b/msc/BSC_ConnectionHandler.ttcn</span><br><span>@@ -70,7 +70,11 @@</span><br><span>         OCT1    kc_support,</span><br><span>  boolean expect_tmsi,</span><br><span>         boolean expect_auth,</span><br><span style="color: hsl(0, 100%, 40%);">-    boolean expect_ciph</span><br><span style="color: hsl(120, 100%, 40%);">+   boolean expect_ciph,</span><br><span style="color: hsl(120, 100%, 40%);">+  boolean expect_imei,</span><br><span style="color: hsl(120, 100%, 40%);">+  boolean expect_imei_early,</span><br><span style="color: hsl(120, 100%, 40%);">+    GSUP_IMEIResult check_imei_result,</span><br><span style="color: hsl(120, 100%, 40%);">+    boolean check_imei_error</span><br><span> }</span><br><span> </span><br><span> type record BSC_ConnHdlrPars {</span><br><span>@@ -433,6 +437,82 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_mm_imei() runs on BSC_ConnHdlr</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      var PDU_DTAP_MT dtap_mt;</span><br><span style="color: hsl(120, 100%, 40%);">+      var GSUP_PDU gsup_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+        var MobileL3_CommonIE_Types.MobileIdentityLV mi;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (not g_pars.net.expect_imei) {</span><br><span style="color: hsl(120, 100%, 40%);">+             return</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%);">+   /* MSC <-> BSC: ID req/rsp for IMEI */</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_MM_ID_Req(CM_ID_TYPE_IMEI))) {</span><br><span style="color: hsl(120, 100%, 40%);">+              mi := valueof(ts_MI_IMEI_LV(g_pars.imei));</span><br><span style="color: hsl(120, 100%, 40%);">+            BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_MM_ID_Rsp(mi)));</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(tr_PDU_DTAP_MT(?)) -> value dtap_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected ID REQ for IMEI DTAP MT message, but got: ", dtap_mt);</span><br><span style="color: hsl(120, 100%, 40%);">+           mtc.stop;</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%);">+   /* MSC <-> HLR: Check IMEI req/res/err */</span><br><span style="color: hsl(120, 100%, 40%);">+       alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [g_pars.net.check_imei_error] GSUP.receive(tr_GSUP_CHECK_IMEI_REQ(g_pars.imsi, g_pars.imei)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                GSUP.send(ts_GSUP_CHECK_IMEI_ERR(g_pars.imsi, 96 /* Invalid Mandatory Information */));</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not g_pars.net.check_imei_error] GSUP.receive(tr_GSUP_CHECK_IMEI_REQ(g_pars.imsi, g_pars.imei)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            GSUP.send(ts_GSUP_CHECK_IMEI_RES(g_pars.imsi, g_pars.net.check_imei_result));</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] GSUP.receive(?) -> value gsup_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected CHECK IMEI REQ GSUP message (with IMEI:", g_pars.imei, " and IMSI: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                     g_pars.imsi, "), but got: ", gsup_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          mtc.stop;</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%);">+function f_mm_imei_early() runs on BSC_ConnHdlr</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    var PDU_DTAP_MT dtap_mt;</span><br><span style="color: hsl(120, 100%, 40%);">+      var GSUP_PDU gsup_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+        var MobileL3_CommonIE_Types.MobileIdentityLV mi;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (not g_pars.net.expect_imei_early) {</span><br><span style="color: hsl(120, 100%, 40%);">+               return</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%);">+   /* MSC <-> BSC: ID req/rsp for IMEISV */</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_MM_ID_Req(CM_ID_TYPE_IMEISV))) {</span><br><span style="color: hsl(120, 100%, 40%);">+            mi := valueof(ts_MI_IMEISV_LV(g_pars.imei));</span><br><span style="color: hsl(120, 100%, 40%);">+          BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_MM_ID_Rsp(mi)));</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(tr_PDU_DTAP_MT(?)) -> value dtap_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected ID REQ for IMEISV DTAP MT message, but got: ", dtap_mt);</span><br><span style="color: hsl(120, 100%, 40%);">+         mtc.stop;</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%);">+   /* MSC <-> HLR: Check IMEI req/res/err */</span><br><span style="color: hsl(120, 100%, 40%);">+       alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [g_pars.net.check_imei_error] GSUP.receive(tr_GSUP_CHECK_IMEI_REQ(g_pars.imsi, g_pars.imei)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                GSUP.send(ts_GSUP_CHECK_IMEI_ERR(g_pars.imsi, 96 /* Invalid Mandatory Information */));</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not g_pars.net.check_imei_error] GSUP.receive(tr_GSUP_CHECK_IMEI_REQ(g_pars.imsi, g_pars.imei)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            GSUP.send(ts_GSUP_CHECK_IMEI_RES(g_pars.imsi, g_pars.net.check_imei_result));</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] GSUP.receive(?) -> value gsup_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected CHECK IMEI REQ GSUP message (with IMEI:", g_pars.imei, " and IMSI: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                     g_pars.imsi, "), but got: ", gsup_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          mtc.stop;</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> function f_mm_common() runs on BSC_ConnHdlr</span><br><span> {</span><br><span>   f_mm_auth();</span><br><span>@@ -508,8 +588,10 @@</span><br><span>          f_ranap_initial_ue(l3_lu);</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ f_mm_imei_early();</span><br><span>   f_mm_common();</span><br><span>       f_msc_lu_hlr();</span><br><span style="color: hsl(120, 100%, 40%);">+       f_mm_imei();</span><br><span>         f_accept_reject_lu();</span><br><span>        /* FIXME: there could be pending SMS or other common procedures by the MSC, let's ignore them */</span><br><span>         f_expect_clear();</span><br><span>diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn</span><br><span>index 6f9eecd..c7c96eb 100644</span><br><span>--- a/msc/MSC_Tests.ttcn</span><br><span>+++ b/msc/MSC_Tests.ttcn</span><br><span>@@ -335,6 +335,7 @@</span><br><span>         /* set some defaults */</span><br><span>      f_vty_config(MSCVTY, "network", "authentication optional");</span><br><span>      f_vty_config(MSCVTY, "msc", "assign-tmsi");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd 0");</span><br><span>         f_vty_config(MSCVTY, "network", "encryption a5 0");</span><br><span>      if (mp_enable_osmux_test) {</span><br><span>          if (osmux) {</span><br><span>@@ -367,7 +368,11 @@</span><br><span>          kc_support := '0A'O,    /* A5/1 and A5/3 enabled */</span><br><span>          expect_tmsi := true,</span><br><span>                 expect_auth := false,</span><br><span style="color: hsl(0, 100%, 40%);">-           expect_ciph := false</span><br><span style="color: hsl(120, 100%, 40%);">+          expect_ciph := false,</span><br><span style="color: hsl(120, 100%, 40%);">+         expect_imei := false,</span><br><span style="color: hsl(120, 100%, 40%);">+         expect_imei_early := false,</span><br><span style="color: hsl(120, 100%, 40%);">+           check_imei_result := OSMO_GSUP_IMEI_RESULT_ACK,</span><br><span style="color: hsl(120, 100%, 40%);">+               check_imei_error := false</span><br><span>    };</span><br><span>   var BSC_ConnHdlrPars pars := {</span><br><span>               sccp_addr_own := g_bssap[ran_idx].sccp_addr_own,</span><br><span>@@ -5531,6 +5536,287 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_lu_imsi_auth_tmsi_check_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       pars.net.expect_auth := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_imei := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_auth_tmsi_check_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();</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%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd 1");</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_auth_tmsi_check_imei), 5);</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%);">+private function f_tc_lu_imsi_auth3g_tmsi_check_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_auth := true;</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_imei := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_auth3g_tmsi_check_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();</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%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd 1");</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_check_imei), 5);</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%);">+private function f_tc_lu_imsi_noauth_tmsi_check_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_imei := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_noauth_tmsi_check_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();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_config(MSCVTY, "msc", "check-imei-rqd 1");</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_noauth_tmsi_check_imei), 5);</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%);">+private function f_tc_lu_imsi_noauth_notmsi_check_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       pars.net.expect_tmsi := false;</span><br><span style="color: hsl(120, 100%, 40%);">+        pars.net.expect_imei := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_noauth_notmsi_check_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();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_config(MSCVTY, "msc", "no assign-tmsi");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "msc", "check-imei-rqd 1");</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_noauth_notmsi_check_imei), 5);</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%);">+private function f_tc_lu_imsi_auth_tmsi_check_imei_nack(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      var PDU_ML3_MS_NW l3_lu;</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%);">+    pars.net.expect_auth := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_imei := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.check_imei_result := OSMO_GSUP_IMEI_RESULT_NACK;</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%);">+       /* Cannot use f_perform_lu() as we expect a reject */</span><br><span style="color: hsl(120, 100%, 40%);">+ l3_lu := f_build_lu_imsi(g_pars.imsi)</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%);">+   f_bssap_compl_l3(l3_lu);</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 style="color: hsl(120, 100%, 40%);">+ f_mm_common();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_msc_lu_hlr();</span><br><span style="color: hsl(120, 100%, 40%);">+       f_mm_imei();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Expect reject. As of writing, sometimes it passes, sometimes we get a broken pipe (race condition)! */</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)) {</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%);">+     [] BSSAP.receive(tr_PDU_DTAP_MT(?)) -> value dtap_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected LU reject BSSAP message, got: ", dtap_mt);</span><br><span style="color: hsl(120, 100%, 40%);">+               mtc.stop;</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_lu_imsi_auth_tmsi_check_imei_nack() 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%);">+     f_vty_config(MSCVTY, "network", "authentication required");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd 1");</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_auth_tmsi_check_imei_nack), 5);</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%);">+private function f_tc_lu_imsi_auth_tmsi_check_imei_err(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       var PDU_ML3_MS_NW l3_lu;</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%);">+    pars.net.expect_auth := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_imei := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.check_imei_error := true;</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%);">+       /* Cannot use f_perform_lu() as we expect a reject */</span><br><span style="color: hsl(120, 100%, 40%);">+ l3_lu := f_build_lu_imsi(g_pars.imsi)</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%);">+   f_bssap_compl_l3(l3_lu);</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 style="color: hsl(120, 100%, 40%);">+ f_mm_common();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_msc_lu_hlr();</span><br><span style="color: hsl(120, 100%, 40%);">+       f_mm_imei();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Expect reject. As of writing, sometimes it passes, sometimes we get a broken pipe (race condition)! */</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)) {</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%);">+     [] BSSAP.receive(tr_PDU_DTAP_MT(?)) -> value dtap_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected LU reject BSSAP message, got: ", dtap_mt);</span><br><span style="color: hsl(120, 100%, 40%);">+               mtc.stop;</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_lu_imsi_auth_tmsi_check_imei_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();</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%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd 1");</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_auth_tmsi_check_imei_err), 5);</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%);">+private function f_tc_lu_imsi_auth_tmsi_check_imei_early(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+     pars.net.expect_auth := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_imei_early := true;</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_auth_tmsi_check_imei_early() 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%);">+     f_vty_config(MSCVTY, "network", "authentication required");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd early");</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_auth_tmsi_check_imei_early), 5);</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%);">+private function f_tc_lu_imsi_auth3g_tmsi_check_imei_early(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+   pars.net.expect_auth := true;</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_imei_early := true;</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_auth3g_tmsi_check_imei_early() 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%);">+     f_vty_config(MSCVTY, "network", "authentication required");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd early");</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_check_imei_early), 5);</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%);">+private function f_tc_lu_imsi_noauth_tmsi_check_imei_early(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+   pars.net.expect_imei_early := true;</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_noauth_tmsi_check_imei_early() 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%);">+     f_vty_config(MSCVTY, "msc", "check-imei-rqd early");</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_noauth_tmsi_check_imei_early), 5);</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%);">+private function f_tc_lu_imsi_noauth_notmsi_check_imei_early(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_tmsi := false;</span><br><span style="color: hsl(120, 100%, 40%);">+        pars.net.expect_imei_early := true;</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_imsi_noauth_notmsi_check_imei_early() 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%);">+     f_vty_config(MSCVTY, "msc", "no assign-tmsi");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_config(MSCVTY, "msc", "check-imei-rqd early");</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_noauth_notmsi_check_imei_early), 5);</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%);">+private function f_tc_lu_imsi_auth_tmsi_check_imei_early_nack(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        var PDU_ML3_MS_NW l3_lu;</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%);">+    pars.net.expect_auth := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_imei_early := true;</span><br><span style="color: hsl(120, 100%, 40%);">+   pars.net.check_imei_result := OSMO_GSUP_IMEI_RESULT_NACK;</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%);">+       /* Cannot use f_perform_lu() as we expect a reject */</span><br><span style="color: hsl(120, 100%, 40%);">+ l3_lu := f_build_lu_imsi(g_pars.imsi)</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%);">+   f_bssap_compl_l3(l3_lu);</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 style="color: hsl(120, 100%, 40%);">+ f_mm_imei_early();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Expect reject */</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)) {</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%);">+     [] BSSAP.receive(tr_PDU_DTAP_MT(?)) -> value dtap_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected LU reject BSSAP message, got: ", dtap_mt);</span><br><span style="color: hsl(120, 100%, 40%);">+               mtc.stop;</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_lu_imsi_auth_tmsi_check_imei_early_nack() 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%);">+     f_vty_config(MSCVTY, "network", "authentication required");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd early");</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_auth_tmsi_check_imei_early_nack), 5);</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%);">+private function f_tc_lu_imsi_auth_tmsi_check_imei_early_err(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_ML3_MS_NW l3_lu;</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%);">+    pars.net.expect_auth := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_imei_early := true;</span><br><span style="color: hsl(120, 100%, 40%);">+   pars.net.check_imei_error := true;</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%);">+       /* Cannot use f_perform_lu() as we expect a reject */</span><br><span style="color: hsl(120, 100%, 40%);">+ l3_lu := f_build_lu_imsi(g_pars.imsi)</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%);">+   f_bssap_compl_l3(l3_lu);</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 style="color: hsl(120, 100%, 40%);">+ f_mm_imei_early();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Expect reject */</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)) {</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%);">+     [] BSSAP.receive(tr_PDU_DTAP_MT(?)) -> value dtap_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Expected LU reject BSSAP message, got: ", dtap_mt);</span><br><span style="color: hsl(120, 100%, 40%);">+               mtc.stop;</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_lu_imsi_auth_tmsi_check_imei_early_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();</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%);">+       f_vty_config(MSCVTY, "msc", "check-imei-rqd early");</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_auth_tmsi_check_imei_early_err), 5);</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> control {</span><br><span>    execute( TC_cr_before_reset() );</span><br><span>@@ -5642,6 +5928,19 @@</span><br><span> </span><br><span>        execute( TC_ho_inter_msc_out() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_lu_imsi_auth_tmsi_check_imei() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_lu_imsi_auth3g_tmsi_check_imei() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_lu_imsi_noauth_tmsi_check_imei() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_lu_imsi_noauth_notmsi_check_imei() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_lu_imsi_auth_tmsi_check_imei_nack() );</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_lu_imsi_auth_tmsi_check_imei_err() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_lu_imsi_auth_tmsi_check_imei_early() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_lu_imsi_auth3g_tmsi_check_imei_early() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_lu_imsi_noauth_tmsi_check_imei_early() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_lu_imsi_noauth_notmsi_check_imei_early() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_lu_imsi_auth_tmsi_check_imei_early_nack() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_lu_imsi_auth_tmsi_check_imei_early_err() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* Run this last: at the time of writing this test crashes the MSC */</span><br><span>        execute( TC_lu_imsi_auth_tmsi_encr_3_1_log_msc_debug() );</span><br><span>    execute( TC_mo_cc_bssmap_clear() );</span><br><span>diff --git a/msc/expected-results.xml b/msc/expected-results.xml</span><br><span>index a60e2ec..ca8edd2 100644</span><br><span>--- a/msc/expected-results.xml</span><br><span>+++ b/msc/expected-results.xml</span><br><span>@@ -1,5 +1,5 @@</span><br><span> <?xml version="1.0"?></span><br><span style="color: hsl(0, 100%, 40%);">-<testsuite name='Titan' tests='84' failures='2' errors='1' skipped='0' inconc='0' time='MASKED'></span><br><span style="color: hsl(120, 100%, 40%);">+<testsuite name='Titan' tests='96' failures='2' errors='3' skipped='0' inconc='0' time='MASKED'></span><br><span>   <testcase classname='MSC_Tests' name='TC_cr_before_reset' time='MASKED'/></span><br><span>   <testcase classname='MSC_Tests' name='TC_lu_imsi_noauth_tmsi' time='MASKED'/></span><br><span>   <testcase classname='MSC_Tests' name='TC_lu_imsi_noauth_notmsi' time='MASKED'/></span><br><span>@@ -97,4 +97,20 @@</span><br><span>   <testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_encr_3_1_log_msc_debug' time='MASKED'/></span><br><span>   <testcase classname='MSC_Tests' name='TC_gsup_mt_multi_part_sms' time='MASKED'/></span><br><span>   <testcase classname='MSC_Tests' name='TC_mo_cc_bssmap_clear' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_check_imei' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth3g_tmsi_check_imei' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_noauth_tmsi_check_imei' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_noauth_notmsi_check_imei' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_check_imei_nack' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+    <error type='DTE'></error></span><br><span style="color: hsl(120, 100%, 40%);">+  </testcase></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_check_imei_err' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+    <error type='DTE'></error></span><br><span style="color: hsl(120, 100%, 40%);">+  </testcase></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_check_imei_early' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth3g_tmsi_check_imei_early' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_noauth_tmsi_check_imei_early' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_noauth_notmsi_check_imei_early' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_check_imei_early_nack' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_check_imei_early_err' time='MASKED'/></span><br><span> </testsuite></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14694">change 14694</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/+/14694"/><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: Ic34bb8dc8547cafb5a53df03884554dd4f72956d </div>
<div style="display:none"> Gerrit-Change-Number: 14694 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>