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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm_04_08_cc: Add global guard timer for MNCC<br><br>The external MNCC handler may hang indefinitely in cases where the remote<br>end of the MNCC ceases to work properly. Add a global guard timer to<br>make sure the call reaches ACTIVE state.<br><br>Change-Id: I7375d1e17cd746aac4eadfe1e587e82cf1630d3d<br>Related: OS#3599<br>---<br>M include/osmocom/msc/gsm_data.h<br>M include/osmocom/msc/transaction.h<br>M src/libmsc/gsm_04_08_cc.c<br>M src/libmsc/msc_vty.c<br>M src/libmsc/osmo_msc.c<br>M tests/msc_vlr/msc_vlr_test_call.err<br>6 files changed, 94 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h</span><br><span>index 54026f6..579697e 100644</span><br><span>--- a/include/osmocom/msc/gsm_data.h</span><br><span>+++ b/include/osmocom/msc/gsm_data.h</span><br><span>@@ -332,6 +332,9 @@</span><br><span>         /* Periodic location update default value */</span><br><span>         uint8_t t3212;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    /* Global MNCC guard timer value */</span><br><span style="color: hsl(120, 100%, 40%);">+   int mncc_guard_timeout;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    struct {</span><br><span>             struct mgcp_client_conf conf;</span><br><span>                struct mgcp_client *client;</span><br><span>diff --git a/include/osmocom/msc/transaction.h b/include/osmocom/msc/transaction.h</span><br><span>index 4ffb468..b7d7971 100644</span><br><span>--- a/include/osmocom/msc/transaction.h</span><br><span>+++ b/include/osmocom/msc/transaction.h</span><br><span>@@ -69,6 +69,7 @@</span><br><span>                     int Tcurrent;           /* current CC timer */</span><br><span>                       int T308_second;        /* used to send release again */</span><br><span>                     struct osmo_timer_list timer;</span><br><span style="color: hsl(120, 100%, 40%);">+                 struct osmo_timer_list timer_guard;</span><br><span>                  struct gsm_mncc msg;    /* stores setup/disconnect/release message */</span><br><span>                } cc;</span><br><span>                struct {</span><br><span>diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c</span><br><span>index 19e6cba..f9888d7 100644</span><br><span>--- a/src/libmsc/gsm_04_08_cc.c</span><br><span>+++ b/src/libmsc/gsm_04_08_cc.c</span><br><span>@@ -73,6 +73,43 @@</span><br><span> </span><br><span> static uint32_t new_callref = 0x80000001;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void gsm48_cc_guard_timeout(void *arg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_trans *trans = arg;</span><br><span style="color: hsl(120, 100%, 40%);">+        DEBUGP(DCC, "(sub %s) guard timeout expired\n",</span><br><span style="color: hsl(120, 100%, 40%);">+            vlr_subscr_msisdn_or_name(trans->vsub));</span><br><span style="color: hsl(120, 100%, 40%);">+    trans_free(trans);</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%);">+static void gsm48_stop_guard_timer(struct gsm_trans *trans)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (osmo_timer_pending(&trans->cc.timer_guard)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              DEBUGP(DCC, "(sub %s) stopping pending guard timer\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     vlr_subscr_msisdn_or_name(trans->vsub));</span><br><span style="color: hsl(120, 100%, 40%);">+            osmo_timer_del(&trans->cc.timer_guard);</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%);">+static void gsm48_start_guard_timer(struct gsm_trans *trans)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       /* NOTE: The purpose of this timer is to prevent the cc state machine</span><br><span style="color: hsl(120, 100%, 40%);">+  * from hanging in cases where mncc, gsm48 or both become unresponsive</span><br><span style="color: hsl(120, 100%, 40%);">+         * for some reason. The timer is started initially with the setup from</span><br><span style="color: hsl(120, 100%, 40%);">+         * the gsm48 side and then re-started with every incoming mncc message.</span><br><span style="color: hsl(120, 100%, 40%);">+        * Once the mncc state reaches its active state the timer is stopped.</span><br><span style="color: hsl(120, 100%, 40%);">+  * So if the cc state machine does not show any activity for an</span><br><span style="color: hsl(120, 100%, 40%);">+        * extended amount of time during call setup or teardown the guard</span><br><span style="color: hsl(120, 100%, 40%);">+     * timer will time out and hard-clear the connection. */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (osmo_timer_pending(&trans->cc.timer_guard))</span><br><span style="color: hsl(120, 100%, 40%);">+                gsm48_stop_guard_timer(trans);</span><br><span style="color: hsl(120, 100%, 40%);">+        DEBUGP(DCC, "(sub %s) starting guard timer with %d seconds\n",</span><br><span style="color: hsl(120, 100%, 40%);">+             vlr_subscr_msisdn_or_name(trans->vsub),</span><br><span style="color: hsl(120, 100%, 40%);">+            trans->net->mncc_guard_timeout);</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_timer_setup(&trans->cc.timer_guard, gsm48_cc_guard_timeout, trans);</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_timer_schedule(&trans->cc.timer_guard,</span><br><span style="color: hsl(120, 100%, 40%);">+                        trans->net->mncc_guard_timeout, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> /* Call Control */</span><br><span> </span><br><span>@@ -149,6 +186,10 @@</span><br><span> </span><br><span>    count_statistics(trans, state);</span><br><span>      trans->cc.state = state;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Stop the guard timer when a call reaches the active state */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (state == GSM_CSTATE_ACTIVE)</span><br><span style="color: hsl(120, 100%, 40%);">+               gsm48_stop_guard_timer(trans);</span><br><span> }</span><br><span> </span><br><span> static int gsm48_cc_tx_status(struct gsm_trans *trans, void *arg)</span><br><span>@@ -259,6 +300,8 @@</span><br><span>   }</span><br><span>    if (trans->cc.state != GSM_CSTATE_NULL)</span><br><span>           new_cc_state(trans, GSM_CSTATE_NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       gsm48_stop_guard_timer(trans);</span><br><span> }</span><br><span> </span><br><span> static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg);</span><br><span>@@ -474,6 +517,8 @@</span><br><span>   struct tlv_parsed tp;</span><br><span>        struct gsm_mncc setup;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    gsm48_start_guard_timer(trans);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    memset(&setup, 0, sizeof(struct gsm_mncc));</span><br><span>      setup.callref = trans->callref;</span><br><span> </span><br><span>@@ -1970,6 +2015,8 @@</span><br><span>               log_set_context(LOG_CTX_VLR_SUBSCR, trans->vsub);</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ gsm48_start_guard_timer(trans);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    if (trans->conn)</span><br><span>          conn = trans->conn;</span><br><span> </span><br><span>diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c</span><br><span>index fe6ae88..a16cec8 100644</span><br><span>--- a/src/libmsc/msc_vty.c</span><br><span>+++ b/src/libmsc/msc_vty.c</span><br><span>@@ -333,6 +333,16 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_msc_mncc_guard_timeout,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_msc_mncc_guard_timeout_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "mncc-guard-timeout <0-255>",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Set global guard timer for mncc interface activity\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "guard timer value (sec.)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   gsmnet->mncc_guard_timeout = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(cfg_msc_assign_tmsi, cfg_msc_assign_tmsi_cmd,</span><br><span>       "assign-tmsi",</span><br><span>       "Assign TMSI during Location Updating.\n")</span><br><span>@@ -421,6 +431,8 @@</span><br><span> static int config_write_msc(struct vty *vty)</span><br><span> {</span><br><span>   vty_out(vty, "msc%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, " mncc-guard-timeout %i%s",</span><br><span style="color: hsl(120, 100%, 40%);">+            gsmnet->mncc_guard_timeout, VTY_NEWLINE);</span><br><span>         vty_out(vty, " %sassign-tmsi%s",</span><br><span>           gsmnet->vlr->cfg.assign_tmsi? "" : "no ", VTY_NEWLINE);</span><br><span> </span><br><span>@@ -1415,6 +1427,7 @@</span><br><span>        install_element(CONFIG_NODE, &cfg_msc_cmd);</span><br><span>      install_node(&msc_node, config_write_msc);</span><br><span>       install_element(MSC_NODE, &cfg_msc_assign_tmsi_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element(MSC_NODE, &cfg_msc_mncc_guard_timeout_cmd);</span><br><span>      install_element(MSC_NODE, &cfg_msc_no_assign_tmsi_cmd);</span><br><span>  install_element(MSC_NODE, &cfg_msc_auth_tuple_max_reuse_count_cmd);</span><br><span>      install_element(MSC_NODE, &cfg_msc_auth_tuple_reuse_on_error_cmd);</span><br><span>diff --git a/src/libmsc/osmo_msc.c b/src/libmsc/osmo_msc.c</span><br><span>index 3965e9b..c9ecb64 100644</span><br><span>--- a/src/libmsc/osmo_msc.c</span><br><span>+++ b/src/libmsc/osmo_msc.c</span><br><span>@@ -54,6 +54,8 @@</span><br><span>  /* Use 30 min periodic update interval as sane default */</span><br><span>    net->t3212 = 5;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        net->mncc_guard_timeout = 180;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  net->paging_response_timer = MSC_PAGING_RESPONSE_TIMER_DEFAULT;</span><br><span> </span><br><span>       INIT_LLIST_HEAD(&net->trans_list);</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_call.err b/tests/msc_vlr/msc_vlr_test_call.err</span><br><span>index 19cb25d..936f61c 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_call.err</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_call.err</span><br><span>@@ -277,6 +277,7 @@</span><br><span> DREF MSISDN:42342: MSC conn use + trans_cc == 3 (0x1a: dtap,cm_service,trans_cc)</span><br><span> DMM MSISDN:42342: rx msg GSM48_MT_CC_SETUP: received_cm_service_request changes to false</span><br><span> DREF MSISDN:42342: MSC conn use - cm_service == 2 (0x12: dtap,trans_cc)</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub MSISDN:42342) new state NULL -> INITIATED</span><br><span> DCC Subscriber MSISDN:42342 (42342) sends SETUP to 123</span><br><span> DMNCC transmit message MNCC_SETUP_IND</span><br><span>@@ -287,6 +288,8 @@</span><br><span> DREF MSISDN:42342: MSC conn use - dtap == 1 (0x10: trans_cc)</span><br><span> - MNCC says that's fine</span><br><span> DMNCC receive message MNCC_CALL_PROC_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_CALL_PROC_REQ' from MNCC in state 1 (INITIATED)</span><br><span> DCC (ti 08 sub MSISDN:42342) new state INITIATED -> MO_CALL_PROC</span><br><span> DMSC msc_tx 2 bytes to MSISDN:42342 via RAN_UTRAN_IU</span><br><span>@@ -296,12 +299,16 @@</span><br><span> - Total time passed: 1.000023 s</span><br><span> - The other call leg got established (not shown here), MNCC tells us so</span><br><span> DMNCC receive message MNCC_ALERT_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_ALERT_REQ' from MNCC in state 3 (MO_CALL_PROC)</span><br><span> DCC (ti 08 sub MSISDN:42342) new state MO_CALL_PROC -> CALL_DELIVERED</span><br><span> DMSC msc_tx 2 bytes to MSISDN:42342 via RAN_UTRAN_IU</span><br><span> - DTAP --RAN_UTRAN_IU--> MS: GSM48_MT_CC_ALERTING: 8301</span><br><span> - DTAP matches expected message</span><br><span> DMNCC receive message MNCC_SETUP_RSP</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_SETUP_RSP' from MNCC in state 4 (CALL_DELIVERED)</span><br><span> DCC starting timer T313 with 30 seconds</span><br><span> DCC (ti 08 sub MSISDN:42342) new state CALL_DELIVERED -> CONNECT_IND</span><br><span>@@ -314,6 +321,7 @@</span><br><span> DRLL Dispatching 04.08 message GSM48_MT_CC_CONNECT_ACK (0x3:0xf)</span><br><span> DCC stopping pending timer T313</span><br><span> DCC (ti 08 sub MSISDN:42342) new state CONNECT_IND -> ACTIVE</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span> DMNCC transmit message MNCC_SETUP_COMPL_IND</span><br><span> DCC Sending 'MNCC_SETUP_COMPL_IND' to MNCC.</span><br><span>   MSC --> MNCC: callref 0x80000001: MNCC_SETUP_COMPL_IND</span><br><span>@@ -334,6 +342,7 @@</span><br><span> DMM Subscr_Conn(CM_SERVICE_REQ:901700000010650){SUBSCR_CONN_S_COMMUNICATING}: Received Event SUBSCR_CONN_E_COMMUNICATING</span><br><span> DREF MSISDN:42342: MSC conn use - dtap == 1 (0x10: trans_cc)</span><br><span> DMNCC receive message MNCC_REL_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_REL_REQ' from MNCC in state 12 (DISCONNECT_IND)</span><br><span> DCC starting timer T308 with 10 seconds</span><br><span> DCC (ti 08 sub MSISDN:42342) new state DISCONNECT_IND -> RELEASE_REQ</span><br><span>@@ -349,6 +358,7 @@</span><br><span>   MSC --> MNCC: callref 0x80000001: MNCC_REL_CNF</span><br><span>   MS <--Call Release-- MSC: subscr=MSISDN:42342 callref=0x0</span><br><span> DCC (ti 08 sub MSISDN:42342) new state RELEASE_REQ -> NULL</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span> DREF VLR subscr MSISDN:42342 usage decreases to: 2</span><br><span> DREF MSISDN:42342: MSC conn use - trans_cc == 1 (0x2: dtap)</span><br><span> DMM Subscr_Conn(CM_SERVICE_REQ:901700000010650){SUBSCR_CONN_S_COMMUNICATING}: Received Event SUBSCR_CONN_E_COMMUNICATING</span><br><span>@@ -697,8 +707,10 @@</span><br><span> DMM Subscr_Conn(PAGING_RESP:901700000010650){SUBSCR_CONN_S_COMMUNICATING}: Received Event SUBSCR_CONN_E_COMMUNICATING</span><br><span> DREF MSISDN:42342: MSC conn use - dtap == 1 (0x10: trans_cc)</span><br><span> DMNCC receive message MNCC_SETUP_COMPL_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 00 sub 42342) Received 'MNCC_SETUP_COMPL_REQ' from MNCC in state 8 (CONNECT_REQUEST)</span><br><span> DCC (ti 00 sub MSISDN:42342) new state CONNECT_REQUEST -> ACTIVE</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span> DMSC msc_tx 2 bytes to MSISDN:42342 via RAN_UTRAN_IU</span><br><span> - DTAP --RAN_UTRAN_IU--> MS: GSM48_MT_CC_CONNECT_ACK: 030f</span><br><span> - DTAP matches expected message</span><br><span>@@ -717,6 +729,7 @@</span><br><span> DMM Subscr_Conn(PAGING_RESP:901700000010650){SUBSCR_CONN_S_COMMUNICATING}: Received Event SUBSCR_CONN_E_COMMUNICATING</span><br><span> DREF MSISDN:42342: MSC conn use - dtap == 1 (0x10: trans_cc)</span><br><span> DMNCC receive message MNCC_REL_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 00 sub 42342) Received 'MNCC_REL_REQ' from MNCC in state 12 (DISCONNECT_IND)</span><br><span> DCC starting timer T308 with 10 seconds</span><br><span> DCC (ti 00 sub MSISDN:42342) new state DISCONNECT_IND -> RELEASE_REQ</span><br><span>@@ -732,6 +745,7 @@</span><br><span>   MSC --> MNCC: callref 0x423: MNCC_REL_CNF</span><br><span>   MS <--Call Release-- MSC: subscr=MSISDN:42342 callref=0x0</span><br><span> DCC (ti 00 sub MSISDN:42342) new state RELEASE_REQ -> NULL</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span> DREF VLR subscr MSISDN:42342 usage decreases to: 2</span><br><span> DREF MSISDN:42342: MSC conn use - trans_cc == 1 (0x2: dtap)</span><br><span> DMM Subscr_Conn(PAGING_RESP:901700000010650){SUBSCR_CONN_S_COMMUNICATING}: Received Event SUBSCR_CONN_E_COMMUNICATING</span><br><span>@@ -1078,6 +1092,7 @@</span><br><span> DCC stopping pending timer T301</span><br><span>   MS <--Call Release-- MSC: subscr=MSISDN:42342 callref=0x423</span><br><span> DMNCC receive message MNCC_REL_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 00 sub 42342) Received 'MNCC_REL_REQ' from MNCC in state 7 (CALL_RECEIVED)</span><br><span> DCC starting timer T308 with 10 seconds</span><br><span> DCC (ti 00 sub MSISDN:42342) new state CALL_RECEIVED -> RELEASE_REQ</span><br><span>@@ -1089,6 +1104,7 @@</span><br><span>   MSC --> MNCC: callref 0x423: MNCC_REL_CNF</span><br><span> DCC stopping pending timer T308</span><br><span> DCC (ti 00 sub MSISDN:42342) new state RELEASE_REQ -> NULL</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span> DREF VLR subscr MSISDN:42342 usage decreases to: 2</span><br><span> DREF MSISDN:42342: MSC conn use - trans_cc == 1 (0x100: release)</span><br><span> - Iu Release --RAN_UTRAN_IU--> MS</span><br><span>@@ -1389,6 +1405,7 @@</span><br><span> DREF MSISDN:42342: MSC conn use + trans_cc == 3 (0x1a: dtap,cm_service,trans_cc)</span><br><span> DMM MSISDN:42342: rx msg GSM48_MT_CC_SETUP: received_cm_service_request changes to false</span><br><span> DREF MSISDN:42342: MSC conn use - cm_service == 2 (0x12: dtap,trans_cc)</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub MSISDN:42342) new state NULL -> INITIATED</span><br><span> DCC Subscriber MSISDN:42342 (42342) sends SETUP to 123</span><br><span> DMNCC transmit message MNCC_SETUP_IND</span><br><span>@@ -1399,6 +1416,8 @@</span><br><span> DREF MSISDN:42342: MSC conn use - dtap == 1 (0x10: trans_cc)</span><br><span> - MNCC says that's fine</span><br><span> DMNCC receive message MNCC_CALL_PROC_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_CALL_PROC_REQ' from MNCC in state 1 (INITIATED)</span><br><span> DCC (ti 08 sub MSISDN:42342) new state INITIATED -> MO_CALL_PROC</span><br><span> DMSC msc_tx 2 bytes to MSISDN:42342 via RAN_UTRAN_IU</span><br><span>@@ -1407,6 +1426,8 @@</span><br><span>   MS <--Call Assignment-- MSC: subscr=MSISDN:42342 callref=0x80000002</span><br><span> - But the other side's MSISDN could not be resolved, MNCC tells us to cancel</span><br><span> DMNCC receive message MNCC_REL_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_REL_REQ' from MNCC in state 3 (MO_CALL_PROC)</span><br><span> DCC starting timer T308 with 10 seconds</span><br><span> DCC (ti 08 sub MSISDN:42342) new state MO_CALL_PROC -> RELEASE_REQ</span><br><span>@@ -1427,6 +1448,7 @@</span><br><span>   MSC --> MNCC: callref 0x80000002: MNCC_REL_CNF</span><br><span>   MS <--Call Release-- MSC: subscr=MSISDN:42342 callref=0x0</span><br><span> DCC (ti 08 sub MSISDN:42342) new state RELEASE_REQ -> NULL</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span> DREF VLR subscr MSISDN:42342 usage decreases to: 2</span><br><span> DREF MSISDN:42342: MSC conn use - trans_cc == 1 (0x2: dtap)</span><br><span> DMM Subscr_Conn(CM_SERVICE_REQ:901700000010650){SUBSCR_CONN_S_COMMUNICATING}: Received Event SUBSCR_CONN_E_COMMUNICATING</span><br><span>@@ -1733,6 +1755,7 @@</span><br><span> DREF MSISDN:42342: MSC conn use + trans_cc == 3 (0x1a: dtap,cm_service,trans_cc)</span><br><span> DMM MSISDN:42342: rx msg GSM48_MT_CC_SETUP: received_cm_service_request changes to false</span><br><span> DREF MSISDN:42342: MSC conn use - cm_service == 2 (0x12: dtap,trans_cc)</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub MSISDN:42342) new state NULL -> INITIATED</span><br><span> DCC Subscriber MSISDN:42342 (42342) sends SETUP to 123</span><br><span> DMNCC transmit message MNCC_SETUP_IND</span><br><span>@@ -1743,6 +1766,8 @@</span><br><span> DREF MSISDN:42342: MSC conn use - dtap == 1 (0x10: trans_cc)</span><br><span> - MNCC says that's fine</span><br><span> DMNCC receive message MNCC_CALL_PROC_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_CALL_PROC_REQ' from MNCC in state 1 (INITIATED)</span><br><span> DCC (ti 08 sub MSISDN:42342) new state INITIATED -> MO_CALL_PROC</span><br><span> DMSC msc_tx 2 bytes to MSISDN:42342 via RAN_UTRAN_IU</span><br><span>@@ -1751,6 +1776,8 @@</span><br><span>   MS <--Call Assignment-- MSC: subscr=MSISDN:42342 callref=0x80000003</span><br><span> - But the other side's MSISDN could not be resolved, MNCC tells us to cancel</span><br><span> DMNCC receive message MNCC_REL_REQ</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) starting guard timer with 180 seconds</span><br><span> DCC (ti 08 sub 42342) Received 'MNCC_REL_REQ' from MNCC in state 3 (MO_CALL_PROC)</span><br><span> DCC starting timer T308 with 10 seconds</span><br><span> DCC (ti 08 sub MSISDN:42342) new state MO_CALL_PROC -> RELEASE_REQ</span><br><span>@@ -1770,6 +1797,7 @@</span><br><span> DCC Sending 'MNCC_REL_CNF' to MNCC.</span><br><span>   MSC --> MNCC: callref 0x80000003: MNCC_REL_CNF</span><br><span> DCC (ti 08 sub MSISDN:42342) new state RELEASE_REQ -> NULL</span><br><span style="color: hsl(120, 100%, 40%);">+DCC (sub 42342) stopping pending guard timer</span><br><span> DREF VLR subscr MSISDN:42342 usage decreases to: 2</span><br><span> DREF MSISDN:42342: MSC conn use - trans_cc == 0 (0x0: )</span><br><span> DMM Subscr_Conn(CM_SERVICE_REQ:901700000010650){SUBSCR_CONN_S_COMMUNICATING}: Received Event SUBSCR_CONN_E_UNUSED</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11307">change 11307</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/11307"/><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: merged </div>
<div style="display:none"> Gerrit-Change-Id: I7375d1e17cd746aac4eadfe1e587e82cf1630d3d </div>
<div style="display:none"> Gerrit-Change-Number: 11307 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>