<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19217">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: test RR Channel Release cause codes from Clear Command cause codes<br><br>Invoke Clear Command with various Cause codes and verify that the RR Channel<br>Release reflects them.<br><br>Depends: I734cc55c501d61bbdadee81a223b26f9df57f959 (osmo-bsc)<br>Change-Id: Ie6c99f28b610a67f2d59ec00b3541940e882251b<br>---<br>M bsc/BSC_Tests.ttcn<br>M library/GSM_RR_Types.ttcn<br>2 files changed, 89 insertions(+), 8 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 660e758..15d83da 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -1499,7 +1499,8 @@</span><br><span>                         boolean expect_rll_rel_req := true,</span><br><span>                          boolean handle_rll_rel := true,</span><br><span>                      boolean is_csfb := false,</span><br><span style="color: hsl(0, 100%, 40%);">-                       template CellSelIndValue csfb_expect_cells := omit</span><br><span style="color: hsl(120, 100%, 40%);">+                    template CellSelIndValue csfb_expect_cells := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                           template RR_Cause expect_rr_cause := ?</span><br><span>                       ) runs on test_CT {</span><br><span> </span><br><span>   var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));</span><br><span>@@ -1507,6 +1508,9 @@</span><br><span>    var boolean got_rr_chan_rel := false;</span><br><span>        var boolean got_rll_rel_req := false;</span><br><span>        var ASP_RSL_Unitdata ud;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RSL_IE_Body l3_ie;</span><br><span style="color: hsl(120, 100%, 40%);">+        var PDU_ML3_NW_MS l3;</span><br><span style="color: hsl(120, 100%, 40%);">+ var RR_Cause got_cause;</span><br><span>      log("f_expect_chan_rel() expecting: expect_deact_sacch=", expect_deact_sacch, " expect_rr_chan_rel=", expect_rr_chan_rel,</span><br><span>            " expect_rll_rel_req=", expect_rll_rel_req);</span><br><span>   alt {</span><br><span>@@ -1517,13 +1521,13 @@</span><br><span>      [is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE_CSFB))) -> value ud {</span><br><span>          got_rr_chan_rel := true;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+          if (f_rsl_find_ie(ud.rsl, RSL_IE_L3_INFO, l3_ie) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  setverdict(fail, "cannot find L3");</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%);">+             l3 := dec_PDU_ML3_NW_MS(l3_ie.l3_info.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>            if (not istemplatekind(csfb_expect_cells, "omit")) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  var RSL_IE_Body l3_ie;</span><br><span style="color: hsl(0, 100%, 40%);">-                  if (f_rsl_find_ie(ud.rsl, RSL_IE_L3_INFO, l3_ie) == false) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            setverdict(fail, "cannot find L3");</span><br><span style="color: hsl(0, 100%, 40%);">-                           mtc.stop;</span><br><span style="color: hsl(0, 100%, 40%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-                       var PDU_ML3_NW_MS l3 := dec_PDU_ML3_NW_MS(l3_ie.l3_info.payload);</span><br><span>                    var CellSelIndValue cells := dec_CellSelIndValue(</span><br><span>                            l3.msgs.rrm.channelRelease.cellSelectionIndicator.cellSelectionIndicatorValue);</span><br><span> </span><br><span>@@ -1535,10 +1539,38 @@</span><br><span>                                setverdict(fail, "Received CSFB cells list on RR Channel Release does not match expectations");</span><br><span>                    }</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (not istemplatekind(expect_rr_cause, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  int2enum(oct2int(l3.msgs.rrm.channelRelease.rRCause.valuePart), got_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+                   log("GOT CAUSE CODE: ", l3.msgs.rrm.channelRelease.rRCause.valuePart, " = ", got_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (match(got_cause, expect_rr_cause)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              log("EXPECTED CAUSE CODE: ", expect_rr_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+                              setverdict(fail, "Received RR Channel Release Cause code does not match expectations");</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            repeat;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       [not is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [not is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE))) -> value ud {</span><br><span>           got_rr_chan_rel := true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            if (not istemplatekind(expect_rr_cause, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (f_rsl_find_ie(ud.rsl, RSL_IE_L3_INFO, l3_ie) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          setverdict(fail, "cannot find L3");</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%);">+                     l3 := dec_PDU_ML3_NW_MS(l3_ie.l3_info.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     int2enum(oct2int(l3.msgs.rrm.channelRelease.rRCause.valuePart), got_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+                   log("GOT CAUSE CODE: ", l3.msgs.rrm.channelRelease.rRCause.valuePart, " = ", got_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (match(got_cause, expect_rr_cause)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              log("EXPECTED CAUSE CODE: ", expect_rr_cause);</span><br><span style="color: hsl(120, 100%, 40%);">+                              setverdict(fail, "Received RR Channel Release Cause code does not match expectations");</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            repeat;</span><br><span>      }</span><br><span>    [] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_REL_REQ(rsl_chan_nr, ?))) {</span><br><span>@@ -1688,6 +1720,34 @@</span><br><span>         setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_chan_rel_rr_cause(myBSSMAP_Cause clear_cmd_cause, template RR_Cause expect_rr_cause)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    var DchanTuple dt;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  dt := f_est_dchan('23'O, 23, '00010203040506'O);</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_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(enum2int(clear_cmd_cause))));</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</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_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, expect_rr_cause := expect_rr_cause);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Test that Clear Command cause codes affect the RR Channel Release cause code */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_chan_rel_rr_cause() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init(1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_tc_chan_rel_rr_cause(GSM0808_CAUSE_CALL_CONTROL, GSM48_RR_CAUSE_NORMAL);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_tc_chan_rel_rr_cause(GSM0808_CAUSE_HANDOVER_SUCCESSFUL, GSM48_RR_CAUSE_NORMAL);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_tc_chan_rel_rr_cause(GSM0808_CAUSE_PREEMPTION, GSM48_RR_CAUSE_PREMPTIVE_REL);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_tc_chan_rel_rr_cause(GSM0808_CAUSE_RADIO_INTERFACE_MESSAGE_FAILURE, GSM48_RR_CAUSE_PROT_ERROR_UNSPC);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_tc_chan_rel_rr_cause(GSM0808_CAUSE_RADIO_INTERFACE_FAILURE, GSM48_RR_CAUSE_ABNORMAL_UNSPEC);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_tc_chan_rel_rr_cause(GSM0808_CAUSE_EQUIPMENT_FAILURE, GSM48_RR_CAUSE_ABNORMAL_UNSPEC);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test behavior if RSL EST IND for non-active channel */</span><br><span> testcase TC_rll_est_ind_inact_lchan() runs on test_CT {</span><br><span>        timer T := 2.0;</span><br><span>@@ -6231,6 +6291,7 @@</span><br><span>      execute( TC_chan_rel_hard_rlsd_ms_dead() );</span><br><span>  execute( TC_chan_rel_a_reset() );</span><br><span>    execute( TC_chan_rel_sccp_tiar_timeout() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_chan_rel_rr_cause() );</span><br><span> </span><br><span>       execute( TC_outbound_connect() );</span><br><span> </span><br><span>diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn</span><br><span>index e54bc92..2c607a7 100644</span><br><span>--- a/library/GSM_RR_Types.ttcn</span><br><span>+++ b/library/GSM_RR_Types.ttcn</span><br><span>@@ -113,6 +113,26 @@</span><br><span>                INTERSYS_TO_EUTRAN_HO_CMD       ('01100110'B)</span><br><span>        } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    type enumerated RR_Cause {</span><br><span style="color: hsl(120, 100%, 40%);">+            GSM48_RR_CAUSE_NORMAL           ('00'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_ABNORMAL_UNSPEC  ('01'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_ABNORMAL_UNACCT  ('02'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_ABNORMAL_TIMER   ('03'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_ABNORMAL_NOACT   ('04'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_PREMPTIVE_REL    ('05'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_HNDOVER_IMP      ('08'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_CHAN_MODE_UNACCT ('09'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_FREQ_NOT_IMPL    ('0a'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_CALL_CLEARED     ('41'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_SEMANT_INCORR    ('5f'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_INVALID_MAND_INF ('60'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_MSG_TYPE_N       ('61'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_MSG_TYPE_N_COMPAT('62'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_COND_IE_ERROR    ('64'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_NO_CELL_ALLOC_A  ('65'O),</span><br><span style="color: hsl(120, 100%, 40%);">+              GSM48_RR_CAUSE_PROT_ERROR_UNSPC ('6f'O)</span><br><span style="color: hsl(120, 100%, 40%);">+       } with { variant "FIELDLENGTH(8)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     type octetstring RestOctets  with { variant "PADDING(yes), PADDING_PATTERN('00101011'B)" };</span><br><span>        type hexstring GsmBcdString with { variant "HEXORDER(low)" };</span><br><span>      type GsmBcdString BcdMccMnc with { variant "FIELDLENGTH(6)" };</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19217">change 19217</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/+/19217"/><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: Ie6c99f28b610a67f2d59ec00b3541940e882251b </div>
<div style="display:none"> Gerrit-Change-Number: 19217 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </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: laforge <laforge@osmocom.org> </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>