<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26448">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: f_create_chan_and_exp(): ensure that SCCP connection is up<br><br>This change fixes sporadic failures of TC_cm_serv_rej:<br><br>  RAN Connection table not found by component TC_cm_serv_rej(2648)<br>        BSC_Tests.ttcn:11106 BSC_Tests control part<br>        BSC_Tests.ttcn:10550 TC_cm_serv_rej testcase<br><br>The reason is that sometimes a BSSAP/DTAP PDU (with CM Service Reject)<br>gets enqueued before the SUT has established an SCCP connection to the<br>virtual MSC.  This causes a lookup error in the RAN connection table.<br><br>A simple solution would be to add a receive statement after calling<br>f_create_chan_and_exp(), like it's done everywhere else:<br><br>  f_create_chan_and_exp();<br>  BSSAP.receive(tr_BSSMAP_ComplL3); // <---<br><br>But a more general solution is to expect and receive this message in<br>f_create_chan_and_exp(), so we can reduce code duplication and make<br>the API more convinient.  This is exactly what this change does.<br><br>Change-Id: Ic675168e29919e1234cb49440c4a630238ff5d70<br>Related: SYS#4878<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/MSC_ConnectionHandler.ttcn<br>2 files changed, 25 insertions(+), 61 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/48/26448/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 22df0cb..3aaab85 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -3880,7 +3880,6 @@</span><br><span>    /* this is like the beginning of f_establish_fully(), but only up to ciphering reject */</span><br><span> </span><br><span>         var BSSMAP_FIELD_CodecType codecType;</span><br><span style="color: hsl(0, 100%, 40%);">-   timer T := 10.0;</span><br><span> </span><br><span>         codecType := exp_ass_req.pdu.bssmap.assignmentRequest.codecList.codecElements[0].codecType;</span><br><span>  f_MscConnHdlr_init(g_pars.media_nr, host_bts, host_mgw_mgcp, codecType);</span><br><span>@@ -3888,24 +3887,6 @@</span><br><span>    f_create_chan_and_exp();</span><br><span>     /* we should now have a COMPL_L3 at the MSC */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      var template PDU_BSSAP exp_l3_compl;</span><br><span style="color: hsl(0, 100%, 40%);">-    exp_l3_compl := tr_BSSMAP_ComplL3()</span><br><span style="color: hsl(0, 100%, 40%);">-     if (g_pars.aoip == false) {</span><br><span style="color: hsl(0, 100%, 40%);">-             exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       T.start;</span><br><span style="color: hsl(0, 100%, 40%);">-        alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSAP.receive(exp_l3_compl);</span><br><span style="color: hsl(0, 100%, 40%);">- [] BSSAP.receive(tr_BSSMAP_ComplL3) {</span><br><span style="color: hsl(0, 100%, 40%);">-           Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    /* Start ciphering, expect Cipher Mode Reject */</span><br><span>     f_cipher_mode(g_pars.encr, exp_fail := true);</span><br><span> }</span><br><span>@@ -5055,7 +5036,6 @@</span><br><span> </span><br><span>       f_create_chan_and_exp();</span><br><span>     /* we should now have a COMPL_L3 at the MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-  BSSAP.receive(tr_BSSMAP_ComplL3);</span><br><span> </span><br><span>        BSSAP.send(ts_BSSMAP_ClassmarkRequest);</span><br><span>      RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_CM_ENQUIRY));</span><br><span>@@ -5081,7 +5061,6 @@</span><br><span> </span><br><span>  f_create_chan_and_exp();</span><br><span>     /* we should now have a COMPL_L3 at the MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-  BSSAP.receive(tr_BSSMAP_ComplL3);</span><br><span> </span><br><span>        /* Send CommonID */</span><br><span>  BSSAP.send(ts_BSSMAP_CommonId(g_pars.imsi));</span><br><span>@@ -5105,7 +5084,6 @@</span><br><span>         g_pars := f_gen_test_hdlr_pars();</span><br><span>    f_create_chan_and_exp();</span><br><span>     /* we should now have a COMPL_L3 at the MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-  BSSAP.receive(tr_BSSMAP_ComplL3);</span><br><span> </span><br><span>        /* send the single message we want to send */</span><br><span>        f_rsl_send_l3(l3);</span><br><span>@@ -5176,7 +5154,6 @@</span><br><span>   g_pars := f_gen_test_hdlr_pars();</span><br><span>    f_create_chan_and_exp();</span><br><span>     /* we should now have a COMPL_L3 at the MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-  BSSAP.receive(tr_BSSMAP_ComplL3);</span><br><span> </span><br><span>        /* send short message */</span><br><span>     RSL.send(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), ''O));</span><br><span>@@ -10534,6 +10511,7 @@</span><br><span> private function f_TC_cm_serv_rej(charstring id) runs on MSC_ConnHdlr</span><br><span> {</span><br><span>    f_create_chan_and_exp();</span><br><span style="color: hsl(120, 100%, 40%);">+      /* we should now have a COMPL_L3 at the MSC */</span><br><span>       BSSAP.send(ts_PDU_DTAP_MT(ts_CM_SERV_REJ('02'O), '00'O));</span><br><span>    f_sleep(1.0);</span><br><span> }</span><br><span>@@ -10575,24 +10553,6 @@</span><br><span>        f_rslem_dchan_queue_enable();</span><br><span> </span><br><span>    /* we should now have a COMPL_L3 at the MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-  var template PDU_BSSAP exp_l3_compl;</span><br><span style="color: hsl(0, 100%, 40%);">-    exp_l3_compl := tr_BSSMAP_ComplL3()</span><br><span style="color: hsl(0, 100%, 40%);">-     if (g_pars.aoip == false) {</span><br><span style="color: hsl(0, 100%, 40%);">-             exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       timer T := 10.0;</span><br><span style="color: hsl(0, 100%, 40%);">-        T.start;</span><br><span style="color: hsl(0, 100%, 40%);">-        alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSAP.receive(exp_l3_compl);</span><br><span style="color: hsl(0, 100%, 40%);">- [] BSSAP.receive(tr_BSSMAP_ComplL3) {</span><br><span style="color: hsl(0, 100%, 40%);">-           Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span> </span><br><span>        f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});</span><br><span>       activate(as_Media_mgw());</span><br><span>diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>index 481abc0..4aeb539 100644</span><br><span>--- a/bsc/MSC_ConnectionHandler.ttcn</span><br><span>+++ b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>@@ -644,19 +644,42 @@</span><br><span>       expect_tsc := omit</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_create_chan_and_exp() runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_create_chan_and_exp(template (present) PDU_BSSAP exp_l3_compl := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on MSC_ConnHdlr {</span><br><span>   var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span>      var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_MO_CALL, mi));</span><br><span>   var octetstring l3_enc := enc_PDU_ML3_MS_NW(l3_info);</span><br><span>        var template uint3_t tsc := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+        timer T;</span><br><span> </span><br><span>         if (not istemplatekind(g_pars.expect_tsc, "omit")) {</span><br><span>               tsc := g_pars.expect_tsc;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(exp_l3_compl, "?")) {</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 := tr_BSSMAP_ComplL3(l3_enc, codec_list := omit);</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      exp_l3_compl := tr_BSSMAP_ComplL3(l3_enc, codec_list := ?);</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>  f_create_bssmap_exp(l3_enc);</span><br><span>         /* call helper function for CHAN_RQD -> IMM ASS ->EST_IND */</span><br><span>   RSL_Emulation.f_chan_est(g_pars.ra, l3_enc, g_pars.link_id, g_pars.fn, tsc);</span><br><span style="color: hsl(120, 100%, 40%);">+  /* wait for a COMPL_L3 from the BSC to ensure that the SCCP connection is up */</span><br><span style="color: hsl(120, 100%, 40%);">+       T.start(2.0);</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%);">+         setverdict(fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(120, 100%, 40%);">+             Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</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%);">+                setverdict(fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(120, 100%, 40%);">+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> }</span><br><span> </span><br><span> function f_rsl_send_l3(template PDU_ML3_MS_NW l3, template (omit) RslLinkId link_id := omit,</span><br><span>@@ -1214,25 +1237,6 @@</span><br><span>  f_ass_patch_lcls(ass_tpl, exp_ass_cpl);</span><br><span> </span><br><span>  f_create_chan_and_exp();</span><br><span style="color: hsl(0, 100%, 40%);">-        /* we should now have a COMPL_L3 at the MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  var template PDU_BSSAP exp_l3_compl;</span><br><span style="color: hsl(0, 100%, 40%);">-    exp_l3_compl := tr_BSSMAP_ComplL3()</span><br><span style="color: hsl(0, 100%, 40%);">-     if (g_pars.aoip == false) {</span><br><span style="color: hsl(0, 100%, 40%);">-             exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-       T.start;</span><br><span style="color: hsl(0, 100%, 40%);">-        alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSAP.receive(exp_l3_compl);</span><br><span style="color: hsl(0, 100%, 40%);">- [] BSSAP.receive(tr_BSSMAP_ComplL3) {</span><br><span style="color: hsl(0, 100%, 40%);">-           Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span> </span><br><span>        /* start ciphering, if requested */</span><br><span>  if (ispresent(g_pars.encr)) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26448">change 26448</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/+/26448"/><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: Ic675168e29919e1234cb49440c4a630238ff5d70 </div>
<div style="display:none"> Gerrit-Change-Number: 26448 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>