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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Introduce tests for CS and PS paging from SGSN/Gb<br><br>CS Gb paging and PTP CS/PS paging implemented in osmo-pcu:<br>I9501e02e1d7f6944497e724dbccb9a19c3f5221f<br>I5c52b5af740460c48bb3ba858243b1d20e624268<br><br>Related: OS#3927, OS#2406<br>Change-Id: I90b5a792c1d91e38ea7b8c060ff0b459673df951<br>---<br>M library/GSM_RR_Types.ttcn<br>M library/Osmocom_Gb_Types.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>3 files changed, 171 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn</span><br><span>index 965708f..f5eeda5 100644</span><br><span>--- a/library/GSM_RR_Types.ttcn</span><br><span>+++ b/library/GSM_RR_Types.ttcn</span><br><span>@@ -911,6 +911,22 @@</span><br><span>              }</span><br><span>    };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        template GsmRrMessage tr_PAG_REQ1(template MobileIdentityLV mi1 := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+            header := t_RrHeader(PAGING_REQUEST_TYPE_1, ?),</span><br><span style="color: hsl(120, 100%, 40%);">+               payload := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  pag_req_1 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                chan_needed := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      second := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  first := ?</span><br><span style="color: hsl(120, 100%, 40%);">+                            },</span><br><span style="color: hsl(120, 100%, 40%);">+                            page_mode := PAGE_MODE_NORMAL,</span><br><span style="color: hsl(120, 100%, 40%);">+                                mi1 := mi1,</span><br><span style="color: hsl(120, 100%, 40%);">+                           mi2 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          rest_octets := ?</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>         template (value) GsmRrL3Message ts_MEAS_REP(boolean valid, uint6_t rxl_f, uint6_t rxl_s,</span><br><span>                                               uint3_t rxq_f, uint3_t rxq_s,</span><br><span>                                                template (omit) NcellReports reps) := {</span><br><span>diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn</span><br><span>index 55a2816..3149e77 100644</span><br><span>--- a/library/Osmocom_Gb_Types.ttcn</span><br><span>+++ b/library/Osmocom_Gb_Types.ttcn</span><br><span>@@ -1121,6 +1121,18 @@</span><br><span>          delay_Value := f_oct_or_wc(delay, 2)</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template DRX_Parameters t_defaultDRXparam := {</span><br><span style="color: hsl(120, 100%, 40%);">+                iEI := '0A'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 2</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            splitPG_CycleCode := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+           nonDRXTimer := '000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                splitOnCCCH := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          cnSpecificDRXCycleLength := '0000'B</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  template PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu) := {</span><br><span>               pDU_BSSGP_DL_UNITDATA := {</span><br><span>                   bssgpPduType := '00'O,</span><br><span>@@ -1220,6 +1232,38 @@</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template PDU_BSSGP tr_BSSGP_CS_PAGING(BssgpBvci bvci) := {</span><br><span style="color: hsl(120, 100%, 40%);">+            pDU_BSSGP_PAGING_CS := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      bssgpPduType := '07'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                        iMSI := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                    dRX_Parameters := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                  paging_Field4 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                    },</span><br><span style="color: hsl(120, 100%, 40%);">+                    tLLI := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                    channel_needed := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                  eMLPP_Priority := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                  tMSI := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                    global_CN_Id := *</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%);">+   template PDU_BSSGP ts_BSSGP_CS_PAGING_IMSI(BssgpBvci bvci, hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               pDU_BSSGP_PAGING_CS := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      bssgpPduType := '07'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                        iMSI := ts_BSSGP_IMSI(imsi),</span><br><span style="color: hsl(120, 100%, 40%);">+                  dRX_Parameters := t_defaultDRXparam,</span><br><span style="color: hsl(120, 100%, 40%);">+                  paging_Field4 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                            bVCI := t_BSSGP_BVCI(bvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                    },</span><br><span style="color: hsl(120, 100%, 40%);">+                    tLLI := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                 channel_needed := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                       eMLPP_Priority := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                       tMSI := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                 global_CN_Id := omit</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>  template PDU_BSSGP tr_BSSGP_PS_PAGING(BssgpBvci bvci) := {</span><br><span>           pDU_BSSGP_PAGING_PS := {</span><br><span>                     bssgpPduType := '06'O,</span><br><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index c41a244..ff609fe 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -738,6 +738,24 @@</span><br><span>                              fn := 0, arfcn := 871, sapi := PCU_IF_SAPI_PCH, data := macblock));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Expect a Paging Request Type 1 from PCU on PCUIF on specified sapi.  */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_pcuif_rx_pch_pag_req1(out GsmRrMessage rr_pag_req1)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+    var octetstring macblock;</span><br><span style="color: hsl(120, 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%);">+                                 sapi := PCU_IF_SAPI_PCH)) -> value pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+  /* First 3 bytes contain paging group: */</span><br><span style="color: hsl(120, 100%, 40%);">+     macblock := substr(pcu_msg.u.data_req.data, 3, pcu_msg.u.data_req.len - 3);</span><br><span style="color: hsl(120, 100%, 40%);">+   rr_pag_req1 := dec_GsmRrMessage(macblock);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (not match(rr_pag_req1, tr_PAG_REQ1())) {</span><br><span style="color: hsl(120, 100%, 40%);">+          setverdict(fail, "Failed to match Paging Request Type 1: ", rr_pag_req1);</span><br><span style="color: hsl(120, 100%, 40%);">+           mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     BTS.send(ts_PCUIF_DATA_CNF(bts_nr := 0, trx_nr := 0, ts_nr := 0, block_nr := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  fn := pcu_msg.u.data_req.fn, arfcn := 871, sapi := PCU_IF_SAPI_PCH, data := macblock));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tx_rlcmac_ul_block(template (value) RlcmacUlBlock ul_data, int16_t lqual_cb := 0, uint32_t fn := 0)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span>       var octetstring data;</span><br><span>@@ -1666,6 +1684,95 @@</span><br><span>       setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test CS paging over Gb (SGSN->PCU->BTS[PDCH]).</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_paging_cs_from_sgsn(Nsvci bvci) runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var GsmRrMessage rr_imm_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PacketUlAssign ul_tbf_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+        var RlcmacDlBlock dl_block;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean ok;</span><br><span style="color: hsl(120, 100%, 40%);">+       var OCT4 tlli := '00000001'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ var MobileIdentityLV_Paging mi_res;</span><br><span style="color: hsl(120, 100%, 40%);">+   var hexstring imsi := f_gen_imsi(42);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Initialize NS/BSSGP side */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_bssgp();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Establish BSSGP connection to the PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_bssgp_establish();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_bssgp_client_llgmm_assign('FFFFFFFF'O, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Establish an Uplink TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+ ok := f_establish_tbf(rr_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (not ok) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Failed to establish TBF");</span><br><span style="color: hsl(120, 100%, 40%);">+                mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   ok := f_imm_ass_verify_ul_tbf_ass(rr_imm_ass, ul_tbf_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (not ok) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Immediate Assignment not an Uplink TBF");</span><br><span style="color: hsl(120, 100%, 40%);">+         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Send paging request */</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSGP[0].send(ts_BSSGP_CS_PAGING_IMSI(bvci, imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Receive it on BTS side towards MS */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_rx_rlcmac_dl_block_exp_pkt_pag_req(dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* FIXME: we must use .ps. here instead of .cs. (the one actually sent)</span><br><span style="color: hsl(120, 100%, 40%);">+          because TTCN3 counts length up to octet boundary and thinks it's a</span><br><span style="color: hsl(120, 100%, 40%);">+        PageInfoPs: */</span><br><span style="color: hsl(120, 100%, 40%);">+     mi_res := dl_block.ctrl.payload.u.paging.repeated_pageinfo.ps.mobile_identity;</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%);">+testcase TC_paging_cs_from_sgsn_sign() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_tc_paging_cs_from_sgsn(0);</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%);">+testcase TC_paging_cs_from_sgsn_ptp() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    f_tc_paging_cs_from_sgsn(mp_gb_cfg.bvci);</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%);">+/* Test PS paging over Gb (SGSN->PCU->BTS[CCCH]).</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_paging_ps_from_sgsn(Nsvci bvci) runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var GsmRrMessage rr_pag_req1;</span><br><span style="color: hsl(120, 100%, 40%);">+ var OCT4 tlli := '00000001'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ var hexstring imsi := f_gen_imsi(42);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Initialize NS/BSSGP side */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_bssgp();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Establish BSSGP connection to the PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_bssgp_establish();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_bssgp_client_llgmm_assign('FFFFFFFF'O, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Send paging request */</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSGP[0].send(ts_BSSGP_PS_PAGING_IMSI(bvci, imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Receive it on BTS side towards MS */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_pcuif_rx_pch_pag_req1(rr_pag_req1);</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%);">+testcase TC_paging_ps_from_sgsn_sign() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      f_tc_paging_ps_from_sgsn(0);</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%);">+testcase TC_paging_ps_from_sgsn_ptp() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    f_tc_paging_ps_from_sgsn(mp_gb_cfg.bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> control {</span><br><span>  execute( TC_ns_reset() );</span><br><span>    execute( TC_ns_reset_retrans() );</span><br><span>@@ -1688,6 +1795,10 @@</span><br><span>   execute( TC_mo_ping_pong() );</span><br><span>        execute( TC_imm_ass_dl_block_retrans() );</span><br><span>    execute( TC_paging_cs_from_bts() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute (TC_paging_cs_from_sgsn_sign() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute (TC_paging_cs_from_sgsn_ptp() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute (TC_paging_ps_from_sgsn_sign() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute (TC_paging_ps_from_sgsn_ptp() );</span><br><span> }</span><br><span> </span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16528">change 16528</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/+/16528"/><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: I90b5a792c1d91e38ea7b8c060ff0b459673df951 </div>
<div style="display:none"> Gerrit-Change-Number: 16528 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>