<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/25070">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">msc: add MSC_Tests.TC_call_re_establishment<br><br>The osmo-msc patch that makes this test pass is<br>I6fa37d6ca9fcb1637742b40e37b68d67664c9b60<br><br>Related: SYS#5130<br>Change-Id: Ifdff5573eeb3b3d41e8599b9b0228411d2576864<br>---<br>M msc/MSC_Tests.ttcn<br>1 file changed, 107 insertions(+), 0 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/70/25070/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn</span><br><span>index ecfe5f9..428dae3 100644</span><br><span>--- a/msc/MSC_Tests.ttcn</span><br><span>+++ b/msc/MSC_Tests.ttcn</span><br><span>@@ -6626,6 +6626,111 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const charstring REEST_LOST_CONNECTION := "REEST_LOST_CONNECTION";</span><br><span style="color: hsl(120, 100%, 40%);">+const charstring REEST_CLEARED := "REEST_CLEARED";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_tc_call_re_establishment_1(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+  runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_handler(pars, t_guard := 30.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+     var CallParameters cpars := valueof(t_CallParams('12345'H, 0));</span><br><span style="color: hsl(120, 100%, 40%);">+       f_mo_call_establish(cpars);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(3.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ COORD.send(REEST_LOST_CONNECTION);</span><br><span style="color: hsl(120, 100%, 40%);">+    COORD.send(cpars);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_expect_clear(verify_vlr_cell_id := false);</span><br><span style="color: hsl(120, 100%, 40%);">+  COORD.send(REEST_CLEARED);</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%);">+friend function f_tc_call_re_establishment_2(charstring id, BSC_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+  runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_handler(pars, t_guard := 30.0);</span><br><span style="color: hsl(120, 100%, 40%);">+        var CallParameters cpars;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   COORD.receive(REEST_LOST_CONNECTION);</span><br><span style="color: hsl(120, 100%, 40%);">+ COORD.receive(tr_CallParams) -> value cpars;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* The MS has lost the first channel and decides to show up on a new conn (on a nearby neighbor cell) to ask for</span><br><span style="color: hsl(120, 100%, 40%);">+       * CM Re-Establishment. Send a Complete Layer 3 to osmo-msc with a CM Re-Establishment Request. */</span><br><span style="color: hsl(120, 100%, 40%);">+    var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+       var PDU_ML3_MS_NW l3_info := valueof(ts_CM_REESTABL_REQ(mi));</span><br><span style="color: hsl(120, 100%, 40%);">+ f_cl3_or_initial_ue(l3_info);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* At this point the other test component should receive the Clear Command for the first A connection. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* This new connection continues with Authentication... */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_mm_common();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* ...and with Assignment of a voice channel. */</span><br><span style="color: hsl(120, 100%, 40%);">+      var template BSSMAP_IE_AoIP_TransportLayerAddress tla_ass :=</span><br><span style="color: hsl(120, 100%, 40%);">+          f_tr_BSSMAP_IE_AoIP_TLA(cpars.mgw_conn_1.mgw_rtp_ip, ?);</span><br><span style="color: hsl(120, 100%, 40%);">+      BSSAP.receive(tr_BSSMAP_AssignmentReq(omit, tla_ass));</span><br><span style="color: hsl(120, 100%, 40%);">+        /* By this Assignment Request, the CM Re-Establishment Request is implicitly accepted. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Send Assignment Complete from BSC */</span><br><span style="color: hsl(120, 100%, 40%);">+       var template BSSMAP_IE_AoIP_TransportLayerAddress tla;</span><br><span style="color: hsl(120, 100%, 40%);">+        tla := f_ts_BSSMAP_IE_AoIP_TLA(cpars.bss_rtp_ip, cpars.bss_rtp_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSSMAP_IE_SpeechCodec codec;</span><br><span style="color: hsl(120, 100%, 40%);">+      codec := valueof(ts_BSSMAP_IE_SpeechCodec({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Make really sure the other component is done with its MGCP */</span><br><span style="color: hsl(120, 100%, 40%);">+      COORD.receive(REEST_CLEARED);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Transfer state for this call over to this test component so we can resolve MNCC and MGCP in this function. */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_create_mncc_steal_call(cpars.mncc_callref);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_create_mgcp_steal_ep(cpars.mgcp_ep);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* osmo-msc may redirect the MGW endpoint to the newly allocated channel.</span><br><span style="color: hsl(120, 100%, 40%);">+      * Apparently osmo-msc currently also sends an MDCX to the CN side, just repeating the same configuration that</span><br><span style="color: hsl(120, 100%, 40%);">+         * is already in use. This test accepts any number of or even lack of MDCX. */</span><br><span style="color: hsl(120, 100%, 40%);">+        var default ack_mdcx := activate(as_mgcp_ack_all_mdcx(cpars));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      BSSAP.send(ts_BSSMAP_AssignmentComplete(omit, tla, codec));</span><br><span style="color: hsl(120, 100%, 40%);">+   /* The call has been fully re-established.</span><br><span style="color: hsl(120, 100%, 40%);">+     * Let a bit of time pass before hanging up, for everything to settle. */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sleep(3.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       deactivate(ack_mdcx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Hang up the call and clear the new, second A connection */</span><br><span style="color: hsl(120, 100%, 40%);">+ var default ack_dlcx := activate(as_mgcp_ack_all_dlcx(cpars));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* CC release. This is the proper MS initiated release sequence as shown by</span><br><span style="color: hsl(120, 100%, 40%);">+    * https://git.osmocom.org/osmo-msc/tree/doc/sequence_charts/voice_call_full.msc?id=e53ecde83e4fb2470209e818e9ad76a2d6a19190</span><br><span style="color: hsl(120, 100%, 40%);">+   * f_call_hangup() seems a bit mixed up, so here a "proper" sequence. Fix of f_call_hangup() pending. */</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_DISC(cpars.transaction_id, '0'B, '0000000'B)));</span><br><span style="color: hsl(120, 100%, 40%);">+        MNCC.receive(tr_MNCC_DISC_ind(cpars.mncc_callref));</span><br><span style="color: hsl(120, 100%, 40%);">+   MNCC.send(ts_MNCC_REL_req(cpars.mncc_callref, valueof(ts_MNCC_cause(23))));</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_RELEASE(cpars.transaction_id)));</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_REL_COMPL(cpars.transaction_id, '0'B)));</span><br><span style="color: hsl(120, 100%, 40%);">+       MNCC.receive(tr_MNCC_REL_cnf(cpars.mncc_callref, cause := *));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* BSSAP clear */</span><br><span style="color: hsl(120, 100%, 40%);">+     interleave {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSAP.receive(tr_BSSMAP_ClearCommand) {</span><br><span style="color: hsl(120, 100%, 40%);">+            BSSAP.send(ts_BSSMAP_ClearComplete);</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ deactivate(ack_dlcx);</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_call_re_establishment() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var BSC_ConnHdlr vc_conn1;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSC_ConnHdlr vc_conn2;</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_conn1 := f_start_handler(refers(f_tc_call_re_establishment_1), 91, verify_cell_id := false);</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn2 := f_start_handler(refers(f_tc_call_re_establishment_2), 91, verify_cell_id := false);</span><br><span style="color: hsl(120, 100%, 40%);">+       connect(vc_conn1:COORD, vc_conn2:COORD);</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_conn1.done;</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_conn2.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%);">+</span><br><span> control {</span><br><span>   execute( TC_cr_before_reset() );</span><br><span>     execute( TC_lu_imsi_noauth_tmsi() );</span><br><span>@@ -6784,6 +6889,8 @@</span><br><span>         execute( TC_lu_and_expire_while_paging() );</span><br><span>  execute( TC_paging_response_imsi_unknown() );</span><br><span>        execute( TC_paging_response_tmsi_unknown() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_call_re_establishment() );</span><br><span> }</span><br><span> </span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/25070">change 25070</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/+/25070"/><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: Ifdff5573eeb3b3d41e8599b9b0228411d2576864 </div>
<div style="display:none"> Gerrit-Change-Number: 25070 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>