<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12478">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">VLR: send CHECK-IMEI to EIR/HLR<br><br>When check-imei-req is enabled in the VTY config, do not accept IMEIs<br>sent by the ME directly anymore. Send the IMEI to the EIR/HLR and wait<br>for its ACK or NACK.<br><br>OsmoHLR also accepts all IMEIs at this point, but this allows to<br>optionally store the IMEI in the HLR DB.<br><br>Depends: Ib240474b0c3c603ba840cf26babb38a44dfc9364 (osmo-hlr)<br>Related: OS#3733<br>Change-Id: Ife868ed71c36cdd02638072abebf61fc949080a7<br>---<br>M include/osmocom/msc/vlr.h<br>M src/libvlr/vlr.c<br>M src/libvlr/vlr_core.h<br>M src/libvlr/vlr_lu_fsm.c<br>M tests/msc_vlr/msc_vlr_test_gsm_authen.c<br>M tests/msc_vlr/msc_vlr_test_gsm_authen.err<br>M tests/msc_vlr/msc_vlr_test_gsm_ciph.c<br>M tests/msc_vlr/msc_vlr_test_gsm_ciph.err<br>M tests/msc_vlr/msc_vlr_test_no_authen.c<br>M tests/msc_vlr/msc_vlr_test_no_authen.err<br>10 files changed, 245 insertions(+), 53 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/78/12478/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/vlr.h b/include/osmocom/msc/vlr.h</span><br><span>index 029ef31..bf2f9fc 100644</span><br><span>--- a/include/osmocom/msc/vlr.h</span><br><span>+++ b/include/osmocom/msc/vlr.h</span><br><span>@@ -65,6 +65,8 @@</span><br><span>    VLR_ULA_E_ID_IMSI,      /* IMSI recieved from MS */</span><br><span>  VLR_ULA_E_ID_IMEI,      /* IMEI received from MS */</span><br><span>  VLR_ULA_E_ID_IMEISV,    /* IMEISV received from MS */</span><br><span style="color: hsl(120, 100%, 40%);">+ VLR_ULA_E_HLR_IMEI_ACK, /* Check_IMEI_VLR result from HLR */</span><br><span style="color: hsl(120, 100%, 40%);">+  VLR_ULA_E_HLR_IMEI_NACK,/* Check_IMEI_VLR result from HLR */</span><br><span>         VLR_ULA_E_HLR_LU_RES,   /* HLR UpdateLocation result */</span><br><span>      VLR_ULA_E_UPD_HLR_COMPL,/* UpdatE_HLR_VLR result */</span><br><span>  VLR_ULA_E_LU_COMPL_SUCCESS,/* Location_Update_Completion_VLR result */</span><br><span>diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c</span><br><span>index 7de78bf..ac340d1 100644</span><br><span>--- a/src/libvlr/vlr.c</span><br><span>+++ b/src/libvlr/vlr.c</span><br><span>@@ -642,6 +642,32 @@</span><br><span>   return vlr_subscr_tx_gsup_message(vsub, &gsup_msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Initiate Check_IMEI_VLR Procedure (23.018 Chapter 7.1.2.9).</span><br><span style="color: hsl(120, 100%, 40%);">+ * Send the IMEI and wait for ACK. Usually the EIR receives and answers this and checks the device</span><br><span style="color: hsl(120, 100%, 40%);">+ * against a white/grey/blacklist. As of writing, there is no EIR in the Osmocom stack, but HLR</span><br><span style="color: hsl(120, 100%, 40%);">+ * handles the request instead and always replies with ACK. It is theoretically able to save the</span><br><span style="color: hsl(120, 100%, 40%);">+ * IMEI to the HLR DB as side effect (OS#2541). */</span><br><span style="color: hsl(120, 100%, 40%);">+int vlr_subscr_tx_req_check_imei(const struct vlr_subscr *vsub)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       struct osmo_gsup_message gsup_msg = {0};</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t imei_enc[GSM23003_IMEI_NUM_DIGITS+2] = {0};</span><br><span style="color: hsl(120, 100%, 40%);">+   int len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Encode IMEI */</span><br><span style="color: hsl(120, 100%, 40%);">+     len = gsm48_encode_bcd_number(imei_enc, sizeof(imei_enc), 0, vsub->imei);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (len < 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGVSUBP(LOGL_ERROR, vsub, "Error: cannot encode IMEI '%s'\n", vsub->imei);</span><br><span style="color: hsl(120, 100%, 40%);">+              return -ENOSPC;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_msg.imei_enc = imei_enc;</span><br><span style="color: hsl(120, 100%, 40%);">+ gsup_msg.imei_enc_len = len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Send CHECK_IMEI_REQUEST */</span><br><span style="color: hsl(120, 100%, 40%);">+ gsup_msg.message_type = OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST;</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_STRLCPY_ARRAY(gsup_msg.imsi, vsub->imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+     return vlr_tx_gsup_message(vsub->vlr, &gsup_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Tell HLR that authentication failure occurred */</span><br><span> int vlr_subscr_tx_auth_fail_rep(const struct vlr_subscr *vsub)</span><br><span> {</span><br><span>@@ -976,6 +1002,39 @@</span><br><span>  return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Handle Check_IMEI_VLR error from HLR */</span><br><span style="color: hsl(120, 100%, 40%);">+static int vlr_subscr_handle_check_imei_err(struct vlr_subscr *vsub,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     const struct osmo_gsup_message *gsup)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!vsub->lu_fsm) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGVSUBP(LOGL_ERROR, vsub, "Rx GSUP Check_IMEI_VLR error without LU in progress\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                return -ENODEV;</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%);">+   LOGVSUBP(LOGL_DEBUG, vsub, "Check_IMEI_VLR failed; gmm_cause: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 get_value_string(gsm48_gmm_cause_names, gsup->cause));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_fsm_inst_dispatch(vsub->lu_fsm, VLR_ULA_E_LU_COMPL_FAILURE, (void *)&gsup->cause);</span><br><span style="color: hsl(120, 100%, 40%);">+     return 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%);">+/* Handle Check_IMEI_VLR result from HLR */</span><br><span style="color: hsl(120, 100%, 40%);">+static int vlr_subscr_handle_check_imei_res(struct vlr_subscr *vsub,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         const struct osmo_gsup_message *gsup)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!vsub->lu_fsm) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGVSUBP(LOGL_ERROR, vsub, "Rx GSUP Check_IMEI_VLR result without LU in progress\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               return -ENODEV;</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%);">+   if (gsup->imei_result == OSMO_GSUP_IMEI_RESULT_ACK)</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_fsm_inst_dispatch(vsub->lu_fsm, VLR_ULA_E_HLR_IMEI_ACK, (void *)&gsup->cause);</span><br><span style="color: hsl(120, 100%, 40%);">+ else</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_fsm_inst_dispatch(vsub->lu_fsm, VLR_ULA_E_HLR_IMEI_NACK, (void *)&gsup->cause);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Incoming handler for GSUP from HLR.</span><br><span>  * Keep this function non-static for direct invocation by unit tests. */</span><br><span> int vlr_gsupc_read_cb(struct osmo_gsup_client *gsupc, struct msgb *msg)</span><br><span>@@ -1045,6 +1104,12 @@</span><br><span>                     gsup.message_type);</span><br><span>          rc = -GMM_CAUSE_MSGT_NOTEXIST_NOTIMPL;</span><br><span>               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case OSMO_GSUP_MSGT_CHECK_IMEI_ERROR:</span><br><span style="color: hsl(120, 100%, 40%);">+         rc = vlr_subscr_handle_check_imei_err(vsub, &gsup);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case OSMO_GSUP_MSGT_CHECK_IMEI_RESULT:</span><br><span style="color: hsl(120, 100%, 40%);">+                rc = vlr_subscr_handle_check_imei_res(vsub, &gsup);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span>       default:</span><br><span>             /* Forward message towards MSC */</span><br><span>            rc = vlr->ops.forward_gsup_msg(vsub, &gsup);</span><br><span>diff --git a/src/libvlr/vlr_core.h b/src/libvlr/vlr_core.h</span><br><span>index d336b1b..b28a40a 100644</span><br><span>--- a/src/libvlr/vlr_core.h</span><br><span>+++ b/src/libvlr/vlr_core.h</span><br><span>@@ -8,6 +8,7 @@</span><br><span> int vlr_subscr_req_lu(struct vlr_subscr *vsub) __attribute__((warn_unused_result));</span><br><span> int vlr_subscr_req_sai(struct vlr_subscr *vsub, const uint8_t *auts,</span><br><span>                       const uint8_t *auts_rand) __attribute__((warn_unused_result));</span><br><span style="color: hsl(120, 100%, 40%);">+int vlr_subscr_tx_req_check_imei(const struct vlr_subscr *vsub);</span><br><span> struct vlr_subscr *vlr_subscr_alloc(struct vlr_instance *vlr);</span><br><span> void vlr_subscr_update_tuples(struct vlr_subscr *vsub,</span><br><span>                        const struct osmo_gsup_message *gsup);</span><br><span>diff --git a/src/libvlr/vlr_lu_fsm.c b/src/libvlr/vlr_lu_fsm.c</span><br><span>index b00f8ce..6791f34 100644</span><br><span>--- a/src/libvlr/vlr_lu_fsm.c</span><br><span>+++ b/src/libvlr/vlr_lu_fsm.c</span><br><span>@@ -652,6 +652,8 @@</span><br><span>  OSMO_VALUE_STRING(VLR_ULA_E_ID_IMSI),</span><br><span>        OSMO_VALUE_STRING(VLR_ULA_E_ID_IMEI),</span><br><span>        OSMO_VALUE_STRING(VLR_ULA_E_ID_IMEISV),</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_VALUE_STRING(VLR_ULA_E_HLR_IMEI_ACK),</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_VALUE_STRING(VLR_ULA_E_HLR_IMEI_NACK),</span><br><span>  OSMO_VALUE_STRING(VLR_ULA_E_HLR_LU_RES),</span><br><span>     OSMO_VALUE_STRING(VLR_ULA_E_UPD_HLR_COMPL),</span><br><span>  OSMO_VALUE_STRING(VLR_ULA_E_LU_COMPL_SUCCESS),</span><br><span>@@ -1228,9 +1230,17 @@</span><br><span>                                     LU_COMPL_VLR_E_NEW_TMSI_ACK, NULL);</span><br><span>           break;</span><br><span>       case VLR_ULA_E_ID_IMEI:</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Got the IMEI from ME, now send it to HLR */</span><br><span style="color: hsl(120, 100%, 40%);">+                vlr_subscr_tx_req_check_imei(lfp->vsub);</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case VLR_ULA_E_HLR_IMEI_ACK:</span><br><span>                 osmo_fsm_inst_dispatch(lfp->lu_compl_vlr_fsm,</span><br><span>                                    LU_COMPL_VLR_E_IMEI_CHECK_ACK, NULL);</span><br><span>                 break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case VLR_ULA_E_HLR_IMEI_NACK:</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_fsm_inst_dispatch(lfp->lu_compl_vlr_fsm,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     LU_COMPL_VLR_E_IMEI_CHECK_NACK, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span>       case VLR_ULA_E_LU_COMPL_SUCCESS:</span><br><span>             lu_fsm_discard_lu_compl_fsm(fi);</span><br><span> </span><br><span>@@ -1361,7 +1371,9 @@</span><br><span>                                  S(VLR_ULA_E_LU_COMPL_FAILURE) |</span><br><span>                              S(VLR_ULA_E_NEW_TMSI_ACK) |</span><br><span>                                  S(VLR_ULA_E_ID_IMEI) |</span><br><span style="color: hsl(0, 100%, 40%);">-                          S(VLR_ULA_E_ID_IMEISV),</span><br><span style="color: hsl(120, 100%, 40%);">+                               S(VLR_ULA_E_ID_IMEISV) |</span><br><span style="color: hsl(120, 100%, 40%);">+                              S(VLR_ULA_E_HLR_IMEI_ACK) |</span><br><span style="color: hsl(120, 100%, 40%);">+                           S(VLR_ULA_E_HLR_IMEI_NACK),</span><br><span>                 .out_state_mask = S(VLR_ULA_S_DONE),</span><br><span>                 .name = OSMO_STRINGIFY(VLR_ULA_S_WAIT_LU_COMPL),</span><br><span>             .action = lu_fsm_wait_lu_compl,</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_gsm_authen.c b/tests/msc_vlr/msc_vlr_test_gsm_authen.c</span><br><span>index 46dd9a1..4174fe2 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_gsm_authen.c</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_gsm_authen.c</span><br><span>@@ -573,9 +573,13 @@</span><br><span>      EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(0, 100%, 40%);">-  expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    ms_sends_msg("0559084a32244332244302");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ gsup_rx("32010809710000004026f0510100", NULL);</span><br><span>     VERBOSE_ASSERT(bssap_clear_sent, == true, "%d");</span><br><span> </span><br><span>       btw("LU was successful, and the conn has already been closed");</span><br><span>@@ -676,9 +680,13 @@</span><br><span>     EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(120, 100%, 40%);">+        btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    ms_sends_msg("0559084a32244332244302");</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        gsup_rx("32010809710000004026f0510100", NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   btw("a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl");</span><br><span>       EXPECT_CONN_COUNT(1);</span><br><span>        VERBOSE_ASSERT(lu_result_sent, == RES_ACCEPT, "%d");</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_gsm_authen.err b/tests/msc_vlr/msc_vlr_test_gsm_authen.err</span><br><span>index e834e91..f2462f1 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_gsm_authen.err</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_gsm_authen.err</span><br><span>@@ -1234,16 +1234,26 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> - sending LU Accept for MSISDN:46071</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: state_chg to LU_COMPL_VLR_S_DONE</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_LU_COMPL_SUCCESS</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_DONE}: Terminating (cause = OSMO_FSM_TERM_PARENT)</span><br><span>@@ -1255,11 +1265,12 @@</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_ACCEPTED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: Received Event RAN_CONN_E_UNUSED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: state_chg to RAN_CONN_S_RELEASING</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use + release == 2 (0x102: dtap,release)</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use + release == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 4</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 3</span><br><span> - BSSAP Clear --GERAN-A--> MS</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span>   bssap_clear_sent == 1</span><br><span> - LU was successful, and the conn has already been closed</span><br><span>   lu_result_sent == 1</span><br><span>@@ -1463,20 +1474,29 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: lu_compl_vlr_new_tmsi()</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: state_chg to LU_COMPL_VLR_S_WAIT_TMSI_CNF</span><br><span> - sending LU Accept for MSISDN:46071, with TMSI 0x03020100</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 1</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span> - a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl</span><br><span>   llist_count(&net->ran_conns) == 1</span><br><span>   lu_result_sent == 1</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_gsm_ciph.c b/tests/msc_vlr/msc_vlr_test_gsm_ciph.c</span><br><span>index a641ec2..b7543da 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_gsm_ciph.c</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_gsm_ciph.c</span><br><span>@@ -553,9 +553,13 @@</span><br><span>      EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(0, 100%, 40%);">-  expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    ms_sends_msg("0559084a32244332244302");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ gsup_rx("32010809710000004026f0510100", NULL);</span><br><span>     VERBOSE_ASSERT(bssap_clear_sent, == true, "%d");</span><br><span> </span><br><span>       btw("LU was successful, and the conn has already been closed");</span><br><span>@@ -758,9 +762,13 @@</span><br><span>     EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(120, 100%, 40%);">+        btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    ms_sends_msg("0559084a32244332244302");</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        gsup_rx("32010809710000004026f0510100", NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   btw("a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl");</span><br><span>       EXPECT_CONN_COUNT(1);</span><br><span>        VERBOSE_ASSERT(lu_result_sent, == RES_ACCEPT, "%d");</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_gsm_ciph.err b/tests/msc_vlr/msc_vlr_test_gsm_ciph.err</span><br><span>index 69ad9a2..70663bc 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_gsm_ciph.err</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_gsm_ciph.err</span><br><span>@@ -1178,16 +1178,26 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> - sending LU Accept for MSISDN:46071</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: state_chg to LU_COMPL_VLR_S_DONE</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_LU_COMPL_SUCCESS</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_DONE}: Terminating (cause = OSMO_FSM_TERM_PARENT)</span><br><span>@@ -1199,11 +1209,12 @@</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_ACCEPTED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: Received Event RAN_CONN_E_UNUSED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: state_chg to RAN_CONN_S_RELEASING</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use + release == 2 (0x102: dtap,release)</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use + release == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 4</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 3</span><br><span> - BSSAP Clear --GERAN-A--> MS</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span>   bssap_clear_sent == 1</span><br><span> - LU was successful, and the conn has already been closed</span><br><span>   lu_result_sent == 1</span><br><span>@@ -1633,20 +1644,29 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: lu_compl_vlr_new_tmsi()</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: state_chg to LU_COMPL_VLR_S_WAIT_TMSI_CNF</span><br><span> - sending LU Accept for MSISDN:46071, with TMSI 0x03020100</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 1</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span> - a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl</span><br><span>   llist_count(&net->ran_conns) == 1</span><br><span>   lu_result_sent == 1</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_no_authen.c b/tests/msc_vlr/msc_vlr_test_no_authen.c</span><br><span>index 3162149..d52d3d6 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_no_authen.c</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_no_authen.c</span><br><span>@@ -428,11 +428,15 @@</span><br><span>         EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(0, 100%, 40%);">-  expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    /* 3GPP TS 23.003: 6.2.1 Composition of IMEI: the IMEI ends with a</span><br><span>    * spare digit that shall be sent as zero by the MS. */</span><br><span>      ms_sends_msg("0559084a32244332244302");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ gsup_rx("32010809710000004026f0510100", NULL);</span><br><span>     VERBOSE_ASSERT(bssap_clear_sent, == true, "%d");</span><br><span> </span><br><span>       btw("LU was successful, and the conn has already been closed");</span><br><span>@@ -499,9 +503,13 @@</span><br><span>     EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(120, 100%, 40%);">+        btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    ms_sends_msg("0559084a32244332244302");</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        gsup_rx("32010809710000004026f0510100", NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   btw("a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl");</span><br><span>       EXPECT_CONN_COUNT(1);</span><br><span>        VERBOSE_ASSERT(lu_result_sent, == RES_ACCEPT, "%d");</span><br><span>@@ -652,9 +660,13 @@</span><br><span>        EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(0, 100%, 40%);">-  expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    ms_sends_msg("0559084a32244332244302");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        expect_bssap_clear();</span><br><span style="color: hsl(120, 100%, 40%);">+ gsup_rx("32010809710000004026f0510100", NULL);</span><br><span>     VERBOSE_ASSERT(bssap_clear_sent, == true, "%d");</span><br><span> </span><br><span>       btw("LU was successful, and the conn has already been closed");</span><br><span>@@ -874,9 +886,13 @@</span><br><span>     EXPECT_ACCEPTED(false);</span><br><span>      thwart_rx_non_initial_requests();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   btw("MS replies with an Identity Response");</span><br><span style="color: hsl(120, 100%, 40%);">+        btw("MS replies with an Identity Response, VLR sends the IMEI to HLR");</span><br><span style="color: hsl(120, 100%, 40%);">+     gsup_expect_tx("30010809710000004026f050090824433224433224f0");</span><br><span>    ms_sends_msg("0559084a32244332244302");</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ btw("HLR accepts the IMEI");</span><br><span style="color: hsl(120, 100%, 40%);">+        gsup_rx("32010809710000004026f0510100", NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   btw("a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl");</span><br><span>       EXPECT_CONN_COUNT(1);</span><br><span>        VERBOSE_ASSERT(lu_result_sent, == RES_ACCEPT, "%d");</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_no_authen.err b/tests/msc_vlr/msc_vlr_test_no_authen.err</span><br><span>index f865d87..7d00eff 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_no_authen.err</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_no_authen.err</span><br><span>@@ -913,16 +913,26 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> - sending LU Accept for MSISDN:46071</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: state_chg to LU_COMPL_VLR_S_DONE</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_LU_COMPL_SUCCESS</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_DONE}: Terminating (cause = OSMO_FSM_TERM_PARENT)</span><br><span>@@ -934,11 +944,12 @@</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_ACCEPTED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: Received Event RAN_CONN_E_UNUSED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: state_chg to RAN_CONN_S_RELEASING</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use + release == 2 (0x102: dtap,release)</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use + release == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 4</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 3</span><br><span> - BSSAP Clear --GERAN-A--> MS</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span>   bssap_clear_sent == 1</span><br><span> - LU was successful, and the conn has already been closed</span><br><span>   lu_result_sent == 1</span><br><span>@@ -1094,20 +1105,29 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: lu_compl_vlr_new_tmsi()</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: state_chg to LU_COMPL_VLR_S_WAIT_TMSI_CNF</span><br><span> - sending LU Accept for MSISDN:46071, with TMSI 0x03020100</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 1</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span> - a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl</span><br><span>   llist_count(&net->ran_conns) == 1</span><br><span>   lu_result_sent == 1</span><br><span>@@ -1486,16 +1506,26 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> - sending LU Accept for MSISDN:46071</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI}: state_chg to LU_COMPL_VLR_S_DONE</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_LU_COMPL_SUCCESS</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_DONE}: Terminating (cause = OSMO_FSM_TERM_PARENT)</span><br><span>@@ -1507,11 +1537,12 @@</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_ACCEPTED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: Received Event RAN_CONN_E_UNUSED</span><br><span> DMM RAN_conn(LU:901700000004620){RAN_CONN_S_ACCEPTED}: state_chg to RAN_CONN_S_RELEASING</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use + release == 2 (0x102: dtap,release)</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage increases to: 3</span><br><span style="color: hsl(0, 100%, 40%);">-DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use + release == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 4</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 3</span><br><span> - BSSAP Clear --GERAN-A--> MS</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 1 (0x100: release)</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span>   bssap_clear_sent == 1</span><br><span> - LU was successful, and the conn has already been closed</span><br><span>   lu_result_sent == 1</span><br><span>@@ -2047,20 +2078,29 @@</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: GSM48_MT_RR_SYSINFO_1</span><br><span> DRLL Dispatching 04.08 message SMS:0x01 (0x9:0x1)</span><br><span> DRLL subscr MSISDN:46071: Message not permitted for initial conn: SMS:0x01</span><br><span style="color: hsl(0, 100%, 40%);">-- MS replies with an Identity Response</span><br><span style="color: hsl(120, 100%, 40%);">+- MS replies with an Identity Response, VLR sends the IMEI to HLR</span><br><span>   MSC <--GERAN-A-- MS: GSM48_MT_MM_ID_RESP</span><br><span> DREF MSISDN:46071: MSC conn use + dtap == 1 (0x2: dtap)</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_MM_ID_RESP (0x5:0x19)</span><br><span> DMM IDENTITY RESPONSE: MI(IMEI)=423423423423420</span><br><span> DVLR set IMEI on subscriber; IMSI=901700000004620 IMEI=423423423423420</span><br><span> DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_ID_IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP tx: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+GSUP --> HLR: OSMO_GSUP_MSGT_CHECK_IMEI_REQUEST: 30010809710000004026f050090824433224433224f0</span><br><span style="color: hsl(120, 100%, 40%);">+DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+- HLR accepts the IMEI</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR GSUP rx 14: 32010809710000004026f0510100</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage increases to: 2</span><br><span style="color: hsl(120, 100%, 40%);">+DVLR vlr_lu_fsm(LU:901700000004620){VLR_ULA_S_WAIT_LU_COMPL}: Received Event VLR_ULA_E_HLR_IMEI_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: Received Event LU_COMPL_VLR_E_IMEI_CHECK_ACK</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: lu_compl_vlr_new_tmsi()</span><br><span> DVLR lu_compl_vlr_fsm(LU:901700000004620){LU_COMPL_VLR_S_WAIT_IMEI_TMSI}: state_chg to LU_COMPL_VLR_S_WAIT_TMSI_CNF</span><br><span> - sending LU Accept for MSISDN:46071, with TMSI 0x03020100</span><br><span style="color: hsl(0, 100%, 40%);">-DREF MSISDN:46071: MSC conn use - dtap == 0 (0x0: )</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Received Event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(0, 100%, 40%);">-DMM RAN_conn(LU:901700000004620){RAN_CONN_S_AUTH_CIPH}: Awaiting results for Auth+Ciph, overruling event RAN_CONN_E_UNUSED</span><br><span style="color: hsl(120, 100%, 40%);">+DREF VLR subscr MSISDN:46071 usage decreases to: 1</span><br><span style="color: hsl(120, 100%, 40%);">+<-- GSUP rx OSMO_GSUP_MSGT_CHECK_IMEI_RESULT: vlr_gsupc_read_cb() returns 0</span><br><span> - a LU Accept with a new TMSI was sent, waiting for TMSI Realloc Compl</span><br><span>   llist_count(&net->ran_conns) == 1</span><br><span>   lu_result_sent == 1</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12478">change 12478</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/12478"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ife868ed71c36cdd02638072abebf61fc949080a7 </div>
<div style="display:none"> Gerrit-Change-Number: 12478 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>