<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18548">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">fixup pcu/GPRS_Components: do not duplicate existing functions<br><br>Both f_ms_rx_imm_ass_ccch() and f_ms_establish_ul_tbf() functions<br>are actually twin brothers of good old f_pcuif_rx_imm_ass() and<br>f_establish_tbf() with some minor changes.<br><br>The former accepts a GprsMS parameter, that is never used. The<br>latter simply calls f_ultbf_new_from_rr_imm_ass() in the end.<br><br>Let's avoid code duplication:<br><br>  - call f_establish_tbf() from f_ms_establish_ul_tbf(),<br>  - remove f_ms_rx_imm_ass_ccch(), use f_pcuif_rx_imm_ass().<br><br>After the removal of f_ms_rx_imm_ass_ccch(), the implementation<br>of TC_ta_idle_dl_tbf_ass() does not need the GprsMS state, so<br>let's make it look like it was before.<br><br>Change-Id: If6c0b8796500e96525b7b1cadb61ab2fc84b4744<br>---<br>M pcu/GPRS_Components.ttcn<br>M pcu/PCU_Tests.ttcn<br>2 files changed, 14 insertions(+), 72 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/48/18548/1</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 a91f8df..039e749 100644</span><br><span>--- a/pcu/GPRS_Components.ttcn</span><br><span>+++ b/pcu/GPRS_Components.ttcn</span><br><span>@@ -249,45 +249,6 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_ms_rx_imm_ass_ccch(inout GprsMS ms, template PCUIF_Sapi sapi := PCU_IF_SAPI_AGCH, template GsmRrMessage t_imm_ass := ?)</span><br><span style="color: hsl(0, 100%, 40%);">-runs on MS_BTS_IFACE_CT return GsmRrMessage {</span><br><span style="color: hsl(0, 100%, 40%);">-       var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(0, 100%, 40%);">-      var GsmRrMessage rr_imm_ass;</span><br><span style="color: hsl(0, 100%, 40%);">-    var octetstring data;</span><br><span style="color: hsl(0, 100%, 40%);">-   timer T;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        T.start(2.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   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(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%);">-         f_pcuif_tx_data_cnf(pcu_msg);</span><br><span style="color: hsl(0, 100%, 40%);">-           setverdict(pass);</span><br><span style="color: hsl(0, 100%, 40%);">-               return rr_imm_ass;</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(0, 100%, 40%);">-      [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for Immediate Assignment");</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%);">-       return rr_imm_ass; /* make compiler happy */</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> function f_ms_rx_imm_ass_pacch(inout GprsMS ms, out uint32_t poll_fn, template RlcmacDlBlock t_imm_ass := ?)</span><br><span> runs on MS_BTS_IFACE_CT return RlcmacDlBlock {</span><br><span>      var RlcmacDlBlock dl_block;</span><br><span>@@ -318,40 +279,20 @@</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, uint32_t fn := 1337)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ms_establish_ul_tbf(inout GprsMS ms)</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>  var GsmRrMessage rr_imm_ass;</span><br><span style="color: hsl(0, 100%, 40%);">-    var uint8_t exp_ra;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Send RACH.ind */</span><br><span style="color: hsl(0, 100%, 40%);">-     log("Sending RACH.ind on fn=", fn, " with RA=", ms.ra, ", TA=", ms.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(0, 100%, 40%);">-                                   ra := ms.ra, is_11bit := ms.ra_is_11bit,</span><br><span style="color: hsl(0, 100%, 40%);">-                                burst_type := ms.burst_type,</span><br><span style="color: hsl(0, 100%, 40%);">-                            fn := fn, arfcn := 871,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 qta := ms.ta * 4));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* 3GPP TS 44.018, table 9.1.8.1, note 2b: Request Reference shall be set to 127</span><br><span style="color: hsl(0, 100%, 40%);">-         * when Immediate Assignment is triggered by EGPRS Packet Channel Request. Here</span><br><span style="color: hsl(0, 100%, 40%);">-  * we assume that 11 bit RA always contains EGPRS Packet Channel Request. */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (ms.ra_is_11bit == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-              exp_ra := ms.ra;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                exp_ra := 127;</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%);">-       /* Expect Immediate (TBF) Assignment on TS0/AGCH */</span><br><span style="color: hsl(0, 100%, 40%);">-     rr_imm_ass := f_ms_rx_imm_ass_ccch(ms, PCU_IF_SAPI_AGCH,</span><br><span style="color: hsl(0, 100%, 40%);">-                                           tr_IMM_TBF_ASS(false, exp_ra, fn));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+        rr_imm_ass := f_establish_tbf(ms.ra, ms.ra_is_11bit, ms.burst_type, ms.ta);</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 style="color: hsl(0, 100%, 40%);">-function f_ms_exp_dl_tbf_ass_ccch(inout GprsMS ms, template PCUIF_Sapi sapi := PCU_IF_SAPI_AGCH, template GsmRrMessage t_imm_ass := tr_IMM_TBF_ASS(true, ?, ?))</span><br><span style="color: hsl(120, 100%, 40%);">+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(120, 100%, 40%);">+                                 template GsmRrMessage t_imm_ass := tr_IMM_TBF_ASS(true, ?, ?))</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_ms_rx_imm_ass_ccch(ms, 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);</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>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index ff5da82..8b9a471 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -266,7 +266,7 @@</span><br><span>        for (var TimingAdvance ta := 0; ta < 64; ta := ta + 16) {</span><br><span>                 /* Establish an Uplink TBF (send RACH.ind with current TA) */</span><br><span>                ms.ta := ta;</span><br><span style="color: hsl(0, 100%, 40%);">-            f_ms_establish_ul_tbf(ms, fn := 1337 + ta);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_ms_establish_ul_tbf(ms);</span><br><span> </span><br><span>               /* Make sure Timing Advance IE matches out expectations */</span><br><span>           if (ms.ul_tbf.rr_imm_ass.payload.imm_ass.timing_advance != ta) {</span><br><span>@@ -285,29 +285,30 @@</span><br><span>  * IUT that causes it to send an unreasonable Timing Advance value > 0 despite</span><br><span>  * no active TBF exists at the moment of establishment (idle mode). */</span><br><span> testcase TC_ta_idle_dl_tbf_ass() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-   var GprsMS ms;</span><br><span style="color: hsl(120, 100%, 40%);">+        var OCT4 tlli := f_rnd_octstring(4);</span><br><span style="color: hsl(120, 100%, 40%);">+  var GsmRrMessage rr_imm_ass;</span><br><span> </span><br><span>     /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize GPRS MS side */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_init_gprs_ms();</span><br><span style="color: hsl(0, 100%, 40%);">-       ms := g_ms[0]; /* We only use first MS in this test */</span><br><span> </span><br><span>   /* Initialize the PCU interface abstraction */</span><br><span>       f_init_raw(testcasename());</span><br><span> </span><br><span>      /* Establish BSSGP connection to the PCU */</span><br><span>  f_bssgp_establish();</span><br><span style="color: hsl(0, 100%, 40%);">-    f_bssgp_client_llgmm_assign('FFFFFFFF'O, ms.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_bssgp_client_llgmm_assign('FFFFFFFF'O, tlli);</span><br><span> </span><br><span>  /* SGSN sends some DL data, PCU will initiate Packet Downlink</span><br><span>         * Assignment on CCCH (PCH). We don't care about the payload. */</span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, f_rnd_octstring(10)));</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSGP[0].send(ts_BSSGP_DL_UD(tlli, f_rnd_octstring(10)));</span><br><span style="color: hsl(120, 100%, 40%);">+     rr_imm_ass := f_pcuif_rx_imm_ass(PCU_IF_SAPI_PCH, tr_IMM_TBF_ASS(dl := true));</span><br><span> </span><br><span>   /* Make sure that Timing Advance is 0 (the actual value is not known yet).</span><br><span>    * As per 3GPP S 44.018, section 3.5.3.1.2, the network *shall* initiate</span><br><span>      * the procedures defined in 3GPP TS 44.060 or use the polling mechanism. */</span><br><span style="color: hsl(0, 100%, 40%);">-    f_ms_rx_imm_ass_ccch(ms,  PCU_IF_SAPI_PCH, tr_IMM_TBF_ASS(ta := 0));</span><br><span style="color: hsl(120, 100%, 40%);">+  if (rr_imm_ass.payload.imm_ass.timing_advance != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Timing Advance value doesn't match");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> </span><br><span>        f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18548">change 18548</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/+/18548"/><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: If6c0b8796500e96525b7b1cadb61ab2fc84b4744 </div>
<div style="display:none"> Gerrit-Change-Number: 18548 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>