<p>fixeria <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15526">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: add test case for UL link quality adaptation<br><br>This change introduces a new test case TC_cs_lqual_ul_tbf, which<br>is aimed to test the feedback of OsmoPCU on changing link quality<br>measurements in Uplink Data blocks during an active TBF.<br><br>Change-Id: Ia78d93e43a3c41b0b30e70df20a2da31077fd05f<br>Related: SYS#4607<br>---<br>M library/RLCMAC_Types.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>2 files changed, 102 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/RLCMAC_Types.ttcn b/library/RLCMAC_Types.ttcn</span><br><span>index f3deafc..39c0c97 100644</span><br><span>--- a/library/RLCMAC_Types.ttcn</span><br><span>+++ b/library/RLCMAC_Types.ttcn</span><br><span>@@ -312,7 +312,7 @@</span><br><span>                  mac_hdr := {</span><br><span>                                 payload_type := (MAC_PT_RLCMAC_NO_OPT, MAC_PT_RLCMAC_OPT),</span><br><span>                           rrbp:= ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                               rrbp_valid := true,</span><br><span style="color: hsl(120, 100%, 40%);">+                           rrbp_valid := ?,</span><br><span>                             usf := ?</span><br><span>                     },</span><br><span>                   opt := *,</span><br><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index fa464a3..7e6611d 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -21,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>@@ -596,6 +599,103 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Default link quality adaptation (Coding Scheme) ranges:</span><br><span style="color: hsl(120, 100%, 40%);">+/* CS1: ... 6 dB, CS2: 5 .. 8 dB, CS3: 7 .. 13 db, CS4: 12 ... dB */</span><br><span style="color: hsl(120, 100%, 40%);">+private template integer CS1_lqual_dB_range := (-infinity .. 6);</span><br><span style="color: hsl(120, 100%, 40%);">+private template integer CS2_lqual_dB_range := (5 .. 8);</span><br><span style="color: hsl(120, 100%, 40%);">+private template integer CS3_lqual_dB_range := (7 .. 13);</span><br><span style="color: hsl(120, 100%, 40%);">+private template integer CS4_lqual_dB_range := (12 .. infinity);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_cs_lqual_ul_tbf() 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 RlcmacDlBlock dl_block;</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 octetstring data;</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%);">+ /* Establish an Uplink TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+ ok := f_establish_tbf(rr_msg);</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 we received an UL TBF Assignment */</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%);">+      if (match(rr_msg, tr_IMM_TBF_ASS(dl := false, 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 Uplink TBF assignment: ", 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 UL 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%);">+   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%);">+       /* HACK: patch missing TLLI; otherwise OsmoPCU rejects DATA.req */</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%);">+   /* 16 UL blocks (0 .. 32 dB, step = 2 dB) */</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, random 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(10))) };</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%);">+          data := enc_RlcmacUlBlock(valueof(ul_data));</span><br><span style="color: hsl(120, 100%, 40%);">+          data := f_pad_oct(data, 23, '00'O); /* CS-1 */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Link quality in dB and our CS1-4 expectations */</span><br><span style="color: hsl(120, 100%, 40%);">+           var integer lqual := i * 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */</span><br><span style="color: hsl(120, 100%, 40%);">+              log("Sending DATA.ind with link quality (dB): ", lqual);</span><br><span style="color: hsl(120, 100%, 40%);">+            BTS.send(ts_PCUIF_DATA_IND(bts_nr := 0, trx_nr := 0, ts_nr := 7, block_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          sapi := PCU_IF_SAPI_PDTCH, data := data,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      fn := 0, arfcn := 871, lqual_cb := lqual * 10));</span><br><span style="color: hsl(120, 100%, 40%);">+           BTS.receive(tr_RAW_PCU_EV(TDMA_EV_PDTCH_BLOCK_SENT));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Enqueue RTS.req, expect DATA.req with 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, fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   arfcn := 871, block_nr := 0));</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%);">+                                         sapi := PCU_IF_SAPI_PDTCH)) -> value pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+                dl_block := dec_RlcmacDlBlock(pcu_msg.u.data_req.data);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (not match(dl_block, tr_RLCMAC_ACK_NACK(ul_tfi := ?, tlli := ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        setverdict(fail, "Failed to match Packet Uplink ACK / NACK");</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%);">+           log("Rx Packet Uplink ACK / NACK with Channel Coding Command: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Match the received Channel Coding Command */</span><br><span style="color: hsl(120, 100%, 40%);">+               var template ChCodingCommand ch_coding;</span><br><span style="color: hsl(120, 100%, 40%);">+               select (lqual) {</span><br><span style="color: hsl(120, 100%, 40%);">+              case (CS1_lqual_dB_range) { ch_coding := CH_CODING_CS1; }</span><br><span style="color: hsl(120, 100%, 40%);">+             case (CS2_lqual_dB_range) { ch_coding := CH_CODING_CS2; }</span><br><span style="color: hsl(120, 100%, 40%);">+             case (CS3_lqual_dB_range) { ch_coding := CH_CODING_CS3; }</span><br><span style="color: hsl(120, 100%, 40%);">+             case (CS4_lqual_dB_range) { ch_coding := CH_CODING_CS4; }</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%);">+           if (not match(dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd, ch_coding)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(fail, "Channel Coding does not match our expectations: ", ch_coding);</span><br><span style="color: hsl(120, 100%, 40%);">+            } else {</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>@@ -609,6 +709,7 @@</span><br><span> </span><br><span>  execute( TC_pcuif_suspend() );</span><br><span>       execute( TC_ta_rach_imm_ass() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_cs_lqual_ul_tbf() );</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: 4 </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>