<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>