<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18252">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Support decoding Egprs Pkt Ul Ass on PDCH<br><br>Change-Id: I30fb98aab67303997b803a0359ffc2e0b65ebf01<br>---<br>M library/RLCMAC_CSN1_Templates.ttcn<br>M library/RLCMAC_CSN1_Types.ttcn<br>M library/RLCMAC_Templates.ttcn<br>M pcu/PCU_Tests.ttcn<br>4 files changed, 131 insertions(+), 18 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/52/18252/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/RLCMAC_CSN1_Templates.ttcn b/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>index 2c1bc04..772df13 100644</span><br><span>--- a/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>@@ -167,27 +167,54 @@</span><br><span> return '1'B;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- template PktUlAssGprs tr_PktUlAssGprsDynamic(template uint5_t tfi := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ template DynamicAllocation tr_DynamicAllocation(template uint5_t tfi:= ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ extd_dyn_alloc := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ p0_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ p0 := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ pr_mode := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ usf_granularity := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ ul_tfi_ass_present := f_presence_bit_tfi(tfi),</span><br><span style="color: hsl(120, 100%, 40%);">+ ul_tfi_assignment := tfi,</span><br><span style="color: hsl(120, 100%, 40%);">+ reserved := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ tbf_starting_time_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ tbf_starting_time := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_allocation := ?</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%);">+ template PktUlAssGprs tr_PktUlAssGprsDynamic(template DynamicAllocation dyn_alloc := ?) := {</span><br><span> ch_coding_cmd := ?,</span><br><span> tlli_block_chan_coding := ?,</span><br><span> pkt_ta := ?,</span><br><span> freq_par_present := ?,</span><br><span> freq_par := *,</span><br><span> alloc_present := '01'B,</span><br><span style="color: hsl(0, 100%, 40%);">- dyn_block_alloc := {</span><br><span style="color: hsl(0, 100%, 40%);">- extd_dyn_alloc := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- p0_present := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- p0 := *,</span><br><span style="color: hsl(0, 100%, 40%);">- pr_mode := *,</span><br><span style="color: hsl(0, 100%, 40%);">- usf_granularity := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- ul_tfi_ass_present := f_presence_bit_tfi(tfi),</span><br><span style="color: hsl(0, 100%, 40%);">- ul_tfi_assignment := tfi,</span><br><span style="color: hsl(0, 100%, 40%);">- reserved := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">- tbf_starting_time_present := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- tbf_starting_time := *,</span><br><span style="color: hsl(0, 100%, 40%);">- ts_allocation := ?</span><br><span style="color: hsl(0, 100%, 40%);">- },</span><br><span style="color: hsl(120, 100%, 40%);">+ dyn_block_alloc := dyn_alloc,</span><br><span> sgl_block_alloc := omit</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template PktUlAssEgprs tr_PktUlAssEgprsDynamic(template DynamicAllocation dyn_alloc := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ dual_carrier := '00'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ tlli_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ tlli := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ compact_reduced_ma_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ compact_reduced_ma := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ chan_coding_cmd := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ resegment := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ window_size := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ ats_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ ats := *, /* ? */</span><br><span style="color: hsl(120, 100%, 40%);">+ arac_retrans_req := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ tlli_block_chan_coding := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ bep_period2_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ bep_period2 := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ pkt_ta := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ pkt_ext_ta_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ pkt_ext_ta := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ freq_par_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ freq_par := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ alloc_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ dyn_block_alloc := dyn_alloc,</span><br><span style="color: hsl(120, 100%, 40%);">+ multi_block_alloc := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> } with { encode "RAW"; variant "FIELDORDER(msb)" variant "BYTEORDER(last)" };</span><br><span>diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn</span><br><span>index 447e52b..a74789d 100644</span><br><span>--- a/library/RLCMAC_CSN1_Types.ttcn</span><br><span>+++ b/library/RLCMAC_CSN1_Types.ttcn</span><br><span>@@ -233,6 +233,16 @@</span><br><span> variant (dyn_block_alloc) "PRESENCE(alloc_present = '01'B)"</span><br><span> variant (sgl_block_alloc) "PRESENCE(alloc_present = '10'B)"</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+ type record COMPACTreducedMA {</span><br><span style="color: hsl(120, 100%, 40%);">+ uint7_t ma_bitmap_length,</span><br><span style="color: hsl(120, 100%, 40%);">+ bitstring ma_bitmap,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 maio_2_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT6 maio_2</span><br><span style="color: hsl(120, 100%, 40%);">+ } with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (ma_bitmap_length) "LENGTHTO (ma_bitmap)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (ma_bitmap_length) "UNIT(bits)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (maio_2) "PRESENCE(maio_2_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span> type record of AccessTechnologiesRequest AccessTechnologiesRequestRepetition</span><br><span> with { variant "EXTENSION_BIT(reverse)" };</span><br><span> type record AccessTechnologiesRequest</span><br><span>@@ -240,16 +250,72 @@</span><br><span> BIT4 accessTechnType,</span><br><span> BIT1 extensionBit</span><br><span> } with { variant "FIELDORDER(msb)" };</span><br><span style="color: hsl(120, 100%, 40%);">+ type record MultiBlockAllocation {</span><br><span style="color: hsl(120, 100%, 40%);">+ uint3_t timeslot_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 alpha_gamma_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint4_t alpha optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint5_t gamma_tn optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 p0_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint4_t p0 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 reserved ('0'B) optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 pr_mode optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ StartingFnDesc tbf_starting_time,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint2_t num_radio_blocks_alloc</span><br><span style="color: hsl(120, 100%, 40%);">+ } with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (alpha) "PRESENCE(alpha_gamma_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (gamma_tn) "PRESENCE(alpha_gamma_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (p0) "PRESENCE(p0_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (reserved) "PRESENCE(p0_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (pr_mode) "PRESENCE(p0_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+ type record PktUlAssEgprs {</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT2 dual_carrier('00'B), /*TODO 01 -- Message escape for dual carrier, RTTI, BTTI with FANR activated, EGPRS2 */</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 tlli_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ GprsTlli tlli optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 compact_reduced_ma_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ COMPACTreducedMA compact_reduced_ma optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ EgprsChCodingCommand chan_coding_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 resegment,</span><br><span style="color: hsl(120, 100%, 40%);">+ EgprsWindowSize window_size,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 ats_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ AccessTechnologiesRequestRepetition ats optional, /* ? */</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 arac_retrans_req,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 tlli_block_chan_coding,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 bep_period2_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT4 bep_period2 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ PacketTimingAdvance pkt_ta,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 pkt_ext_ta_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT2 pkt_ext_ta optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT1 freq_par_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ FrequencyParameters freq_par optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ BIT2 alloc_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ DynamicAllocation dyn_block_alloc optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ MultiBlockAllocation multi_block_alloc optional</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: Additions for Rel-5 and more */</span><br><span style="color: hsl(120, 100%, 40%);">+ } with {</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (tlli) "PRESENCE(tlli_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (compact_reduced_ma) "PRESENCE(compact_reduced_ma_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (ats) "PRESENCE(ats_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (bep_period2) "PRESENCE(bep_period2_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (pkt_ext_ta) "PRESENCE(pkt_ext_ta_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (freq_par) "PRESENCE(freq_par_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (dyn_block_alloc) "PRESENCE(alloc_present = '01'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (multi_block_alloc) "PRESENCE(alloc_present = '10'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span> type record PacketUlAssignment {</span><br><span> PageMode page_mode,</span><br><span> BIT1 persistence_levels_present,</span><br><span> PersistenceLevels persistence_levels optional,</span><br><span> PktUlAssUnion identity,</span><br><span> BIT1 is_egprs, /* msg escape */</span><br><span style="color: hsl(0, 100%, 40%);">- PktUlAssGprs gprs optional</span><br><span style="color: hsl(120, 100%, 40%);">+ PktUlAssGprs gprs optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ PktUlAssEgprs egprs optional</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: Table 11.2.29.1: PACKET UPLINK ASSIGNMENT information elements</span><br><span style="color: hsl(120, 100%, 40%);">+ https://www.etsi.org/deliver/etsi_ts/144000_144099/144060/09.03.00_60/ts_144060v090300p.pdf */</span><br><span> } with {</span><br><span> variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"</span><br><span> variant (gprs) "PRESENCE(is_egprs = '0'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (egprs) "PRESENCE(is_egprs = '1'B)"</span><br><span> };</span><br><span> </span><br><span> /* 11.2.10 Packet Paging Request */</span><br><span>diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn</span><br><span>index 0bd9792..be751d7 100644</span><br><span>--- a/library/RLCMAC_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_Templates.ttcn</span><br><span>@@ -429,7 +429,8 @@</span><br><span> persistence_levels := *,</span><br><span> identity := ?,</span><br><span> is_egprs := ?, /* msg escape */</span><br><span style="color: hsl(0, 100%, 40%);">- gprs := *</span><br><span style="color: hsl(120, 100%, 40%);">+ gprs := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ egprs := *</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span>@@ -443,7 +444,23 @@</span><br><span> u := {</span><br><span> ul_assignment := {</span><br><span> is_egprs := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">- gprs := gprs</span><br><span style="color: hsl(120, 100%, 40%);">+ gprs := gprs,</span><br><span style="color: hsl(120, 100%, 40%);">+ egprs := omit</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%);">+ }</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ template RlcmacDlBlock tr_RLCMAC_UL_PACKET_ASS_EGPRS(template uint3_t usf := ?, template PktUlAssEgprs egprs := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+ modifies tr_RLCMAC_UL_PACKET_ASS := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ctrl := {</span><br><span style="color: hsl(120, 100%, 40%);">+ payload := {</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ul_assignment := {</span><br><span style="color: hsl(120, 100%, 40%);">+ is_egprs := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ gprs := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ egprs := egprs</span><br><span> }</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 5b822bb..18189fa 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -250,9 +250,12 @@</span><br><span> } else if (ischosen(dl_block.data_egprs)) {</span><br><span> return dl_block.data_egprs.mac_hdr.tfi;</span><br><span> } else { /* Ctrl block */</span><br><span style="color: hsl(0, 100%, 40%);">- if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_GPRS(?, tr_PktUlAssGprsDynamic(?)))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_GPRS(?, tr_PktUlAssGprsDynamic(tr_DynamicAllocation(?))))) {</span><br><span> return dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ul_tfi_assignment;</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+ if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_EGPRS(?, tr_PktUlAssEgprsDynamic(tr_DynamicAllocation(?))))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ul_tfi_assignment;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> setverdict(fail, "DlBlock doesn't contain a TFI:", 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/+/18252">change 18252</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/+/18252"/><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: I30fb98aab67303997b803a0359ffc2e0b65ebf01 </div>
<div style="display:none"> Gerrit-Change-Number: 18252 </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>