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