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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: add TC_reassignment_fr()<br><br>osmo-bsc does now support intra-cell re-Assignment of lchans with active<br>voice. Test re-Assignment of TCH/F, triggered by VTY command.<br><br>Change-Id: I05fecefb9d6f9f23a0362f133170bca4da92e308<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 89 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 889a64d..abcfece 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -8671,6 +8671,93 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_reassignment_codec(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    /* First fully set up a speech lchan */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_assignment_codec(id);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Trigger re-assignment to another lchan */</span><br><span style="color: hsl(120, 100%, 40%);">+  var AssignmentState assignment_st := valueof(ts_AssignmentStateInit);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Re-Assignment should tell the MGW endpoint the new lchan's RTP address and port, so expecting to see exactly</span><br><span style="color: hsl(120, 100%, 40%);">+    * one MDCX on MGCP. */</span><br><span style="color: hsl(120, 100%, 40%);">+       g_media.mgcp_conn[0].mdcx_seen_exp := g_media.mgcp_conn[0].mdcx_seen_exp + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* The new lchan will see all-new IPAC_CRCX and IPAC_MDCX messages telling the BTS the same RTP address and port</span><br><span style="color: hsl(120, 100%, 40%);">+       * as the old lchan used. */</span><br><span style="color: hsl(120, 100%, 40%);">+  g_media.bts.ipa_crcx_seen := false;</span><br><span style="color: hsl(120, 100%, 40%);">+   g_media.bts.ipa_mdcx_seen := false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send different BTS side RTP port number for the new lchan */</span><br><span style="color: hsl(120, 100%, 40%);">+       g_media.bts.bts.port_nr := 4223;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_rslem_register(0, valueof(ts_RslChanNr_Bm(2))); /* <-- FIXME: can we somehow infer the timeslot that will be used? */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Trigger re-assignment. */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_transceive(BSCVTY, "bts 0 trx 0 timeslot " & int2str(g_chan_nr.tn) & " sub-slot 0 assignment");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_assignment(assignment_st);</span><br><span style="color: hsl(120, 100%, 40%);">+      [] as_Media();</span><br><span style="color: hsl(120, 100%, 40%);">+        [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                        break;</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%);">+   if (not assignment_st.assignment_done) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Assignment did not complete");</span><br><span style="color: hsl(120, 100%, 40%);">+            mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_check_mgcp_expectations()</span><br><span style="color: hsl(120, 100%, 40%);">+   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(2.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ log("show lchan summary: ", f_vty_transceive_ret(BSCVTY, "show lchan summary"));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Instruct BSC to clear channel */</span><br><span style="color: hsl(120, 100%, 40%);">+   var BssmapCause cause := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span style="color: hsl(120, 100%, 40%);">+    interleave {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] MGCP.receive(tr_DLCX) {}</span><br><span style="color: hsl(120, 100%, 40%);">+   [] MGCP.receive(tr_DLCX) {}</span><br><span style="color: hsl(120, 100%, 40%);">+   [] RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_RR_RELEASE)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+  [] RSL.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+      [] RSL.receive(tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 RSL.send(ts_RSL_RF_CHAN_REL_ACK(g_chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(tr_BSSMAP_ClearComplete) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   BSSAP.send(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);</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%);">+   f_sleep(0.5);</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_reassignment_fr() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var TestHdlrParams pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_TC_reassignment_codec), pars);</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* from f_establish_fully() */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  /* from re-assignment */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> control {</span><br><span>   /* CTRL interface testing */</span><br><span>@@ -8935,6 +9022,8 @@</span><br><span> </span><br><span>     execute( TC_refuse_chan_act_to_vamos() );</span><br><span>    execute( TC_refuse_mode_modif_to_vamos() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_reassignment_fr() );</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/+/24408">change 24408</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/+/24408"/><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: I05fecefb9d6f9f23a0362f133170bca4da92e308 </div>
<div style="display:none"> Gerrit-Change-Number: 24408 </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-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>