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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Introduce test TC_ull_all_sizes<br><br>Change-Id: I293c8dea2d44c5232a96c44b605e0d8c6dc1fa0e<br>---<br>M pcu/PCU_Tests.ttcn<br>1 file changed, 91 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index ef689e2..76a2d9e 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -876,6 +876,96 @@</span><br><span>       BSSGP[0].receive(tr_BSSGP_UL_UD(ms.tlli, mp_gb_cfg.cell_id, total_payload));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Verify PCU handles correctly CS1..4 with all possible LLC payload sizes fitting alone in one RLC block */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ul_all_sizes() runs on RAW_PCU_Test_CT  {</span><br><span style="color: hsl(120, 100%, 40%);">+    var RlcmacDlBlock dl_block;</span><br><span style="color: hsl(120, 100%, 40%);">+   var uint32_t dl_fn, sched_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var octetstring payload;</span><br><span style="color: hsl(120, 100%, 40%);">+      var template (value) RlcmacUlBlock ul_data;</span><br><span style="color: hsl(120, 100%, 40%);">+   var GprsMS ms;</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%);">+       /* Initialize GPRS MS side */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_gprs_ms();</span><br><span style="color: hsl(120, 100%, 40%);">+     ms := g_ms[0]; /* We only use first MS in this test */</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, ms.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%);">+ f_ms_establish_ul_tbf(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Send one UL block (with TLLI since we are in One-Phase Access</span><br><span style="color: hsl(120, 100%, 40%);">+         contention resoultion) and make sure it is ACKED fine. */</span><br><span style="color: hsl(120, 100%, 40%);">+  payload := f_rnd_octstring(16); /* 16 bytes fills the llc block (because TLLI takes 4 bytes) */</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Set CV = 15 to signal there's still more than BS_CV_MAX blocks to be sent */</span><br><span style="color: hsl(120, 100%, 40%);">+   ul_data := t_RLCMAC_UL_DATA_TLLI(tfi := ms.ul_tbf.tfi,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    cv := 15,</span><br><span style="color: hsl(120, 100%, 40%);">+                             bsn := ms.ul_tbf.bsn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 blocks := { t_RLCMAC_LLCBLOCK(payload,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                              t_RLCMAC_LLCBLOCK_HDR(length_ind := lengthof(payload), more := false, e := true))</span><br><span style="color: hsl(120, 100%, 40%);">+                                         },</span><br><span style="color: hsl(120, 100%, 40%);">+                                  tlli := ms.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ultbf_inc_bsn(ms.ul_tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ms_tx_ul_block(ms, ul_data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* ACK and check it was received fine */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+  /* receive one message on BSSGP with all aggregated data in payload: */</span><br><span style="color: hsl(120, 100%, 40%);">+       BSSGP[0].receive(tr_BSSGP_UL_UD(ms.tlli, mp_gb_cfg.cell_id, payload));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Test sending LLC PDUS of incrementing size */</span><br><span style="color: hsl(120, 100%, 40%);">+      var integer max_size := 49;</span><br><span style="color: hsl(120, 100%, 40%);">+   for (var integer i := 1; i <= max_size; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              var integer cv;</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */</span><br><span style="color: hsl(120, 100%, 40%);">+              log("Sending DATA.ind with LLC payload size ", i);</span><br><span style="color: hsl(120, 100%, 40%);">+          if (i < max_size - g_bs_cv_max) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  cv := 15;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      cv := max_size - i;</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%);">+           payload := f_rnd_octstring(i);</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Set CV = 15 to signal there's still more than BS_CV_MAX blocks to be sent */</span><br><span style="color: hsl(120, 100%, 40%);">+           ul_data := t_RLCMAC_UL_DATA(tfi := ms.ul_tbf.tfi,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         cv := cv,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     bsn := ms.ul_tbf.bsn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         blocks := { t_RLCMAC_LLCBLOCK(payload,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                      t_RLCMAC_LLCBLOCK_HDR(length_ind := lengthof(payload), more := false, e := true))</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 });</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ultbf_inc_bsn(ms.ul_tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+           f_ms_tx_ul_block(ms, ul_data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* receive one message on BSSGP with all aggregated data in payload: */</span><br><span style="color: hsl(120, 100%, 40%);">+               BSSGP[0].receive(tr_BSSGP_UL_UD(ms.tlli, mp_gb_cfg.cell_id, payload));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* we will receive UL ACK/NACK from time to time, handle it. */</span><br><span style="color: hsl(120, 100%, 40%);">+               f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+                if (match(dl_block, tr_RLCMAC_DUMMY_CTRL())) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (not match(dl_block, tr_RLCMAC_UL_ACK_NACK_GPRS(ul_tfi := ?)) and</span><br><span style="color: hsl(120, 100%, 40%);">+              not match(dl_block, tr_RLCMAC_UL_ACK_NACK_EGPRS(ul_tfi := ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  setverdict(fail, "Failed to match Packet Uplink ACK / NACK:", dl_block);</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 style="color: hsl(120, 100%, 40%);">+           log("Rx Packet Uplink ACK / NACK");</span><br><span style="color: hsl(120, 100%, 40%);">+         sched_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+         /* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+                f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), sched_fn);</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> /* Test scenario where MS wants to send some data on PDCH against SGSN and it is</span><br><span>  * answered, so TBFs for uplink and later for downlink are created.</span><br><span>  */</span><br><span>@@ -1862,6 +1952,7 @@</span><br><span>     execute( TC_t3169() );</span><br><span>       execute( TC_t3193() );</span><br><span>       execute( TC_countdown_procedure() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_ul_all_sizes() );</span><br><span>        execute( TC_mo_ping_pong() );</span><br><span>        execute( TC_mo_ping_pong_with_ul_racap() );</span><br><span>  execute( TC_force_two_phase_access() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19077">change 19077</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/+/19077"/><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: I293c8dea2d44c5232a96c44b605e0d8c6dc1fa0e </div>
<div style="display:none"> Gerrit-Change-Number: 19077 </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: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>