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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu/GPRS_Components: allow passing/matching of TS/TRX/BTS/BLK numbers<br><br>This change will facilitate adding test cases for multi-slot TBF<br>allocation across several TS and/or TRX instances of a BTS.<br><br>Change-Id: I9bff9e912bf73ad6259946a6ea5b08f3e2f728c8<br>Related: OS#4756<br>---<br>M pcu/GPRS_Components.ttcn<br>1 file changed, 84 insertions(+), 39 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn</span><br><span>index ee2c38f..2807b92 100644</span><br><span>--- a/pcu/GPRS_Components.ttcn</span><br><span>+++ b/pcu/GPRS_Components.ttcn</span><br><span>@@ -44,6 +44,32 @@</span><br><span> import from Native_Functions all;</span><br><span> import from SGSN_Components all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type record TsTrxBtsNum {</span><br><span style="color: hsl(120, 100%, 40%);">+       uint3_t         ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+        uint3_t         trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t         bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t         blk_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%);">+template (value) TsTrxBtsNum ts_TsTrxBtsNum(uint3_t ts_nr := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     uint3_t trx_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          uint8_t bts_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          uint8_t blk_nr := 0) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+       trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     blk_nr := blk_nr</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+template TsTrxBtsNum tr_TsTrxBtsNum(template uint3_t ts_nr := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    template uint3_t trx_nr := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 template uint8_t bts_nr := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 template uint8_t blk_nr := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+       trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     blk_nr := blk_nr</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type union PacketDlAssignChan {</span><br><span>    PacketDlAssign          ccch,</span><br><span>        PacketDlAssignment      pacch</span><br><span>@@ -281,12 +307,13 @@</span><br><span> }</span><br><span> </span><br><span> function f_ms_rx_pkt_ass_pacch(inout GprsMS ms, out uint32_t poll_fn,</span><br><span style="color: hsl(0, 100%, 40%);">-                        template RlcmacDlBlock t_pkt_ass := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+                        template RlcmacDlBlock t_pkt_ass := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                        template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT return RlcmacDlBlock {</span><br><span>  var RlcmacDlBlock dl_block;</span><br><span>  var uint32_t dl_fn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block(dl_block, dl_fn, nr := nr);</span><br><span>     if (not match(dl_block, t_pkt_ass)) {</span><br><span>                setverdict(fail, "Failed to match Packet Assignment:", t_pkt_ass);</span><br><span>                 f_shutdown(__BFILE__, __LINE__);</span><br><span>@@ -311,30 +338,34 @@</span><br><span>     return dl_block;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_ms_establish_ul_tbf(inout GprsMS ms)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ms_establish_ul_tbf(inout GprsMS ms, template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>    var GsmRrMessage rr_imm_ass;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        rr_imm_ass := f_pcuif_tx_rach_rx_imm_ass(ms.ra, ms.ra_is_11bit, ms.burst_type, ms.ta);</span><br><span style="color: hsl(120, 100%, 40%);">+        rr_imm_ass := f_pcuif_tx_rach_rx_imm_ass(ms.ra, ms.ra_is_11bit, ms.burst_type, ms.ta, nr := nr);</span><br><span>     ms.ul_tbf := f_ultbf_new_from_rr_imm_ass(rr_imm_ass);</span><br><span> }</span><br><span> </span><br><span> function f_ms_exp_dl_tbf_ass_ccch(inout GprsMS ms, template PCUIF_Sapi sapi := PCU_IF_SAPI_AGCH,</span><br><span style="color: hsl(0, 100%, 40%);">-                                template GsmRrMessage t_imm_ass := tr_IMM_TBF_ASS(true, ?, ?))</span><br><span style="color: hsl(120, 100%, 40%);">+                                template GsmRrMessage t_imm_ass := tr_IMM_TBF_ASS(true, ?, ?),</span><br><span style="color: hsl(120, 100%, 40%);">+                                template (present) TsTrxBtsNum nr := tr_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>  var GsmRrMessage rr_imm_ass;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        rr_imm_ass := f_pcuif_rx_imm_ass(sapi, t_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+    rr_imm_ass := f_pcuif_rx_imm_ass(sapi, t_imm_ass, nr := nr);</span><br><span>         ms.dl_tbf := f_dltbf_new_from_rr_imm_ass(rr_imm_ass, tr_PacketDlAssign(ms.tlli));</span><br><span> }</span><br><span> </span><br><span> /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_ms_tx_data_ind(inout GprsMS ms, octetstring data, uint32_t fn := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ms_tx_data_ind(inout GprsMS ms, octetstring data, uint32_t fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                    template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-       f_pcuif_tx_data_ind(data, ms.lqual_cb, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_pcuif_tx_data_ind(data, ms.lqual_cb, fn, nr := nr);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_ms_tx_ul_block(inout GprsMS ms, template (value) RlcmacUlBlock ul_data, uint32_t fn := 0, template (omit) CodingScheme force_cs_mcs := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ms_tx_ul_block(inout GprsMS ms, template (value) RlcmacUlBlock ul_data,</span><br><span style="color: hsl(120, 100%, 40%);">+                       uint32_t fn := 0, template (omit) CodingScheme force_cs_mcs := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT return integer {</span><br><span>     var octetstring data;</span><br><span>        var integer padding_len;</span><br><span>@@ -362,12 +393,14 @@</span><br><span>     data := f_pad_oct(data, cs_mcs_len, '00'O);</span><br><span> </span><br><span>      /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */</span><br><span style="color: hsl(0, 100%, 40%);">-        f_ms_tx_data_ind(ms, data, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ms_tx_data_ind(ms, data, fn, nr := nr);</span><br><span>    return padding_len;</span><br><span> }</span><br><span> </span><br><span> /* FIXME: Only supports sending CS-1 so far */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_ms_tx_ul_data_block(inout GprsMS ms, octetstring payload, uint4_t cv := 15, boolean with_tlli := false, uint32_t fn := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ms_tx_ul_data_block(inout GprsMS ms, octetstring payload,</span><br><span style="color: hsl(120, 100%, 40%);">+                             uint4_t cv := 15, boolean with_tlli := false, uint32_t fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                               template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT return integer {</span><br><span>        var template (value) RlcmacUlBlock ul_data;</span><br><span>  ul_data := t_RLCMAC_UL_DATA(tfi := ms.ul_tbf.tfi,</span><br><span>@@ -379,11 +412,12 @@</span><br><span>            ul_data.data.tlli := ms.tlli;</span><br><span>        }</span><br><span>    f_ultbf_inc_bsn(ms.ul_tbf);</span><br><span style="color: hsl(0, 100%, 40%);">-     return f_ms_tx_ul_block(ms, ul_data, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+     return f_ms_tx_ul_block(ms, ul_data, fn, nr := nr);</span><br><span> }</span><br><span> </span><br><span> /* Send random payload for last "num_blocks" blocks in Ul TBF (ending with CV=0). */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_ms_tx_ul_data_block_multi(inout GprsMS ms, integer num_blocks := 1, boolean with_tlli := false)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ms_tx_ul_data_block_multi(inout GprsMS ms, integer num_blocks := 1, boolean with_tlli := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                               template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT return octetstring {</span><br><span>      var octetstring total_payload := ''O;</span><br><span> </span><br><span>@@ -395,7 +429,7 @@</span><br><span>              if (cv > g_bs_cv_max) {</span><br><span>                   cv := 15;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-               padding_len :=  f_ms_tx_ul_data_block(ms, payload, cv := cv, with_tlli := with_tlli)</span><br><span style="color: hsl(120, 100%, 40%);">+          padding_len := f_ms_tx_ul_data_block(ms, payload, cv := cv, with_tlli := with_tlli, nr := nr);</span><br><span>               total_payload := total_payload & payload & f_pad_oct(''O, padding_len, '00'O);</span><br><span>       }</span><br><span>    return total_payload;</span><br><span>@@ -494,11 +528,12 @@</span><br><span> }</span><br><span> </span><br><span> ////////////////////////</span><br><span style="color: hsl(0, 100%, 40%);">-// OLD APIs</span><br><span style="color: hsl(120, 100%, 40%);">+// Low level APIs</span><br><span> ////////////////////////</span><br><span> </span><br><span> function f_pcuif_rx_imm_ass(template PCUIF_Sapi sapi := PCU_IF_SAPI_AGCH,</span><br><span style="color: hsl(0, 100%, 40%);">-                       template GsmRrMessage t_imm_ass := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+                         template GsmRrMessage t_imm_ass := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                         template (present) TsTrxBtsNum nr := tr_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT return GsmRrMessage {</span><br><span>    var GsmRrMessage rr_imm_ass;</span><br><span>         var PCUIF_Message pcu_msg;</span><br><span>@@ -507,7 +542,7 @@</span><br><span> </span><br><span>         T.start(2.0);</span><br><span>        alt {</span><br><span style="color: hsl(0, 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%);">+        [] BTS.receive(tr_PCUIF_DATA_REQ(nr.bts_nr, nr.trx_nr, ts_nr := 0,</span><br><span>                                    sapi := sapi, data := ?)) -> value pcu_msg {</span><br><span>             /* On PCH the payload is prefixed with paging group (3 octets): skip it.</span><br><span>              * TODO: add an additional template parameter, so we can match it. */</span><br><span>@@ -549,7 +584,8 @@</span><br><span> function f_pcuif_tx_rach_rx_imm_ass(uint16_t ra := bit2int(chan_req_def),</span><br><span>                                 uint8_t is_11bit := 0,</span><br><span>                               PCUIF_BurstType burst_type := BURST_TYPE_0,</span><br><span style="color: hsl(0, 100%, 40%);">-                             TimingAdvance ta := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                                TimingAdvance ta := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT return GsmRrMessage {</span><br><span>      var uint32_t fn;</span><br><span> </span><br><span>@@ -558,7 +594,7 @@</span><br><span> </span><br><span>       /* Send RACH.ind */</span><br><span>  log("Sending RACH.ind on fn=", fn, " with RA=", ra, ", TA=", ta);</span><br><span style="color: hsl(0, 100%, 40%);">- BTS.send(ts_PCUIF_RACH_IND(bts_nr := 0, trx_nr := 0, ts_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+      BTS.send(ts_PCUIF_RACH_IND(nr.bts_nr, nr.trx_nr, ts_nr := 0,</span><br><span>                                    ra := ra, is_11bit := is_11bit,</span><br><span>                              burst_type := burst_type,</span><br><span>                                    fn := fn, arfcn := 871,</span><br><span>@@ -569,15 +605,16 @@</span><br><span>    * we assume that 11 bit RA always contains EGPRS Packet Channel Request. */</span><br><span>         if (is_11bit != 0) { ra := 127; }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* Expect Immediate (TBF) Assignment on TS0/AGCH */</span><br><span style="color: hsl(0, 100%, 40%);">-     return f_pcuif_rx_imm_ass(PCU_IF_SAPI_AGCH, tr_IMM_TBF_ASS(false, ra, fn));</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Expect Immediate (TBF) Assignment on the same TS/TRX/BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+        return f_pcuif_rx_imm_ass(PCU_IF_SAPI_AGCH, tr_IMM_TBF_ASS(false, ra, fn), nr);</span><br><span> }</span><br><span> </span><br><span> /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_pcuif_tx_data_ind(octetstring data, int16_t lqual_cb := 0, uint32_t fn := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_pcuif_tx_data_ind(octetstring data, int16_t lqual_cb := 0, uint32_t fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                       template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>         var template RAW_PCU_EventParam ev_param := {tdma_fn := ? };</span><br><span style="color: hsl(0, 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%);">+       BTS.send(ts_PCUIF_DATA_IND(nr.bts_nr, nr.trx_nr, nr.ts_nr, nr.blk_nr,</span><br><span>                                   sapi := PCU_IF_SAPI_PDTCH, data := data,</span><br><span>                             fn := fn, arfcn := 871, lqual_cb := lqual_cb));</span><br><span>   if (fn != 0) {</span><br><span>@@ -587,18 +624,20 @@</span><br><span> }</span><br><span> </span><br><span> /* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_pcuif_rx_data_req(out PCUIF_Message pcu_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_pcuif_rx_data_req(out PCUIF_Message pcu_msg,</span><br><span style="color: hsl(120, 100%, 40%);">+                         template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span style="color: hsl(0, 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%);">+       BTS.send(ts_PCUIF_RTS_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span>                              sapi := PCU_IF_SAPI_PDTCH, fn := 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                             arfcn := 871, block_nr := 0));</span><br><span style="color: hsl(0, 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%);">+                             arfcn := 871, block_nr := nr.blk_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+      BTS.receive(tr_PCUIF_DATA_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span>                                      sapi := PCU_IF_SAPI_PDTCH)) -> value pcu_msg;</span><br><span> }</span><br><span> </span><br><span> /* Expect a Paging Request Type 1 from PCU on PCUIF on specified sapi.  */</span><br><span> function f_pcuif_rx_pch_pag_req1(template MobileIdentityV mi1 := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                             template integer pag_group := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+                              template integer pag_group := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                              template (present) TsTrxBtsNum nr := tr_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT return GsmRrMessage {</span><br><span>       var GsmRrMessage rr_pag_req1;</span><br><span>        var PCUIF_Message pcu_msg;</span><br><span>@@ -606,7 +645,7 @@</span><br><span>     var integer pag_group_rx;</span><br><span>    var octetstring macblock;</span><br><span> </span><br><span style="color: hsl(0, 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%);">+   BTS.receive(tr_PCUIF_DATA_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span>                                      sapi := PCU_IF_SAPI_PCH)) -> value pcu_msg;</span><br><span> </span><br><span>     /* First 3 bytes contain IMSI suffix to calculate paging group: */</span><br><span>@@ -633,10 +672,12 @@</span><br><span>   return rr_pag_req1;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block, out uint32_t dl_fn, template (present) CodingScheme exp_cs_mcs := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block, out uint32_t dl_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                           template (present) CodingScheme exp_cs_mcs := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                              template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>        var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(0, 100%, 40%);">-      f_pcuif_rx_data_req(pcu_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_pcuif_rx_data_req(pcu_msg, nr := nr);</span><br><span>      dl_block := dec_RlcmacDlBlock(pcu_msg.u.data_req.data);</span><br><span>      dl_fn := pcu_msg.u.data_req.fn;</span><br><span> </span><br><span>@@ -650,11 +691,12 @@</span><br><span> </span><br><span> function f_rx_rlcmac_dl_block_exp_ack_nack(out RlcmacDlBlock dl_block, out uint32_t poll_fn,</span><br><span>                                         template RlcmacDlBlock acknack_tmpl := (tr_RLCMAC_UL_ACK_NACK_GPRS(ul_tfi := ?),</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                                tr_RLCMAC_UL_ACK_NACK_EGPRS(ul_tfi := ?)))</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                            tr_RLCMAC_UL_ACK_NACK_EGPRS(ul_tfi := ?)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                    template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>   var uint32_t dl_fn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block(dl_block, dl_fn, nr := nr);</span><br><span>     if (match(dl_block, acknack_tmpl)) {</span><br><span>                 poll_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);</span><br><span>                 return;</span><br><span>@@ -663,22 +705,24 @@</span><br><span>      f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_rx_rlcmac_dl_block_exp_dummy(out RlcmacDlBlock dl_block)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_rx_rlcmac_dl_block_exp_dummy(out RlcmacDlBlock dl_block,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>      var uint32_t dl_fn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block(dl_block, dl_fn, nr := nr);</span><br><span>     if (not match(dl_block, tr_RLCMAC_DUMMY_CTRL())) {</span><br><span>           setverdict(fail, "Failed to match Packet DUMMY DL");</span><br><span>               f_shutdown(__BFILE__, __LINE__);</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_rx_rlcmac_dl_block_exp_pkt_pag_req(out RlcmacDlBlock dl_block)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_rx_rlcmac_dl_block_exp_pkt_pag_req(out RlcmacDlBlock dl_block,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>        var uint32_t dl_fn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block(dl_block, dl_fn, nr := nr);</span><br><span>     if (not match(dl_block, tr_RLCMAC_PACKET_PAG_REQ())) {</span><br><span>               setverdict(fail, "Failed to match Packet Paging Request: ", dl_block, " vs ", tr_RLCMAC_PACKET_PAG_REQ());</span><br><span>               f_shutdown(__BFILE__, __LINE__);</span><br><span>@@ -754,13 +798,14 @@</span><br><span> function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t dl_fn,</span><br><span>                                  template (present) octetstring data := ?,</span><br><span>                                    template (present) uint7_t exp_bsn := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                                template (present) CodingScheme exp_cs := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+                                  template (present) CodingScheme exp_cs := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>       /* FIXME: ideally we should use an alt statement with timeout here, rather than</span><br><span>       * having +100500 layers of abstraction. This would facilitate developing the</span><br><span>         * multi-TBF/-TRX/-BTS tests, where you cannot expect that the first received</span><br><span>         * block is exactly what you need. */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block(dl_block, dl_fn, nr := nr);</span><br><span> </span><br><span>         /* Make sure it's either GPRS or EGPRS data block */</span><br><span>     if (not match(dl_block, tr_RLCMAC_DATA)) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20223">change 20223</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/+/20223"/><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: I9bff9e912bf73ad6259946a6ea5b08f3e2f728c8 </div>
<div style="display:none"> Gerrit-Change-Number: 20223 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>