<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18259">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: f_tx_rlcmac_ul_n_blocks(): Keep BSN state and return all payload sent<br><br>These features will be used in test added in next commit.<br><br>Change-Id: I7dde6a2e71a9e64cf6c704eda37b47838460102b<br>---<br>M pcu/PCU_Tests.ttcn<br>1 file changed, 26 insertions(+), 12 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/59/18259/1</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 e11ff44..ce4ea8d 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -527,22 +527,26 @@</span><br><span> }</span><br><span> </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 style="color: hsl(0, 100%, 40%);">-runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT return integer {</span><br><span>   var octetstring data;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer padding_len;</span><br><span>     /* Encode the payload of DATA.ind */</span><br><span>         data := enc_RlcmacUlBlock(valueof(ul_data));</span><br><span style="color: hsl(120, 100%, 40%);">+  padding_len := 23 - lengthof(data);</span><br><span>  data := f_pad_oct(data, 23, '00'O); /* CS-1 */</span><br><span> </span><br><span>   /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */</span><br><span>     f_pcuif_tx_data_ind(data, lqual_cb, fn);</span><br><span style="color: hsl(120, 100%, 40%);">+      return padding_len;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tx_rlcmac_ul_n_blocks(uint5_t tfi, integer num_blocks := 1, template (omit) GprsTlli tlli := omit)</span><br><span style="color: hsl(0, 100%, 40%);">-runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tx_rlcmac_ul_n_blocks(uint5_t tfi, inout uint14_t bsn, integer num_blocks := 1, template (omit) GprsTlli tlli := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT return octetstring {</span><br><span style="color: hsl(120, 100%, 40%);">+   var octetstring total_payload := ''O;</span><br><span>        var template (value) RlcmacUlBlock ul_data := t_RLCMAC_UL_DATA(</span><br><span>              tfi := tfi,</span><br><span>          cv := 15, /* num UL blocks to be sent (to be overridden in loop) */</span><br><span style="color: hsl(0, 100%, 40%);">-             bsn := 0, /* TODO: what should be initial value? */</span><br><span style="color: hsl(120, 100%, 40%);">+           bsn := 0, /* To be generated in loop */</span><br><span>              blocks := { /* To be generated in loop */ });</span><br><span> </span><br><span>    if (not istemplatekind(tlli, "omit")) {</span><br><span>@@ -551,16 +555,21 @@</span><br><span>    }</span><br><span> </span><br><span>        for (var integer i := 0; i < num_blocks; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             var integer padding_len;</span><br><span style="color: hsl(120, 100%, 40%);">+              var octetstring payload := f_rnd_octstring(10);</span><br><span>              /* Prepare a new UL block (CV, random payload) */</span><br><span>            var integer cv := num_blocks - i - 1;</span><br><span>                if (cv > g_bs_cv_max) {</span><br><span>                   cv := 15;</span><br><span>            }</span><br><span>            ul_data.data.mac_hdr.countdown := cv;</span><br><span style="color: hsl(0, 100%, 40%);">-           ul_data.data.mac_hdr.bsn := i;</span><br><span style="color: hsl(0, 100%, 40%);">-          ul_data.data.blocks := { valueof(t_RLCMAC_LLCBLOCK(f_rnd_octstring(10))) };</span><br><span style="color: hsl(0, 100%, 40%);">-             f_tx_rlcmac_ul_block(ul_data);</span><br><span style="color: hsl(120, 100%, 40%);">+                ul_data.data.mac_hdr.bsn := bsn + i;</span><br><span style="color: hsl(120, 100%, 40%);">+          ul_data.data.blocks := { valueof(t_RLCMAC_LLCBLOCK(payload)) };</span><br><span style="color: hsl(120, 100%, 40%);">+               padding_len := f_tx_rlcmac_ul_block(ul_data);</span><br><span style="color: hsl(120, 100%, 40%);">+         total_payload := total_payload & payload & f_pad_oct(''O, padding_len, '00'O);</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+     bsn := valueof(ul_data.data.mac_hdr.bsn) + 1; /* update bsn to point to next one */</span><br><span style="color: hsl(120, 100%, 40%);">+   return total_payload;</span><br><span> }</span><br><span> </span><br><span> private function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block, out uint32_t dl_fn, template (present) CodingScheme exp_cs_mcs := ?)</span><br><span>@@ -1323,6 +1332,7 @@</span><br><span>     var boolean ok;</span><br><span>      var uint32_t unused_fn;</span><br><span>      var OCT4 tlli := '00000001'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ var uint14_t bsn := 0;</span><br><span> </span><br><span>   /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -1350,7 +1360,7 @@</span><br><span> </span><br><span>  /* Send one UL block (with TLLI since we are in One-Phase Access</span><br><span>        contention resoultion) and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">-     f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, bsn, 1, tlli);</span><br><span>    f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, unused_fn);</span><br><span>      /* UL block should be received in SGSN */</span><br><span>    BSSGP[0].receive(tr_BSSGP_UL_UD(tlli, mp_gb_cfg.cell_id));</span><br><span>@@ -1359,7 +1369,8 @@</span><br><span>   f_sleep(int2float(info_ind.t3169) + 1.0);</span><br><span> </span><br><span>        /* Send an UL block once again, the TBF should be gone by now so no ACK */</span><br><span style="color: hsl(0, 100%, 40%);">-      f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        bsn := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, bsn, 1);</span><br><span>  f_rx_rlcmac_dl_block_exp_dummy(dl_block);</span><br><span> </span><br><span>        f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span>@@ -1438,6 +1449,7 @@</span><br><span>      var uint32_t dl_fn;</span><br><span>  var OCT4 tlli := '00000001'O;</span><br><span>        var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init);</span><br><span style="color: hsl(120, 100%, 40%);">+   var uint14_t bsn := 0;</span><br><span> </span><br><span>   /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -1461,7 +1473,7 @@</span><br><span> </span><br><span>  /* Send one UL block (with TLLI since we are in One-Phase Access</span><br><span>        contention resoultion) and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">-     f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, bsn, 1, tlli);</span><br><span>    f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);</span><br><span>       /* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span>       f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);</span><br><span>@@ -1515,6 +1527,7 @@</span><br><span>         var OCT4 tlli := '00000001'O;</span><br><span>        var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init);</span><br><span>  var CodingScheme cs_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+      var uint14_t bsn := 0;</span><br><span>       /* 0111 0xxx: Single block packet access; one block period on a PDCH is needed for two phase packet access or other RR signalling purpose. */</span><br><span>        var uint16_t ra := oct2int('70'O);</span><br><span>   if (g_force_two_phase_access) {</span><br><span>@@ -1561,7 +1574,7 @@</span><br><span> </span><br><span>  /* Send one UL block (without TLLI since we are in Second-Phase Access)</span><br><span>         and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">-    f_tx_rlcmac_ul_n_blocks(f_rlcmac_dl_block_get_tfi(dl_block), 1);  /* TODO: send using cs_mcs */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_tx_rlcmac_ul_n_blocks(f_rlcmac_dl_block_get_tfi(dl_block), bsn, 1);  /* TODO: send using cs_mcs */</span><br><span> </span><br><span>     //f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);</span><br><span>     /* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span>@@ -1647,6 +1660,7 @@</span><br><span>       var uint32_t sched_fn;</span><br><span>       var uint32_t dl_fn;</span><br><span>  var OCT4 tlli := '00000001'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ var uint14_t bsn := 0;</span><br><span>       var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init);</span><br><span> </span><br><span>      /* Initialize NS/BSSGP side */</span><br><span>@@ -1687,7 +1701,7 @@</span><br><span> </span><br><span>   /* Send one UL block (with TLLI since we are in One-Phase Access</span><br><span>        contention resoultion) and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">-     f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, bsn, 1, tlli);</span><br><span>    f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);</span><br><span>       /* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span>       f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18259">change 18259</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/+/18259"/><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: I7dde6a2e71a9e64cf6c704eda37b47838460102b </div>
<div style="display:none"> Gerrit-Change-Number: 18259 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>