<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/25634">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: add TC_lost_sdcch_during_assignment()<br><br>Reproduce a segfault happening when the SDCCH (primary) lchan is lost<br>in-between a TCH Channel Activ and its Channel Activ Ack.<br><br>Related: SYS#5627<br>Related: I3b1cd88bea62ef0032f6c035bac95d3df9fdca7a (osmo-bsc)<br>Change-Id: I81cccdea450885d5241cab62000ad355d464dd49<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 91 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/34/25634/1</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 7183f54..8b97770 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -10155,6 +10155,95 @@</span><br><span>       f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Reproduce a segfault happening when the SDCCH (primary) lchan is lost in-between a TCH Channel Activ and its Channel</span><br><span style="color: hsl(120, 100%, 40%);">+ * Activ Ack (SYS#5627). */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_lost_sdcch_during_assignment(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+              ass_cmd.pdu.bssmap.assignmentRequest.codecList := g_pars.ass_codec_list;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_cmd.pdu.bssmap.assignmentRequest.channelType :=</span><br><span style="color: hsl(120, 100%, 40%);">+                           f_BSSMAP_chtype_from_codec(g_pars.ass_codec_list.codecElements[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSSMAP_FIELD_CodecType codecType;</span><br><span style="color: hsl(120, 100%, 40%);">+ codecType := valueof(ass_cmd.pdu.bssmap.assignmentRequest.codecList.codecElements[0].codecType);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_MscConnHdlr_init(g_pars.media_nr, host_bts, host_mgw_mgcp, codecType);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* First establish a signalling lchan */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_create_chan_and_exp();</span><br><span style="color: hsl(120, 100%, 40%);">+      f_rslem_dchan_queue_enable();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* we should now have a COMPL_L3 at the MSC */</span><br><span style="color: hsl(120, 100%, 40%);">+        var template PDU_BSSAP exp_l3_compl;</span><br><span style="color: hsl(120, 100%, 40%);">+  exp_l3_compl := tr_BSSMAP_ComplL3()</span><br><span style="color: hsl(120, 100%, 40%);">+   if (g_pars.aoip == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+           exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 10.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%);">+ [] BSSAP.receive(exp_l3_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BSSAP.receive(tr_BSSMAP_ComplL3) {</span><br><span style="color: hsl(120, 100%, 40%);">+         Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");</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_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});</span><br><span style="color: hsl(120, 100%, 40%);">+        activate(as_Media_mgw());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   var RslChannelNr chan_nr := { u := { ch0 := RSL_CHAN_NR_Bm_ACCH }, tn := 1 };</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rslem_register(0, chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_rslem_auto_chan_act_ack(RSL_PROC, false);</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.send(ass_cmd);</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%);">+      /* Wait for the Channel Activ for the TCH channel */</span><br><span style="color: hsl(120, 100%, 40%);">+  var ASP_RSL_Unitdata rx_rsl_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+       RSL.receive(tr_ASP_RSL_UD(tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV), sid := ?)) -> value rx_rsl_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* make the original SDCCH disappear */</span><br><span style="color: hsl(120, 100%, 40%);">+       RSL.send(ts_RSL_REL_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0))));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* and ACK the TCH channel activation. This caused a segfault up to OsmoBSC 1.7.0 (SYS#5627) */</span><br><span style="color: hsl(120, 100%, 40%);">+       RSL.send(ts_ASP_RSL_UD(ts_RSL_CHAN_ACT_ACK(chan_nr, 23), rx_rsl_ud.streamId));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      interleave {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSAP.receive(tr_BSSMAP_AssignmentFail);</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSAP.receive(tr_BSSMAP_ClearRequest);</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%);">+   BSSAP.send(ts_BSSMAP_ClearCommand(0));</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%);">+   var MgcpCommand mgcp;</span><br><span style="color: hsl(120, 100%, 40%);">+ MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(120, 100%, 40%);">+                    MGCP.send(ts_DLCX_ACK2(mgcp.line.trans_id));</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%);">+testcase TC_lost_sdcch_during_assignment() 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%);">+       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_lost_sdcch_during_assignment), 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%);">+       f_shutdown_helper();</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>       /* CTRL interface testing */</span><br><span>         execute( TC_ctrl_msc_connection_status() );</span><br><span>@@ -10462,6 +10551,8 @@</span><br><span>        execute( TC_imm_ass_pre_ts_ack_dyn_ts() );</span><br><span> </span><br><span>       execute( TC_ctrl_trx_rf_locked() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_lost_sdcch_during_assignment() );</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/+/25634">change 25634</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/+/25634"/><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: I81cccdea450885d5241cab62000ad355d464dd49 </div>
<div style="display:none"> Gerrit-Change-Number: 25634 </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>