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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Parse TS and TRX allocation from Assignment in Ul/DlTbf objects<br><br>This will allow tests to use multitrx and multislot scenarios.<br><br>Change-Id: Ia2b9dd73f61c7068a729b427c118ae2ef027c30b<br>---<br>M pcu/GPRS_Components.ttcn<br>M pcu/PCU_Tests.ttcn<br>2 files changed, 69 insertions(+), 12 deletions(-)<br><br></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 e73609f..e6406b7 100644</span><br><span>--- a/pcu/GPRS_Components.ttcn</span><br><span>+++ b/pcu/GPRS_Components.ttcn</span><br><span>@@ -76,9 +76,11 @@</span><br><span> };</span><br><span> </span><br><span> type record DlTbf {</span><br><span style="color: hsl(0, 100%, 40%);">-   GsmRrMessage            rr_imm_ass,</span><br><span style="color: hsl(0, 100%, 40%);">-     PacketDlAssignChan      ass,</span><br><span style="color: hsl(120, 100%, 40%);">+  GsmRrMessage            rr_imm_ass optional,</span><br><span style="color: hsl(120, 100%, 40%);">+  PacketDlAssignChan      ass optional,</span><br><span>        uint5_t                 tfi,</span><br><span style="color: hsl(120, 100%, 40%);">+  GsmArfcn                arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+        BIT8                    ts_mask,</span><br><span>     AckNackDescription      acknack_desc</span><br><span> };</span><br><span> </span><br><span>@@ -92,6 +94,8 @@</span><br><span>   GsmRrMessage            rr_imm_ass optional,</span><br><span>         PacketUlAssignChan      ass optional,</span><br><span>        uint5_t                 tfi,</span><br><span style="color: hsl(120, 100%, 40%);">+  GsmArfcn                arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+        BIT8                    ts_mask,</span><br><span>     uint3_t                 usf[8],</span><br><span>      boolean                 is_egprs,</span><br><span>    uint14_t                bsn,</span><br><span>@@ -131,10 +135,21 @@</span><br><span>         dl_tbf := omit</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) DlTbf t_DlTbf_def := {</span><br><span style="color: hsl(120, 100%, 40%);">+     rr_imm_ass := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+   ass := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+  tfi := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+     arfcn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   ts_mask := '00000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+       acknack_desc := t_AckNackDescription_init</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> template (value) UlTbf t_UlTbf_def := {</span><br><span>   rr_imm_ass := omit,</span><br><span>  ass := omit,</span><br><span>         tfi := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+     arfcn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   ts_mask := '00000000'B,</span><br><span>      usf := { USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED },</span><br><span>   is_egprs := false,</span><br><span>   bsn := 0,</span><br><span>@@ -188,6 +203,11 @@</span><br><span>     var uint3_t tn_allocated := rr_imm_ass.payload.imm_ass.pkt_chan_desc.tn;</span><br><span> </span><br><span>         ul_tbf.rr_imm_ass := rr_imm_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (rr_imm_ass.payload.imm_ass.pkt_chan_desc.presence == '0'B and</span><br><span style="color: hsl(120, 100%, 40%);">+         rr_imm_ass.payload.imm_ass.pkt_chan_desc.zero.hopping == '0'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+          ul_tbf.arfcn := rr_imm_ass.payload.imm_ass.pkt_chan_desc.zero.arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     ul_tbf.ts_mask[tn_allocated] := '1'B;</span><br><span> </span><br><span>    /* Make sure we received an UL TBF Assignment */</span><br><span>     if (match(rr_imm_ass, tr_IMM_TBF_ASS(dl := false, rest := tr_IaRestOctets_ULAss(?)))) {</span><br><span>@@ -224,6 +244,8 @@</span><br><span> function f_ultbf_new_from_ass_pacch(RlcmacDlBlock dl_block)</span><br><span> runs on MS_BTS_IFACE_CT return UlTbf {</span><br><span>       var UlTbf ul_tbf := valueof(t_UlTbf_def);</span><br><span style="color: hsl(120, 100%, 40%);">+     var boolean freq_par_present := false;</span><br><span style="color: hsl(120, 100%, 40%);">+        var FrequencyParameters freq_par;</span><br><span> </span><br><span>        ul_tbf.ass.pacch := dl_block.ctrl.payload.u.ul_assignment;</span><br><span>   ul_tbf.tx_cs_mcs := f_rlcmac_dl_block_get_assigned_ul_cs_mcs(dl_block);</span><br><span>@@ -233,30 +255,51 @@</span><br><span>      /* TODO: support single block allocation */</span><br><span>  if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_GPRS(?, tr_PktUlAssGprsDynamic(tr_DynamicAllocation(?))))) {</span><br><span>             ul_tbf.tfi := dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ul_tfi_assignment;</span><br><span style="color: hsl(120, 100%, 40%);">+           freq_par_present := dl_block.ctrl.payload.u.ul_assignment.gprs.freq_par_present == '1'B;</span><br><span style="color: hsl(120, 100%, 40%);">+              if (freq_par_present) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       freq_par := dl_block.ctrl.payload.u.ul_assignment.gprs.freq_par;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span>            ul_tbf.is_egprs := false;</span><br><span>            for (var integer i := 0; i < 8; i := i + 1) {</span><br><span>                     if (dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ts_allocation.ts[i].presence == '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                ul_tbf.ts_mask[i] := '1'B;</span><br><span>                           ul_tbf.usf[i] := dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ts_allocation.ts[i].usf_tn;</span><br><span>                      }</span><br><span>            }</span><br><span>    } else if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_EGPRS(?, tr_PktUlAssEgprsDynamic(tr_DynamicAllocation(?))))) {</span><br><span>            ul_tbf.tfi := dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ul_tfi_assignment;</span><br><span style="color: hsl(120, 100%, 40%);">+          freq_par_present := dl_block.ctrl.payload.u.ul_assignment.egprs.freq_par_present == '1'B;</span><br><span style="color: hsl(120, 100%, 40%);">+             if (freq_par_present) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       freq_par := dl_block.ctrl.payload.u.ul_assignment.egprs.freq_par;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            ul_tbf.is_egprs := true;</span><br><span>             for (var integer i := 0; i < 8; i := i + 1) {</span><br><span>                     if (dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ts_allocation.ts[i].presence == '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               ul_tbf.ts_mask[i] := '1'B;</span><br><span>                           ul_tbf.usf[i] := dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ts_allocation.ts[i].usf_tn;</span><br><span>                     }</span><br><span>            }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* FIXME: freq_par and arfcn are optional. in that case we need to</span><br><span style="color: hsl(120, 100%, 40%);">+     * infer/reuse from current dl_tbf or ul_tbf */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (freq_par_present and freq_par.presence == '00'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+                ul_tbf.arfcn := freq_par.arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  return ul_tbf;</span><br><span> }</span><br><span> </span><br><span> function f_dltbf_new_from_rr_imm_ass(in GsmRrMessage rr_imm_ass, template PacketDlAssign dl_ass := tr_PacketDlAssign(?))</span><br><span> runs on MS_BTS_IFACE_CT return DlTbf {</span><br><span style="color: hsl(0, 100%, 40%);">-   var DlTbf dl_tbf;</span><br><span style="color: hsl(120, 100%, 40%);">+     var DlTbf dl_tbf := valueof(t_DlTbf_def);</span><br><span> </span><br><span>        dl_tbf.rr_imm_ass := rr_imm_ass;</span><br><span style="color: hsl(0, 100%, 40%);">-        dl_tbf.acknack_desc := valueof(t_AckNackDescription_init);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rr_imm_ass.payload.imm_ass.pkt_chan_desc.presence == '0'B and</span><br><span style="color: hsl(120, 100%, 40%);">+         rr_imm_ass.payload.imm_ass.pkt_chan_desc.zero.hopping == '0'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+          dl_tbf.arfcn := rr_imm_ass.payload.imm_ass.pkt_chan_desc.zero.arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     dl_tbf.ts_mask[rr_imm_ass.payload.imm_ass.pkt_chan_desc.tn] := '1'B;</span><br><span> </span><br><span>     /* Make sure we received a DL TBF Assignment */</span><br><span>      if (match(rr_imm_ass, tr_IMM_TBF_ASS(dl := true, rest := tr_IaRestOctets_DLAss(dl_ass)))) {</span><br><span>@@ -279,15 +322,31 @@</span><br><span>  return dl_tbf;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* TODO: get stuff from f_rx_rlcmac_dl_block_exp_pkt_ass */</span><br><span> function f_dltbf_new_from_ass_pacch(RlcmacDlBlock dl_block)</span><br><span> runs on MS_BTS_IFACE_CT return DlTbf {</span><br><span style="color: hsl(0, 100%, 40%);">-     var DlTbf dl_tbf;</span><br><span style="color: hsl(120, 100%, 40%);">+     var DlTbf dl_tbf := valueof(t_DlTbf_def);</span><br><span style="color: hsl(120, 100%, 40%);">+     var boolean freq_par_present := false;</span><br><span style="color: hsl(120, 100%, 40%);">+        var FrequencyParameters freq_par;</span><br><span> </span><br><span>        dl_tbf.ass.pacch := dl_block.ctrl.payload.u.dl_assignment;</span><br><span>   dl_tbf.tfi := f_rlcmac_dl_block_get_tfi(dl_block);</span><br><span>   /* TODO: handle GlobalTfiOrTlli  tfi_or_tlli from pkt_dl_ass */</span><br><span style="color: hsl(0, 100%, 40%);">- dl_tbf.acknack_desc := valueof(t_AckNackDescription_init);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (match(dl_block, tr_RLCMAC_DL_PACKET_ASS(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+            dl_tbf.tfi := dl_block.ctrl.payload.u.dl_assignment.dl_tfi_assignment;</span><br><span style="color: hsl(120, 100%, 40%);">+                freq_par_present := dl_block.ctrl.payload.u.dl_assignment.freq_par_present == '1'B;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (freq_par_present) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       freq_par := dl_block.ctrl.payload.u.dl_assignment.freq_par;</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+             dl_tbf.ts_mask := dl_block.ctrl.payload.u.dl_assignment.timeslot_alloc; /* TODO: is this the correct order ? */</span><br><span style="color: hsl(120, 100%, 40%);">+               /* TODO: check egprs in dl_assignment.rel_additions (PktDlAssR99Additions) */</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%);">+   /* FIXME: freq_par and arfcn are optional. in that case we need to</span><br><span style="color: hsl(120, 100%, 40%);">+     * infer/reuse from current dl_tbf or ul_tbf */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (freq_par_present and freq_par.presence == '00'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+                dl_tbf.arfcn := freq_par.arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span>    return dl_tbf;</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 0a44a18..df075bc 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -2522,11 +2522,9 @@</span><br><span>          different TRX in an uniform way. */</span><br><span>        for (i := 0; i < num_ms; i := i + 1) {</span><br><span>            f_ms_establish_ul_tbf(g_ms[i]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         var uint10_t arfcn := g_ms[i].ul_tbf.rr_imm_ass.payload.imm_ass.pkt_chan_desc.zero.arfcn;</span><br><span style="color: hsl(0, 100%, 40%);">-               if (arfcn != info_ind.trx.v10[i mod 3].arfcn) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 setverdict(fail, "Got assigned ARFCN ", arfcn, " vs exp ",</span><br><span style="color: hsl(0, 100%, 40%);">-                             info_ind.trx.v10[i mod 3].arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+          if (g_ms[i].ul_tbf.arfcn != info_ind.trx.v10[i mod 3].arfcn) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        setverdict(fail, "Got assigned ARFCN ", g_ms[i].ul_tbf.arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  " vs exp ", info_ind.trx.v10[i mod 3].arfcn);</span><br><span>                   f_shutdown(__BFILE__, __LINE__);</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/+/20946">change 20946</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/+/20946"/><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: Ia2b9dd73f61c7068a729b427c118ae2ef027c30b </div>
<div style="display:none"> Gerrit-Change-Number: 20946 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </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: fixeria <vyanitskiy@sysmocom.de> </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-MessageType: merged </div>