<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22321">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
laforge: Looks good to me, but someone else must approve
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Rewrite GPRS_Components functions to use pre-decoded RLCMAC blocks coming from PCUIF<br><br>This is only a step towards a major set of changes.<br>This specific commit changes internal implementation of functions to stay<br>compatible with existing tests.<br>Later on, changes will be modified to use the new altsteps directly.<br><br>Related: OS#4927<br>Change-Id: Iecc33565fdc673e3499db12a0d4e0587290cfd45<br>---<br>M pcu/GPRS_Components.ttcn<br>M pcu/PCU_Tests.ttcn<br>2 files changed, 106 insertions(+), 99 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 a76deaa..bf2e868 100644</span><br><span>--- a/pcu/GPRS_Components.ttcn</span><br><span>+++ b/pcu/GPRS_Components.ttcn</span><br><span>@@ -506,35 +506,45 @@</span><br><span> sapi := PCU_IF_SAPI_PDTCH, fn := 0,</span><br><span> arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)),</span><br><span> block_nr := nr.blk_nr));</span><br><span style="color: hsl(0, 100%, 40%);">- as_ms_rx_pkt_ass_pacch(ms, poll_fn, t_pkt_ass, nr, ignore_dummy, dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_ms_rx_pkt_ass_pacch(ms, poll_fn, t_pkt_ass, nr, dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+ [ignore_dummy] as_ms_rx_ignore_dummy(ms, nr);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: fail */</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BTS.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "Unexpected BTS message");</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> return dl_block;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+altstep as_ms_rx_ignore_dummy(inout GprsMS ms, template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on MS_BTS_IFACE_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BTS_PDTCH_Block data_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BTS.receive(tr_PCUIF_DATA_PDTCH(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PDTCH),</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_RLCMAC_DUMMY_CTRL())) -> value data_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+</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 style="color: hsl(120, 100%, 40%);">+ sapi := PCU_IF_SAPI_PDTCH, fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)),</span><br><span style="color: hsl(120, 100%, 40%);">+ block_nr := nr.blk_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+ repeat;</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> altstep as_ms_rx_pkt_ass_pacch(inout GprsMS ms, out uint32_t poll_fn,</span><br><span> template RlcmacDlBlock t_pkt_ass := ?,</span><br><span> template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum,</span><br><span style="color: hsl(0, 100%, 40%);">- boolean ignore_dummy := true,</span><br><span> out RlcmacDlBlock dl_block)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span style="color: hsl(0, 100%, 40%);">- var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(0, 100%, 40%);">- [] BTS.receive(tr_PCUIF_DATA_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span style="color: hsl(0, 100%, 40%);">- sapi := PCU_IF_SAPI_PDTCH)) -> value pcu_msg {</span><br><span style="color: hsl(0, 100%, 40%);">- var uint32_t dl_fn;</span><br><span style="color: hsl(0, 100%, 40%);">- dl_block := dec_RlcmacDlBlock(pcu_msg.u.data_req.data);</span><br><span style="color: hsl(0, 100%, 40%);">- if (ignore_dummy and match(dl_block, tr_RLCMAC_DUMMY_CTRL())) {</span><br><span style="color: hsl(0, 100%, 40%);">- /* TODO: sleep? */</span><br><span style="color: hsl(0, 100%, 40%);">- BTS.send(ts_PCUIF_RTS_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span style="color: hsl(0, 100%, 40%);">- sapi := PCU_IF_SAPI_PDTCH, fn := 0,</span><br><span style="color: hsl(0, 100%, 40%);">- arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)), block_nr := nr.blk_nr));</span><br><span style="color: hsl(0, 100%, 40%);">- repeat;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (not match(dl_block, t_pkt_ass)) {</span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(fail, "Failed to match Packet Assignment:", t_pkt_ass);</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- dl_fn := pcu_msg.u.data_req.fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var BTS_PDTCH_Block data_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BTS.receive(tr_PCUIF_DATA_PDTCH(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi := PCU_IF_SAPI_PDTCH),</span><br><span style="color: hsl(120, 100%, 40%);">+ t_pkt_ass)) -> value data_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+ var uint32_t dl_fn := data_msg.raw.fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ dl_block := data_msg.dl_block;</span><br><span> poll_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);</span><br><span> </span><br><span> if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS)) {</span><br><span>@@ -777,22 +787,21 @@</span><br><span> desc.final_ack := final_ack;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* This function can be used to send DATA.cnf in response to the IUT originated DATA.req.</span><br><span style="color: hsl(0, 100%, 40%);">- * NOTE: it's the responsibility of caller to make sure that pcu_msg contains u.data_req. */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_pcuif_tx_data_cnf(in PCUIF_Message pcu_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+/* This function can be used to send DATA.cnf in response to the IUT originated DATA.req. */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_pcuif_tx_data_cnf(in BTS_CCCH_Block data_msg)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span> var PCUIF_Message pcu_msg_cnf := {</span><br><span> msg_type := PCU_IF_MSG_DATA_CNF,</span><br><span style="color: hsl(0, 100%, 40%);">- bts_nr := pcu_msg.bts_nr,</span><br><span style="color: hsl(0, 100%, 40%);">- spare := pcu_msg.spare,</span><br><span style="color: hsl(0, 100%, 40%);">- u := { data_cnf := pcu_msg.u.data_req }</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := data_msg.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := { data_cnf := data_msg.raw }</span><br><span> };</span><br><span> </span><br><span> /* PCU wants DATA.cnf containing basically everything that was in DATA.req,</span><br><span> * but PCU_IF_SAPI_PCH is a special case - paging group shall be excluded. */</span><br><span style="color: hsl(0, 100%, 40%);">- if (pcu_msg.u.data_req.sapi == PCU_IF_SAPI_PCH) {</span><br><span style="color: hsl(0, 100%, 40%);">- pcu_msg_cnf.u.data_cnf.data := substr(pcu_msg.u.data_req.data, 3,</span><br><span style="color: hsl(0, 100%, 40%);">- pcu_msg.u.data_req.len - 3);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (data_msg.raw.sapi == PCU_IF_SAPI_PCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+ pcu_msg_cnf.u.data_cnf.data := substr(data_msg.raw.data, 3,</span><br><span style="color: hsl(120, 100%, 40%);">+ data_msg.raw.len - 3);</span><br><span> }</span><br><span> </span><br><span> BTS.send(pcu_msg_cnf);</span><br><span>@@ -802,43 +811,52 @@</span><br><span> // Low level APIs</span><br><span> ////////////////////////</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+altstep as_rx_ptcch(out BTS_PTCCH_Block ret_msg, template (present) PTCCHDownlinkMsg msg := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum, boolean do_repeat := false)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on MS_BTS_IFACE_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BTS.receive(tr_PCUIF_DATA_PTCCH(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PTCCH),</span><br><span style="color: hsl(120, 100%, 40%);">+ msg)) -> value ret_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (do_repeat) {</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 style="color: hsl(120, 100%, 40%);">+ sapi := PCU_IF_SAPI_PTCCH, fn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)),</span><br><span style="color: hsl(120, 100%, 40%);">+ block_nr := nr.blk_nr))</span><br><span style="color: hsl(120, 100%, 40%);">+ repeat;</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 style="color: hsl(120, 100%, 40%);">+altstep as_ms_rx_imm_ass(template PCUIF_Sapi sapi := PCU_IF_SAPI_AGCH,</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 := ts_TsTrxBtsNum,</span><br><span style="color: hsl(120, 100%, 40%);">+ out GsmRrMessage rr_imm_ass)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on MS_BTS_IFACE_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BTS_CCCH_Block data_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BTS.receive(tr_PCUIF_DATA_RR(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_PCUIF_DATA(nr.trx_nr, 0, sapi := sapi),</span><br><span style="color: hsl(120, 100%, 40%);">+ t_imm_ass)) -> value data_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+ rr_imm_ass := data_msg.rr_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ log("Rx Immediate Assignment: ", rr_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send DATA.cnf back to the IUT (only needed for PCH) */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (data_msg.raw.sapi == PCU_IF_SAPI_PCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_pcuif_tx_data_cnf(data_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</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> function f_pcuif_rx_imm_ass(template PCUIF_Sapi sapi := PCU_IF_SAPI_AGCH,</span><br><span> template GsmRrMessage t_imm_ass := ?,</span><br><span> 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 style="color: hsl(0, 100%, 40%);">- var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(0, 100%, 40%);">- var octetstring data;</span><br><span> timer T;</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(nr.bts_nr, nr.trx_nr, ts_nr := 0,</span><br><span style="color: hsl(0, 100%, 40%);">- sapi := sapi, data := ?)) -> value pcu_msg {</span><br><span style="color: hsl(0, 100%, 40%);">- /* On PCH the payload is prefixed with paging group (3 octets): skip it.</span><br><span style="color: hsl(0, 100%, 40%);">- * TODO: add an additional template parameter, so we can match it. */</span><br><span style="color: hsl(0, 100%, 40%);">- if (pcu_msg.u.data_req.sapi == PCU_IF_SAPI_PCH) {</span><br><span style="color: hsl(0, 100%, 40%);">- data := substr(pcu_msg.u.data_req.data, 3, pcu_msg.u.data_req.len - 3);</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(0, 100%, 40%);">- data := pcu_msg.u.data_req.data;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- rr_imm_ass := dec_GsmRrMessage(data);</span><br><span style="color: hsl(0, 100%, 40%);">- if (not match(rr_imm_ass, t_imm_ass)) {</span><br><span style="color: hsl(0, 100%, 40%);">- /* Not for us? Wait for more. */</span><br><span style="color: hsl(0, 100%, 40%);">- repeat;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- log("Rx Immediate Assignment: ", rr_imm_ass);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Send DATA.cnf back to the IUT (only needed for PCH) */</span><br><span style="color: hsl(0, 100%, 40%);">- if (pcu_msg.u.data_req.sapi == PCU_IF_SAPI_PCH) {</span><br><span style="color: hsl(0, 100%, 40%);">- f_pcuif_tx_data_cnf(pcu_msg);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(pass);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- [] BTS.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_ms_rx_imm_ass(sapi, t_imm_ass, nr, rr_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BTS.receive { repeat; } /* TODO: use as_ms_rx_ignore_dummy instead? */</span><br><span> [] T.timeout {</span><br><span> setverdict(fail, "Timeout waiting for Immediate Assignment");</span><br><span> f_shutdown(__BFILE__, __LINE__);</span><br><span>@@ -898,14 +916,16 @@</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_pdtch(out BTS_PDTCH_Block data_msg,</span><br><span> template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span> 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> arfcn := f_trxnr2arfcn(valueof(nr.trx_nr)), block_nr := nr.blk_nr));</span><br><span style="color: hsl(0, 100%, 40%);">- BTS.receive(tr_PCUIF_DATA_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span style="color: hsl(0, 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%);">+ BTS.receive(tr_PCUIF_DATA_PDTCH(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PDTCH))</span><br><span style="color: hsl(120, 100%, 40%);">+ ) -> value data_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>@@ -914,35 +934,31 @@</span><br><span> 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 style="color: hsl(0, 100%, 40%);">- var PCUIF_Message pcu_msg;</span><br><span> var octetstring imsi_suff_octstr;</span><br><span> var integer pag_group_rx;</span><br><span style="color: hsl(0, 100%, 40%);">- var octetstring macblock;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- BTS.receive(tr_PCUIF_DATA_REQ(nr.bts_nr, nr.trx_nr, nr.ts_nr,</span><br><span style="color: hsl(0, 100%, 40%);">- sapi := PCU_IF_SAPI_PCH)) -> value pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ var BTS_CCCH_Block data_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ BTS.receive(tr_PCUIF_DATA_RR(nr.bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_PCUIF_DATA(nr.trx_nr, nr.ts_nr, sapi := PCU_IF_SAPI_PCH),</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_PAG_REQ1(tr_MI_LV(mi1)))) -> value data_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ rr_pag_req1 := data_msg.rr_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ log("Rx Paging Request Type1: ", rr_pag_req1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> /* First 3 bytes contain IMSI suffix to calculate paging group: */</span><br><span style="color: hsl(0, 100%, 40%);">- imsi_suff_octstr := substr(pcu_msg.u.data_req.data, 0, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+ imsi_suff_octstr := substr(data_msg.raw.data, 0, 3);</span><br><span> pag_group_rx := str2int(oct2char(imsi_suff_octstr[0])) * 100 +</span><br><span> str2int(oct2char(imsi_suff_octstr[1])) * 10 +</span><br><span> str2int(oct2char(imsi_suff_octstr[2]));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Make sure we've got RR Paging Request Type 1 for a given MI */</span><br><span style="color: hsl(0, 100%, 40%);">- macblock := substr(pcu_msg.u.data_req.data, 3, pcu_msg.u.data_req.len - 3);</span><br><span style="color: hsl(0, 100%, 40%);">- rr_pag_req1 := dec_GsmRrMessage(macblock);</span><br><span style="color: hsl(0, 100%, 40%);">- if (not match(rr_pag_req1, tr_PAG_REQ1(tr_MI_LV(mi1)))) {</span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(fail, "Failed to match Paging Request Type 1: ", rr_pag_req1);</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Make sure that received paging froup matches the expected one */</span><br><span> if (not match(pag_group_rx, pag_group)) {</span><br><span> setverdict(fail, "Paging group", pag_group_rx, " does not match expected ", pag_group);</span><br><span> f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- f_pcuif_tx_data_cnf(pcu_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send DATA.cnf back to the IUT (only needed for PCH) */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_pcuif_tx_data_cnf(data_msg);</span><br><span> return rr_pag_req1;</span><br><span> }</span><br><span> </span><br><span>@@ -950,12 +966,12 @@</span><br><span> template (present) CodingScheme exp_cs_mcs := ?,</span><br><span> template (value) TsTrxBtsNum nr := ts_TsTrxBtsNum)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span style="color: hsl(0, 100%, 40%);">- var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(0, 100%, 40%);">- f_pcuif_rx_data_req(pcu_msg, nr := nr);</span><br><span style="color: hsl(0, 100%, 40%);">- dl_block := dec_RlcmacDlBlock(pcu_msg.u.data_req.data);</span><br><span style="color: hsl(0, 100%, 40%);">- dl_fn := pcu_msg.u.data_req.fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var BTS_PDTCH_Block data_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_pcuif_rx_data_req_pdtch(data_msg, nr := nr);</span><br><span style="color: hsl(120, 100%, 40%);">+ dl_block := data_msg.dl_block;</span><br><span style="color: hsl(120, 100%, 40%);">+ dl_fn := data_msg.raw.fn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- var integer len := lengthof(pcu_msg.u.data_req.data);</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer len := lengthof(data_msg.raw.data);</span><br><span> var CodingScheme cs_mcs := f_rlcmac_block_len2cs_mcs(len)</span><br><span> if (not match(f_rlcmac_block_len2cs_mcs(len), exp_cs_mcs)) {</span><br><span> setverdict(fail, "Failed to match Coding Scheme exp ", exp_cs_mcs, " vs ", cs_mcs, " (", len, ")");</span><br><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index 4204139..3c3b570 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -264,7 +264,7 @@</span><br><span> connect(self:STATSD_PROC, vc_STATSD:STATSD_PROC);</span><br><span> </span><br><span> vc_PCUIF.start(f_PCUIF_CT_handler(mp_pcu_sock_path));</span><br><span style="color: hsl(0, 100%, 40%);">- vc_BTS.start(f_BTS_CT_handler(0, valueof(info_ind)));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_BTS.start(f_BTS_CT_handler(0, valueof(info_ind), true));</span><br><span> </span><br><span> /* Wait until the BTS is ready (SI13 negotiated) */</span><br><span> BTS.receive(tr_RAW_PCU_EV(BTS_EV_SI13_NEGO));</span><br><span>@@ -509,8 +509,7 @@</span><br><span> /* Verify that the PCU generates valid PTCCH/D messages</span><br><span> * while neither Uplink nor Downlink TBF is established. */</span><br><span> testcase TC_ta_ptcch_idle() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">- var PTCCHDownlinkMsg ptcch_msg;</span><br><span style="color: hsl(0, 100%, 40%);">- var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ var BTS_PTCCH_Block pcu_msg;</span><br><span> timer T;</span><br><span> </span><br><span> /* Initialize the PCU interface abstraction */</span><br><span>@@ -520,28 +519,20 @@</span><br><span> BTS.send(ts_PCUIF_RTS_REQ(bts_nr := 0, trx_nr := 0, ts_nr := 7,</span><br><span> sapi := PCU_IF_SAPI_PTCCH, fn := 0,</span><br><span> arfcn := 871, block_nr := 0));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> T.start(5.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 := 7,</span><br><span style="color: hsl(0, 100%, 40%);">- sapi := PCU_IF_SAPI_PTCCH)) -> value pcu_msg {</span><br><span style="color: hsl(0, 100%, 40%);">- log("Rx DATA.req message: ", pcu_msg);</span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(pass);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Make sure the message is encoded correctly</span><br><span style="color: hsl(120, 100%, 40%);">+ * TODO: do we expect all TA values to be equal '1111111'B? */</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_rx_ptcch(pcu_msg, tr_PTCCHDownlinkMsg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> [] BTS.receive(PCUIF_Message:?) { repeat; }</span><br><span> [] T.timeout {</span><br><span> setverdict(fail, "Timeout waiting for a PTCCH/D block");</span><br><span> f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- ptcch_msg := dec_PTCCHDownlinkMsg(pcu_msg.u.data_req.data);</span><br><span style="color: hsl(0, 100%, 40%);">- log("Decoded PTCCH/D message: ", ptcch_msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Make sure the message is encoded correctly</span><br><span style="color: hsl(0, 100%, 40%);">- * TODO: do we expect all TA values to be equal '1111111'B? */</span><br><span style="color: hsl(0, 100%, 40%);">- if (not match(ptcch_msg, tr_PTCCHDownlinkMsg)) {</span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(fail, "Malformed PTCCH/D message");</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ log("Decoded PTCCH/D message: ", pcu_msg.dl_block);</span><br><span> </span><br><span> f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span>@@ -3212,7 +3203,7 @@</span><br><span> /* Check if the IUT handles subsequent INFO.ind messages */</span><br><span> testcase TC_pcuif_info_ind_subsequent() runs on RAW_PCU_Test_CT {</span><br><span> var template PCUIF_info_ind info_ind := ts_PCUIF_INFO_default;</span><br><span style="color: hsl(0, 100%, 40%);">- var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ var BTS_PDTCH_Block data_msg;</span><br><span> </span><br><span> /* Initialize the PCU interface abstraction */</span><br><span> f_init_raw(testcasename(), info_ind);</span><br><span>@@ -3220,7 +3211,7 @@</span><br><span> /* Send 16 conseqtive INFO.ind messages and check that the IUT stays alive */</span><br><span> for (var integer i := 0; i < 16; i := i + 1) {</span><br><span> BTS.send(ts_PCUIF_INFO_IND(0, info_ind));</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_pdtch(data_msg);</span><br><span> }</span><br><span> </span><br><span> f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22321">change 22321</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/+/22321"/><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: Iecc33565fdc673e3499db12a0d4e0587290cfd45 </div>
<div style="display:none"> Gerrit-Change-Number: 22321 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@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>