<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24564">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: test TSC in various messages<br><br>In a recent osmo-bsc patch:<br><br>"allow explixit TSC Set and TSC on chan activ / modif / assignment"<br>c33eb8d56943b8981523754b081967e6ff5f245d<br>Ic665125255d7354f5499d10dda1dd866ab243d24<br><br>I accidentally changed the default behavior of the Training Sequence<br>Code sent to BTS and MS. So now, make sure that we verify the expected<br>Training Sequence Code in BSC_Tests, in:<br><br>RSL Channel Activate<br>RR Immediate Assignment<br>RR Assignment Command<br>RR Channel Mode Modify<br>RSL Mode Modify<br><br>Related: OS#5172 SYS#5315<br>Change-Id: Id67a949e0f61ec8123976eb8d336f04510c55c01<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/MSC_ConnectionHandler.ttcn<br>M library/RSL_Emulation.ttcn<br>3 files changed, 76 insertions(+), 3 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/64/24564/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 6f603b1..9ea0269 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -684,6 +684,9 @@</span><br><span>       pars.exp_ms_power_level := mp_exp_ms_power_level;</span><br><span>    pars.mscpool.bssap_idx := bssap_idx;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      /* BTS 0 has BSIC 10 (and no explicit timeslot training_sequence_code config), so expecting TSC = (BSIC & 7) = 2 */</span><br><span style="color: hsl(120, 100%, 40%);">+       pars.expect_tsc := 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      return pars;</span><br><span> }</span><br><span> </span><br><span>diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>index ec90abe..c29ccd4 100644</span><br><span>--- a/bsc/MSC_ConnectionHandler.ttcn</span><br><span>+++ b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>@@ -590,7 +590,8 @@</span><br><span>     TestHdlrParamsMSCPool mscpool,</span><br><span>       boolean         media_mgw_offer_ipv6,</span><br><span>        OCT3            last_used_eutran_plmn optional,</span><br><span style="color: hsl(0, 100%, 40%);">- boolean         expect_channel_mode_modify</span><br><span style="color: hsl(120, 100%, 40%);">+    boolean         expect_channel_mode_modify,</span><br><span style="color: hsl(120, 100%, 40%);">+   uint3_t         expect_tsc optional</span><br><span> };</span><br><span> </span><br><span> /* Note: Do not use valueof() to get a value of this template, use</span><br><span>@@ -627,13 +628,19 @@</span><br><span>  },</span><br><span>   media_mgw_offer_ipv6 := true,</span><br><span>        last_used_eutran_plmn := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-  expect_channel_mode_modify := false</span><br><span style="color: hsl(120, 100%, 40%);">+   expect_channel_mode_modify := false,</span><br><span style="color: hsl(120, 100%, 40%);">+  expect_tsc := omit</span><br><span> }</span><br><span> </span><br><span> function f_create_chan_and_exp() 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 style="color: hsl(120, 100%, 40%);">+ var template uint3_t tsc := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (not istemplatekind(g_pars.expect_tsc, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                tsc := g_pars.expect_tsc;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </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>@@ -859,6 +866,14 @@</span><br><span> </span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function rr_chan_desc_tsc(ChannelDescription2_V cd2)</span><br><span style="color: hsl(120, 100%, 40%);">+  return uint3_t</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     var uint3_t tsc := oct2int(cd2.octet3);</span><br><span style="color: hsl(120, 100%, 40%);">+       tsc := tsc / 32; /* shl 5 */</span><br><span style="color: hsl(120, 100%, 40%);">+  return tsc;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> altstep as_assignment(inout AssignmentState st) runs on MSC_ConnHdlr {</span><br><span>   var RSL_Message rsl;</span><br><span>         [not st.rr_ass_cmpl_seen] RSL.receive(tr_RSL_DATA_REQ(g_chan_nr)) -> value rsl {</span><br><span>@@ -867,6 +882,16 @@</span><br><span>           if (ischosen(l3.msgs.rrm.assignmentCommand)) {</span><br><span>                       var RslChannelNr new_chan_nr;</span><br><span>                        var GsmArfcn arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (not istemplatekind(g_pars.expect_tsc, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                var uint3_t got_tsc := rr_chan_desc_tsc(l3.msgs.rrm.assignmentCommand.descrOf1stChAfterTime);</span><br><span style="color: hsl(120, 100%, 40%);">+                         if (not match(got_tsc, g_pars.expect_tsc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  setverdict(fail, "RR Assignment: unexpected TSC in Channel Description: expected ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                            g_pars.expect_tsc, " got ", got_tsc);</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%);">+</span><br><span>                  f_ChDesc2RslChanNr(l3.msgs.rrm.assignmentCommand.descrOf1stChAfterTime,</span><br><span>                                         new_chan_nr, arfcn);</span><br><span>                      /* FIXME: Determine TRX NR by ARFCN, instead of hard-coded TRX0! */</span><br><span>@@ -1264,6 +1289,32 @@</span><br><span>                                    " to signalling mode, but got spd_ind == ", rsl_spd_ind);</span><br><span>                       mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (not istemplatekind(g_pars.expect_tsc, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        var uint3_t got_tsc := rr_chan_desc_tsc(st.rr_channel_mode_modify_msg.msgs.rrm.channelModeModify.channelDescription);</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (not match(got_tsc, g_pars.expect_tsc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          setverdict(fail, "RR Channel Mode Modify: unexpected TSC in Channel Description: expected ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                           g_pars.expect_tsc, " got ", got_tsc);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* not exp_modify, so this did a Channel Activate */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Check the TSC */</span><br><span style="color: hsl(120, 100%, 40%);">+           if (not istemplatekind(g_pars.expect_tsc, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        var RSL_Message chan_act := f_rslem_get_last_act(RSL_PROC, 0, g_chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+                     var RSL_IE_Body ie;</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (f_rsl_find_ie(chan_act, RSL_IE_CHAN_IDENT, ie)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         var uint3_t got_tsc := ie.chan_ident.ch_desc.v.tsc;</span><br><span style="color: hsl(120, 100%, 40%);">+                           if (not match(got_tsc, g_pars.expect_tsc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  setverdict(fail, "RSL CHANnel ACTIVation: unexpected TSC in Channel Description: expected ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   g_pars.expect_tsc, " got ", got_tsc);</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%);">+             }</span><br><span>    }</span><br><span> </span><br><span>        /* When the BSC detects that LCLS is possible it will cross the</span><br><span>diff --git a/library/RSL_Emulation.ttcn b/library/RSL_Emulation.ttcn</span><br><span>index cb8b763..91fa2db 100644</span><br><span>--- a/library/RSL_Emulation.ttcn</span><br><span>+++ b/library/RSL_Emulation.ttcn</span><br><span>@@ -135,18 +135,37 @@</span><br><span> }</span><br><span> </span><br><span> /* establish a dedicated channel using 'ra' */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_chan_est(OCT1 ra, octetstring est_l3, template RslLinkId link_id, GsmFrameNumber fn := 23)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_chan_est(OCT1 ra, octetstring est_l3, template RslLinkId link_id, GsmFrameNumber fn := 23,</span><br><span style="color: hsl(120, 100%, 40%);">+               template uint3_t tsc := ?)</span><br><span> runs on RSL_DchanHdlr {</span><br><span>    var RSL_Message rx_rsl;</span><br><span>      var GsmRrMessage rr;</span><br><span> </span><br><span>     /* request a channel to be established */</span><br><span>    RSL.send(ts_RSLDC_ChanRqd(ra, fn));</span><br><span style="color: hsl(120, 100%, 40%);">+   /* At this point the BSC sends a CHAN ACTIV which we always ACK. Checking it below. */</span><br><span>       /* expect immediate assignment */</span><br><span>    rx_rsl := f_rx_or_fail(tr_RSL_IMM_ASSIGN);</span><br><span>   rr := dec_GsmRrMessage(rx_rsl.ies[1].body.full_imm_ass_info.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not match(rr.payload.imm_ass.chan_desc.tsc, tsc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Immediate Assignment: unexpected TSC in Channel Description: expected ", tsc, " got ",</span><br><span style="color: hsl(120, 100%, 40%);">+                     rr.payload.imm_ass.chan_desc.tsc);</span><br><span style="color: hsl(120, 100%, 40%);">+         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span>    g_chan_nr := rr.payload.imm_ass.chan_desc.chan_nr;</span><br><span>   RSL.send(ts_RSL_EST_IND(g_chan_nr, valueof(link_id), est_l3));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Check above CHAN ACTIV */</span><br><span style="color: hsl(120, 100%, 40%);">+  var RSL_Message chan_act := f_rslem_get_last_act(RSL_PROC, 0, g_chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+     var RSL_IE_Body ie;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (f_rsl_find_ie(chan_act, RSL_IE_CHAN_IDENT, ie)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         var uint3_t got_tsc := ie.chan_ident.ch_desc.v.tsc;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (not match(got_tsc, tsc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        setverdict(fail, "RSL CHANnel ACTIVation: unexpected TSC in Channel Description: expected ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                   tsc, " got ", got_tsc);</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> }</span><br><span> </span><br><span> function f_deact_chan(RSL_Cause cause) runs on RSL_DchanHdlr</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24564">change 24564</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/+/24564"/><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: Id67a949e0f61ec8123976eb8d336f04510c55c01 </div>
<div style="display:none"> Gerrit-Change-Number: 24564 </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>