<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>