<p>fixeria <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15410">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  osmith: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU_Tests_RAW.ttcn: introduce TC_ta_rach_imm_ass to test initial TA<br><br>The aim of this test case is to test the correctness of Timing Advance<br>at the time of TBF establishment. In particular, the test case sends<br>several Access Bursts (RACH.ind) with increasing 'qta' value, what<br>causes OsmoPCU to allocate a TBF (Temporary Block Flow) for each<br>RACH.ind and send DATA.req with Immediate Assignment on AGCH,<br>containing the expected Timing Advance value.<br><br>Change-Id: I21f76ae723519c0eb54515922a05ca8045b00ade<br>Related: SYS#4606<br>---<br>M pcu/PCU_Tests_RAW.ttcn<br>1 file changed, 78 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index 8424df3..fa464a3 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -7,6 +7,7 @@</span><br><span>    those NS and BSSGP implementations on the BSS (PCU) side. */</span><br><span> </span><br><span> /* (C) 2018-2019 Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2019 Vadim Yanitskiy <axilirator@gmail.com></span><br><span>  * All rights reserved.</span><br><span>  *</span><br><span>  * Released under the terms of GNU General Public License, Version 2 or</span><br><span>@@ -519,6 +520,82 @@</span><br><span>        BTS.receive(tr_RAW_PCU_EV(BTS_EV_SI13_NEGO));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: properly encode RA (see TS 24.060, table 11.2.5.2) */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_establish_tbf(out GsmRrMessage rr_imm_ass, uint8_t bts_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                            uint16_t ra := oct2int('3A'O), uint8_t is_11bit := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 PCUIF_BurstType burst_type := BURST_TYPE_0,</span><br><span style="color: hsl(120, 100%, 40%);">+                           TimingAdvance ta := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT return boolean {</span><br><span style="color: hsl(120, 100%, 40%);">+     var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+    var GsmRrMessage rr_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+      var uint32_t fn;</span><br><span style="color: hsl(120, 100%, 40%);">+      timer T;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* FIXME: ask the BTS component to give us the current TDMA fn */</span><br><span style="color: hsl(120, 100%, 40%);">+     fn := 1337 + ta;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Send RACH.ind */</span><br><span style="color: hsl(120, 100%, 40%);">+   log("Sending RACH.ind on fn=", fn, " with RA=", ra, ", TA=", ta);</span><br><span style="color: hsl(120, 100%, 40%);">+       BTS.send(ts_PCUIF_RACH_IND(bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                             ra := ra, is_11bit := is_11bit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               burst_type := burst_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                             fn := fn, arfcn := 871,</span><br><span style="color: hsl(120, 100%, 40%);">+                               qta := ta * 4));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Expect Immediate (TBF) Assignment on TS0/AGCH */</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%);">+ [] BTS.receive(tr_PCUIF_DATA_REQ(bts_nr := bts_nr, trx_nr := ?, ts_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    sapi := PCU_IF_SAPI_AGCH, data := ?))</span><br><span style="color: hsl(120, 100%, 40%);">+                                        -> value pcu_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+         rr_imm_ass := dec_GsmRrMessage(pcu_msg.u.data_req.data);</span><br><span style="color: hsl(120, 100%, 40%);">+              log("Rx Immediate Assignment: ", rr_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Make sure this assignment is for us</span><br><span style="color: hsl(120, 100%, 40%);">+                 * TODO: Uplink or Downlink TBF? */</span><br><span style="color: hsl(120, 100%, 40%);">+           if (match(rr_imm_ass, tr_IMM_TBF_ASS(?, ra, fn))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return true;</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%);">+           /* Not for us? Wait for more. */</span><br><span style="color: hsl(120, 100%, 40%);">+              repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BTS.receive { repeat; }</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 Immediate Assignment");</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%);">+   return false;</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 of correct Timing Advance at the time of TBF establishment</span><br><span style="color: hsl(120, 100%, 40%);">+ * (derived from timing offset of the Access Burst). */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ta_rach_imm_ass() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var GsmRrMessage rr_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+      var boolean ok;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* We cannot send too many TBF requests in a short time because</span><br><span style="color: hsl(120, 100%, 40%);">+        * at some point the PCU will fail to allocate a new TBF. */</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var TimingAdvance ta := 0; ta < 64; ta := ta + 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Establish an Uplink TBF (send RACH.ind with current TA) */</span><br><span style="color: hsl(120, 100%, 40%);">+         ok := f_establish_tbf(rr_msg, bts_nr := 0, ta := ta);</span><br><span style="color: hsl(120, 100%, 40%);">+         if (not ok) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 setverdict(fail, "Failed to establish an Uplink TBF");</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%);">+           /* Make sure Timing Advance IE matches out expectations */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (match(rr_msg, tr_IMM_TBF_ASS(dl := false, ta := ta))) {</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%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> control {</span><br><span>      execute( TC_ns_reset() );</span><br><span>@@ -531,6 +608,7 @@</span><br><span>      execute( TC_ns_so_block() );</span><br><span> </span><br><span>     execute( TC_pcuif_suspend() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_ta_rach_imm_ass() );</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/+/15410">change 15410</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/+/15410"/><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: I21f76ae723519c0eb54515922a05ca8045b00ade </div>
<div style="display:none"> Gerrit-Change-Number: 15410 </div>
<div style="display:none"> Gerrit-PatchSet: 11 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>