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