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