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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU: also test GSGN originated PS/CS Paging containing TMSI<br><br>This additional couple of test cases reveals several bugs:<br><br>  1) the IUT encodes a erroneous RR Paging Request message<br>     containing P-TMSI, so TITAN fails to decode it;<br><br>  2) the IUT prints an invalid P-TMSI in its log output<br>     due to load of misaligned address (found by UBSan).<br><br>[1] I97fd5ffc15a4a58112d7c37c69b7ac42b0741a0e<br>[2] Icf8836f216793e342b239c8e6645aac1e82bf324<br><br>Change-Id: I7fbec5b2c5c3943a7413417b623f55c135c152d7<br>---<br>M library/Osmocom_Gb_Types.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>2 files changed, 61 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn</span><br><span>index 518ca80..9189b3e 100644</span><br><span>--- a/library/Osmocom_Gb_Types.ttcn</span><br><span>+++ b/library/Osmocom_Gb_Types.ttcn</span><br><span>@@ -1333,6 +1333,22 @@</span><br><span>             }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template PDU_BSSGP ts_BSSGP_CS_PAGING_PTMSI(BssgpBvci bvci, hexstring imsi, GsmTmsi tmsi) := {</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 := ts_BSSGP_TMSI(tmsi),</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 505592c..62ebcd6 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -1364,6 +1364,14 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_pkt_paging_match_tmsi(in PacketPagingReq req, template GsmTmsi tmsi) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not match(req.repeated_pageinfo.cs.tmsi, tmsi)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Mobile Identity (TMSI/P-TMSI) mismatch: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                           "expected: ", tmsi, "got: ", req.repeated_pageinfo.cs.tmsi);</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%);">+</span><br><span> /* Test CS paging over the BTS<->PCU socket.</span><br><span>  * When a (class B or C, not A) MS has an active TBF (or is on the PDCH), the MS can not react on CS paging over CCCH.</span><br><span>  * Paging should be send on the PACCH.</span><br><span>@@ -1424,13 +1432,15 @@</span><br><span> </span><br><span> /* Test CS paging over Gb (SGSN->PCU->BTS[PDCH]).</span><br><span>  */</span><br><span style="color: hsl(0, 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%);">+private function f_tc_paging_cs_from_sgsn(Nsvci bvci, boolean use_ptmsi := false)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT {</span><br><span>        var GsmRrMessage rr_imm_ass;</span><br><span>         var PacketUlAssign ul_tbf_ass;</span><br><span>       var RlcmacDlBlock dl_block;</span><br><span>  var boolean ok;</span><br><span>      var OCT4 tlli := '00000001'O;</span><br><span>        var hexstring imsi := f_gen_imsi(42);</span><br><span style="color: hsl(120, 100%, 40%);">+ var GsmTmsi tmsi;</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -1455,18 +1465,31 @@</span><br><span>            mtc.stop;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* Send paging request */</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].send(ts_BSSGP_CS_PAGING_IMSI(bvci, imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Send paging request with or without TMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_ptmsi) {</span><br><span style="color: hsl(120, 100%, 40%);">+              tmsi := oct2int(f_rnd_octstring(4)); /* Random P-TMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSGP[0].send(ts_BSSGP_CS_PAGING_PTMSI(bvci, imsi, tmsi));</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {</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> </span><br><span>        /* Receive it on BTS side towards MS */</span><br><span>      f_rx_rlcmac_dl_block_exp_pkt_pag_req(dl_block);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Make sure that Packet Paging Request contains the same IMSI */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_pkt_paging_match_imsi(dl_block.ctrl.payload.u.paging, imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Make sure that Packet Paging Request contains the same P-TMSI/IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (use_ptmsi) {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_pkt_paging_match_tmsi(dl_block.ctrl.payload.u.paging, tmsi);</span><br><span style="color: hsl(120, 100%, 40%);">+        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_pkt_paging_match_imsi(dl_block.ctrl.payload.u.paging, imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_paging_cs_from_sgsn_sign_ptmsi() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    f_tc_paging_cs_from_sgsn(0, true);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> testcase TC_paging_cs_from_sgsn_sign() runs on RAW_PCU_Test_CT {</span><br><span>  f_tc_paging_cs_from_sgsn(0);</span><br><span> }</span><br><span>@@ -1477,12 +1500,14 @@</span><br><span> </span><br><span> /* Test PS paging over Gb (SGSN->PCU->BTS[CCCH]).</span><br><span>  */</span><br><span style="color: hsl(0, 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%);">+private function f_tc_paging_ps_from_sgsn(Nsvci bvci, boolean use_ptmsi := false)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT {</span><br><span>       var GsmRrMessage rr_pag_req1;</span><br><span>        var OCT4 tlli := '00000001'O;</span><br><span>        var integer imsi_suff_rx;</span><br><span>    var integer imsi_suff_tx := 423;</span><br><span>     var hexstring imsi := f_gen_imsi(imsi_suff_tx);</span><br><span style="color: hsl(120, 100%, 40%);">+       var GsmTmsi tmsi;</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -1494,8 +1519,13 @@</span><br><span>     f_bssgp_establish();</span><br><span>         f_bssgp_client_llgmm_assign('FFFFFFFF'O, tlli);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Send paging request */</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].send(ts_BSSGP_PS_PAGING_IMSI(bvci, imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Send paging request with or without TMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_ptmsi) {</span><br><span style="color: hsl(120, 100%, 40%);">+              tmsi := oct2int(f_rnd_octstring(4)); /* Random P-TMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+              BSSGP[0].send(ts_BSSGP_PS_PAGING_PTMSI(bvci, imsi, tmsi));</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {</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> </span><br><span>        /* Receive it on BTS side towards MS */</span><br><span>      f_pcuif_rx_pch_pag_req1(imsi_suff_rx, rr_pag_req1);</span><br><span>@@ -1504,9 +1534,14 @@</span><br><span>                 mtc.stop;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: match MI (P-TMSI/IMSI) of received RR Paging Request */</span><br><span>     setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_paging_ps_from_sgsn_sign_ptmsi() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    f_tc_paging_ps_from_sgsn(0, true);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> testcase TC_paging_ps_from_sgsn_sign() runs on RAW_PCU_Test_CT {</span><br><span>  f_tc_paging_ps_from_sgsn(0);</span><br><span> }</span><br><span>@@ -1530,8 +1565,10 @@</span><br><span>   execute( TC_mt_ping_pong_with_dl_racap() );</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_ptmsi() );</span><br><span>      execute( TC_paging_cs_from_sgsn_sign() );</span><br><span>    execute( TC_paging_cs_from_sgsn_ptp() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_paging_ps_from_sgsn_sign_ptmsi() );</span><br><span>      execute( TC_paging_ps_from_sgsn_sign() );</span><br><span>    execute( TC_paging_ps_from_sgsn_ptp() );</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17616">change 17616</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/+/17616"/><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: I7fbec5b2c5c3943a7413417b623f55c135c152d7 </div>
<div style="display:none"> Gerrit-Change-Number: 17616 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>