<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14694">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">msc: add check imei tests<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;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/94/14694/1</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..a5a110d 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('010'B /* 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('011'B /* 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 4b00e34..7df2e76 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>@@ -5641,6 +5927,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_gsup_mt_multi_part_sms() );</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: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>