<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15526">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: PCU_Tests_RAW.ttcn: introduce test case for TBF Timing Advance<br><br>Change-Id: Ia78d93e43a3c41b0b30e70df20a2da31077fd05f<br>---<br>M pcu/PCU_Tests_RAW.ttcn<br>1 file changed, 93 insertions(+), 1 deletion(-)<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/26/15526/1</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 1312a2f..fedb604 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>@@ -20,6 +21,9 @@</span><br><span> import from GSM_Types all;</span><br><span> import from GSM_RR_Types all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from RLCMAC_CSN1_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RLCMAC_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> import from NS_Types all;</span><br><span> import from BSSGP_Types all;</span><br><span> import from Osmocom_Gb_Types all;</span><br><span>@@ -535,7 +539,7 @@</span><br><span>          * at some point the PCU will fail to allocate a new TBF. */</span><br><span>         for (var integer ta := 0; ta < 64; ta := ta + 16) {</span><br><span>               /* Send an Access Burst (8-bit) on TS0.</span><br><span style="color: hsl(0, 100%, 40%);">-          * FIXME: properly encode RA (see 3GPP TS 04.08, table 9.9),</span><br><span style="color: hsl(120, 100%, 40%);">+           * FIXME: properly encode RA (see 3GPP TS 04.08, table 9.9 and TS 24.060, table 11.2.5.2),</span><br><span>            * TODO: ask the BTS component to give us the current TDMA fn */</span><br><span>             log("Sending RACH.ind with TA=", ta);</span><br><span>              BTS.send(ts_PCUIF_RACH_IND(bts_nr := 0, ra := oct2int('3A'O), is_11bit := 0,</span><br><span>@@ -574,6 +578,93 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ta_tbf_tuwat() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var PacketUlAssign ul_tbf_ass;</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%);">+      timer T := 2.0;</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%);">+ /* Ask for an UL TBF by sending an Access Burst (8-bit) on TS0.</span><br><span style="color: hsl(120, 100%, 40%);">+        * TODO: ask the BTS component to give us the current TDMA fn */</span><br><span style="color: hsl(120, 100%, 40%);">+      BTS.send(ts_PCUIF_RACH_IND(bts_nr := 0, ra := oct2int('3A'O), is_11bit := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                             burst_type := BURST_TYPE_0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   fn := 1337, arfcn := 871));</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;</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 := 0, trx_nr := 0, ts_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         sapi := PCU_IF_SAPI_AGCH, data := ?)) -> value pcu_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* FIXME: we cannot use decmatch here because the data comes with padding */</span><br><span style="color: hsl(120, 100%, 40%);">+          rr_msg := dec_GsmRrMessage(pcu_msg.u.data_req.data);</span><br><span style="color: hsl(120, 100%, 40%);">+          log("Rx DATA.req from OsmoPCU: ", rr_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          T.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Make sure the received data is an UL TBF Assignment */</span><br><span style="color: hsl(120, 100%, 40%);">+             if (match(rr_msg, tr_IMM_TBF_ASS(dl := false, ra := oct2int('3A'O),</span><br><span style="color: hsl(120, 100%, 40%);">+                                            rest := tr_IaRestOctets_ULAss(?)))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        ul_tbf_ass := rr_msg.payload.imm_ass.rest_octets.hh.pa.uldl.ass.ul;</span><br><span style="color: hsl(120, 100%, 40%);">+                   log("Rx Immediate Assignment (UL TBF): ", ul_tbf_ass);</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%);">+                      setverdict(fail, "Failed to match Immediate (TBF) Assignment");</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%);">+     [] 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%);">+               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%);">+   /* TODO: check if we got single or dynamic assignment */</span><br><span style="color: hsl(120, 100%, 40%);">+      var octetstring pkt_res_req_enc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    var template (value) RlcmacUlBlock ul_data := t_RLCMAC_UL_DATA(</span><br><span style="color: hsl(120, 100%, 40%);">+               tfi := ul_tbf_ass.dynamic.tfi_assignment,</span><br><span style="color: hsl(120, 100%, 40%);">+             cv := 15, /* 15 UL blocks to be sent (to be overridden in loop) */</span><br><span style="color: hsl(120, 100%, 40%);">+            bsn := 0, /* TODO: what should be here? */</span><br><span style="color: hsl(120, 100%, 40%);">+            blocks := { /* To be generated in loop */ }</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%);">+  /* HACK: patch missing TLLI */</span><br><span style="color: hsl(120, 100%, 40%);">+        ul_data.data.tlli := '00000001'O;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   for (var integer i := 0; i < 16; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Prepare a new UL block (CV, payload) */</span><br><span style="color: hsl(120, 100%, 40%);">+            ul_data.data.mac_hdr.countdown := (15 - i);</span><br><span style="color: hsl(120, 100%, 40%);">+           ul_data.data.blocks := { valueof(t_RLCMAC_LLCBLOCK(f_rnd_octstring(23))) };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Encode the payload of DATA.ind */</span><br><span style="color: hsl(120, 100%, 40%);">+          pkt_res_req_enc := enc_RlcmacUlBlock(valueof(ul_data));</span><br><span style="color: hsl(120, 100%, 40%);">+               pkt_res_req_enc := f_pad_oct(pkt_res_req_enc, 34, '00'O); /* CS-2 */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                /* TODO: derive block number from the current TDMA frame number */</span><br><span style="color: hsl(120, 100%, 40%);">+            BTS.send(ts_PCUIF_DATA_IND(bts_nr := 0, trx_nr := 0, ts_nr := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         block_nr := i, sapi := PCU_IF_SAPI_PDTCH,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     data := pkt_res_req_enc,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      fn := 1337 + i * 4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           arfcn := 871));</span><br><span style="color: hsl(120, 100%, 40%);">+            /* TODO: implement block start notifications from the BTS component */</span><br><span style="color: hsl(120, 100%, 40%);">+                f_sleep(4.615 * 4.0 / 1000.0); /* ... wait ~4 frames for now */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Send RTS.req, expect UL ACK from the PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+                BTS.send(ts_PCUIF_RTS_REQ(bts_nr := 0, trx_nr := 0, ts_nr := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         sapi := PCU_IF_SAPI_PDTCH,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    fn := 1337 + i * 4, arfcn := 871,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     block_nr := i));</span><br><span style="color: hsl(120, 100%, 40%);">+            BTS.receive(tr_PCUIF_DATA_REQ(bts_nr := 0, trx_nr := 0, ts_nr := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         block_nr := i, fn := 1337 + i * 4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            sapi := PCU_IF_SAPI_PDTCH)) -> value pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* TODO: Packet Uplink ACK / NACK may contain optional Timing Advance field */</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>@@ -587,6 +678,7 @@</span><br><span> </span><br><span>  execute( TC_pcuif_suspend() );</span><br><span>       execute( TC_ta_init_prach() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_ta_tbf_tuwat() );</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/+/15526">change 15526</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/+/15526"/><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: Ia78d93e43a3c41b0b30e70df20a2da31077fd05f </div>
<div style="display:none"> Gerrit-Change-Number: 15526 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>