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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BTS_Tests.ttcn: introduce TC_ho_rach() for handover RACH<br><br>The idea of this test case (as can bee seen from its name) is to<br>verify handover RACH detection. What we basically do is:<br><br>1. Activate a logical channel on the BTS side (HO_SYNC for now);<br>2. Switch the MS (e.g. trxcon) to that channel without waiting<br>   for Immediate Assignment and sending Access Burst;<br>3. Send an Access Burst on that channel using RA = HO_REF;<br>4. Wait for RSL HANDOver DETected from the BTS;<br>5. Release a dedicated connection.<br><br>There is no way to verify if the Handover Reference received<br>from the MS matches the one that was sent to the BTS. We can<br>introduce a separate test case that would just send an Access<br>Burst with RA != HO_REF.<br><br>Change-Id: If2e8d9c9947823df62f4bcc9a7fcd20734ff7858<br>Depends on: (trxcon) Ia967820a536c99966ba2c60b63d2ea9edb093f46<br>---<br>M bts/BTS_Tests.ttcn<br>M library/RSL_Types.ttcn<br>2 files changed, 79 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index edf056a..ed1d8e1 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -1493,6 +1493,75 @@</span><br><span>     Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_TC_ho_rach(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       var GsmFrameNumber fn;</span><br><span style="color: hsl(120, 100%, 40%);">+        var RSL_Message rm;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_l1_tune(L1CTL);</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Generate a random Handover Reference */</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer ho_ref := oct2int(f_rnd_octstring(1));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Handover Reference IE (see 3GPP TS 48.058, 9.3.9) */</span><br><span style="color: hsl(120, 100%, 40%);">+       var RSL_IE ho_ref_ie := valueof(t_RSL_IE(RSL_IE_HANDO_REF,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    RSL_IE_Body:{ handover_ref := ho_ref }));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Activate a channel on the BTS side (no encryption) */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_rsl_chan_act(g_pars.chan_mode, more_ies := { ho_ref_ie },</span><br><span style="color: hsl(120, 100%, 40%);">+                  act_type := t_RSL_IE_ActType_HO_SYNC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Switch the MS side (e.g. trxcon) to a dedicated channel without</span><br><span style="color: hsl(120, 100%, 40%);">+     * waiting for Immediate Assignment and sending Access Burst */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_L1CTL_DM_EST_REQ(L1CTL, { false, mp_trx0_arfcn }, g_pars.chan_nr, 7);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Send handover Access Burst */</span><br><span style="color: hsl(120, 100%, 40%);">+      fn := f_L1CTL_RACH(L1CTL, ho_ref, chan_nr := g_pars.chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* TODO: test mismatching Handover Reference, and missing IE */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Wait for handover detection */</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 3.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%);">+ [] RSL.receive(tr_RSL_HANDO_DET(g_pars.chan_nr)) -> value rm {</span><br><span style="color: hsl(120, 100%, 40%);">+             log("Handover RACH has been detected: ", rm);</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%);">+     [] RSL.receive(tr_RSL_CHAN_RQD(?, ?, ?, ?)) -> value rm {</span><br><span style="color: hsl(120, 100%, 40%);">+          Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,</span><br><span style="color: hsl(120, 100%, 40%);">+                    log2str("RSL_CHAN_RQD was not expected: ", rm));</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL.receive { repeat; }</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,</span><br><span style="color: hsl(120, 100%, 40%);">+                    log2str("Timeout waiting for handover RACH: FN=", fn, " RA=", ho_ref));</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%);">+   /* Release the channel */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rsl_chan_deact();</span><br><span style="color: hsl(120, 100%, 40%);">+   f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);</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 handover RACH detection */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_rach() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        var ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   for (var integer i := 0; i < sizeof(g_AllChannels); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          pars := valueof(t_Pars(g_AllChannels[i], ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(120, 100%, 40%);">+              log(testcasename(), ": Starting for ", g_AllChannels[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+           vc_conn := f_start_handler(refers(f_TC_ho_rach), 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* TODO: do the above in parallel, rather than sequentially? */</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>  * Measurement Processing / Reporting</span><br><span>  ***********************************************************************/</span><br><span>@@ -5458,6 +5527,7 @@</span><br><span>         execute( TC_rach_content() );</span><br><span>        execute( TC_rach_count() );</span><br><span>  execute( TC_rach_max_ta() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_ho_rach() );</span><br><span>     execute( TC_rach_load_idle_thresh0() );</span><br><span>      execute( TC_rach_load_idle_below_thresh() );</span><br><span>         execute( TC_rach_load_count() );</span><br><span>diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn</span><br><span>index 7f37720..588dc4b 100644</span><br><span>--- a/library/RSL_Types.ttcn</span><br><span>+++ b/library/RSL_Types.ttcn</span><br><span>@@ -1476,6 +1476,15 @@</span><br><span>                       t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr})</span><br><span>           }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RSL_Message tr_RSL_HANDO_DET(template RslChannelNr chan_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template uint8_t acc_delay := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_type := RSL_MT_HANDO_DET,</span><br><span style="color: hsl(120, 100%, 40%);">+         ies := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tr_RSL_IE(RSL_IE_Body:{access_delay := acc_delay})</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>    /* COMMON CHANNEL MANAGEMENT MESSAGES */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14291">change 14291</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/+/14291"/><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: If2e8d9c9947823df62f4bcc9a7fcd20734ff7858 </div>
<div style="display:none"> Gerrit-Change-Number: 14291 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>