<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20946">View Change</a></p><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>1 file changed, 51 insertions(+), 8 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/46/20946/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 6f3e3e2..ec62671 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%);">+  uint10_t                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%);">+  uint10_t                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,13 @@</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 == '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* TODO: Frequency Hopping: take MAIO and so from .one. */</span><br><span style="color: hsl(120, 100%, 40%);">+            ul_tbf.arfcn := 871;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</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>@@ -233,17 +255,22 @@</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%);">+           // FIXME: freq_par and arfcn are optional. in that case we need to infer/reuse from current dl_tbf or ul_tbf */</span><br><span style="color: hsl(120, 100%, 40%);">+               ul_tbf.arfcn := dl_block.ctrl.payload.u.ul_assignment.gprs.freq_par.arfcn;</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%);">+          ul_tbf.arfcn := dl_block.ctrl.payload.u.ul_assignment.egprs.freq_par.arfcn;</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>@@ -253,10 +280,16 @@</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 == '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* TODO: Frequency Hopping: take MAIO and so from .one. */</span><br><span style="color: hsl(120, 100%, 40%);">+            dl_tbf.arfcn := 871;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</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 +312,21 @@</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> </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%);">+                // FIXME: freq_par and arfcn are optional. in that case we need to infer/reuse from current dl_tbf or ul_tbf */</span><br><span style="color: hsl(120, 100%, 40%);">+               dl_tbf.arfcn := dl_block.ctrl.payload.u.dl_assignment.freq_par.arfcn;</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>    return dl_tbf;</span><br><span> }</span><br><span> </span><br><span>@@ -331,7 +370,11 @@</span><br><span>              }</span><br><span>     } else if (match(dl_block, tr_RLCMAC_DL_PACKET_ASS)) {</span><br><span>               ms.dl_tbf := f_dltbf_new_from_ass_pacch(dl_block);</span><br><span style="color: hsl(0, 100%, 40%);">-              /* TODO: match tlli from ms.dl_tbf.ass.pacch with ms.tlli), or error */</span><br><span style="color: hsl(120, 100%, 40%);">+               if (ischosen(ms.dl_tbf.ass.pacch.tfi_or_tlli.tlli) and</span><br><span style="color: hsl(120, 100%, 40%);">+                    ms.dl_tbf.ass.pacch.tfi_or_tlli.tlli.tlli != ms.tlli) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(fail, "Wrong TLLI ", ms.dl_tbf.ass.pacch.tfi_or_tlli.tlli.tlli, " received vs exp ", ms.tlli);</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>    } else {</span><br><span>             setverdict(fail, "Should not happen:", dl_block);</span><br><span>          f_shutdown(__BFILE__, __LINE__);</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: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>