<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18335">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add initial support for Packet Uplink Ack/nack EGPRS Struct<br><br>Some stuff like EGPRS Ack/Nack description is still not implemented, but<br>it's enouh for now to be able to match against this kind of ACK blocks.<br><br>Change-Id: I8066fba0e71911f0c6344c1540a501f1853daa7f<br>---<br>M library/RLCMAC_CSN1_Templates.ttcn<br>M library/RLCMAC_CSN1_Types.ttcn<br>M library/RLCMAC_Templates.ttcn<br>M pcu/GPRS_Components.ttcn<br>4 files changed, 102 insertions(+), 21 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/35/18335/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 772df13..eebda7f 100644</span><br><span>--- a/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>@@ -217,4 +217,32 @@</span><br><span>            multi_block_alloc := omit</span><br><span>    };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        template UlAckNackGprs tr_UlAckNackGprs(template GprsTlli tlli := *) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             ch_coding_cmd := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           ack_nack_desc := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           cont_res_tlli_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           cont_res_tlli := tlli,</span><br><span style="color: hsl(120, 100%, 40%);">+                pkt_ta_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+          pkt_ta := *,</span><br><span style="color: hsl(120, 100%, 40%);">+          pwr_ctrl_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                pwr_ctrl := *</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 UlAckNackEgprs tr_UlAckNackEgprs(template GprsTlli tlli := *) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           ch_coding_cmd := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           resegment := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+               preemptive_tx := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           prr_retrans_req := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+         arac_retrans_req := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                cont_res_tlli_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           cont_res_tlli := tlli,</span><br><span style="color: hsl(120, 100%, 40%);">+                tbf_est := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+         pkt_ta_present := ?,</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%);">+              pwr_ctrl_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                pwr_ctrl := *</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 d4c6efd..1f1fb0a 100644</span><br><span>--- a/library/RLCMAC_CSN1_Types.ttcn</span><br><span>+++ b/library/RLCMAC_CSN1_Types.ttcn</span><br><span>@@ -395,14 +395,44 @@</span><br><span>             variant (pwr_ctrl)      "PRESENCE(pwr_ctrl_present = '1'B)"</span><br><span>                variant (cont_res_tlli) "BYTEORDER(first)"</span><br><span>         };</span><br><span style="color: hsl(120, 100%, 40%);">+    type record UlAckNackEgprs {</span><br><span style="color: hsl(120, 100%, 40%);">+          EgprsChCodingCommand    ch_coding_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+                BIT1                    resegment,</span><br><span style="color: hsl(120, 100%, 40%);">+            BIT1                    preemptive_tx,</span><br><span style="color: hsl(120, 100%, 40%);">+                BIT1                    prr_retrans_req,</span><br><span style="color: hsl(120, 100%, 40%);">+              BIT1                    arac_retrans_req,</span><br><span style="color: hsl(120, 100%, 40%);">+             BIT1                    cont_res_tlli_present,</span><br><span style="color: hsl(120, 100%, 40%);">+                GprsTlli                cont_res_tlli optional,</span><br><span style="color: hsl(120, 100%, 40%);">+               BIT1                    tbf_est,</span><br><span style="color: hsl(120, 100%, 40%);">+              BIT1                    pkt_ta_present,</span><br><span style="color: hsl(120, 100%, 40%);">+               PacketTimingAdvance     pkt_ta optional,</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                    pwr_ctrl_present,</span><br><span style="color: hsl(120, 100%, 40%);">+             PowerControlParameters  pwr_ctrl optional</span><br><span style="color: hsl(120, 100%, 40%);">+             /* TODO: TS 44.060 12.3.1  EGPRS Ack/Nack Description */</span><br><span style="color: hsl(120, 100%, 40%);">+              /* EgprsAckNackDescription      ack_nack_desc, */</span><br><span style="color: hsl(120, 100%, 40%);">+             /* BIT1                 not_used('0'B) */</span><br><span style="color: hsl(120, 100%, 40%);">+             /* TODO: Extension Bits, Rel5 ,... */</span><br><span style="color: hsl(120, 100%, 40%);">+ } with {</span><br><span style="color: hsl(120, 100%, 40%);">+              variant (cont_res_tlli) "PRESENCE(cont_res_tlli_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+            variant (pkt_ta)        "PRESENCE(pkt_ta_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 (pwr_ctrl)      "PRESENCE(pwr_ctrl_present = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+         variant (cont_res_tlli) "BYTEORDER(first)"</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span>   type record PacketUlAckNack {</span><br><span>                PageMode                page_mode,</span><br><span>           BIT2                    msg_excape ('00'B),</span><br><span>          uint5_t                 uplink_tfi,</span><br><span style="color: hsl(0, 100%, 40%);">-             BIT1                    is_egprs ('0'B),        /* msg escape */</span><br><span style="color: hsl(0, 100%, 40%);">-                UlAckNackGprs           gprs optional</span><br><span style="color: hsl(120, 100%, 40%);">+         BIT1                    is_egprs,</span><br><span style="color: hsl(120, 100%, 40%);">+             UlAckNackGprs           gprs optional,</span><br><span style="color: hsl(120, 100%, 40%);">+                UlAckNackEgprs          egprs optional</span><br><span>               /* TODO: EGPRS */</span><br><span style="color: hsl(0, 100%, 40%);">-       } with { variant (gprs) "PRESENCE(is_egprs = '0'B)" };</span><br><span style="color: hsl(120, 100%, 40%);">+      } with {</span><br><span style="color: hsl(120, 100%, 40%);">+              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 style="color: hsl(120, 100%, 40%);">+ };</span><br><span> </span><br><span>       /* 11.2.8 Packet Downlink Dummy Control Block */</span><br><span>     type record PacketDlDummy {</span><br><span>diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn</span><br><span>index 1774197..0ffa840 100644</span><br><span>--- a/library/RLCMAC_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_Templates.ttcn</span><br><span>@@ -508,7 +508,7 @@</span><br><span>   }</span><br><span> </span><br><span>        /* Receive Template for Uplink ACK/NACK */</span><br><span style="color: hsl(0, 100%, 40%);">-      template RlcmacDlBlock tr_RLCMAC_UL_ACK_NACK(template uint5_t ul_tfi, template GprsTlli tlli := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       template RlcmacDlBlock tr_RLCMAC_UL_ACK_NACK(template uint5_t ul_tfi) := {</span><br><span>           ctrl := {</span><br><span>                    mac_hdr := {</span><br><span>                                 payload_type := (MAC_PT_RLCMAC_NO_OPT, MAC_PT_RLCMAC_OPT),</span><br><span>@@ -524,22 +524,44 @@</span><br><span>                                           page_mode := ?,</span><br><span>                                              msg_excape := ?,</span><br><span>                                             uplink_tfi := ul_tfi,</span><br><span style="color: hsl(0, 100%, 40%);">-                                           is_egprs := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               gprs := {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       ch_coding_cmd := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     ack_nack_desc := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     cont_res_tlli_present := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     cont_res_tlli := tlli,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  pkt_ta_present := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    pkt_ta := *,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    pwr_ctrl_present := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  pwr_ctrl := *</span><br><span style="color: hsl(0, 100%, 40%);">-                                           }</span><br><span style="color: hsl(120, 100%, 40%);">+                                             is_egprs := ?,</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>            }</span><br><span style="color: hsl(0, 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_ACK_NACK_GPRS(template uint5_t ul_tfi, template UlAckNackGprs gprs := tr_UlAckNackGprs(*))</span><br><span style="color: hsl(120, 100%, 40%);">+        modifies tr_RLCMAC_UL_ACK_NACK := {</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_ack_nack := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                              is_egprs := '0'B,</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_ACK_NACK_EGPRS(template uint5_t ul_tfi, template UlAckNackEgprs egprs := tr_UlAckNackEgprs(*))</span><br><span style="color: hsl(120, 100%, 40%);">+    modifies tr_RLCMAC_UL_ACK_NACK := {</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_ack_nack := {</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 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> </span><br><span>       template RlcmacDlBlock tr_RLCMAC_PACKET_PAG_REQ(template uint3_t usf := ?) := {</span><br><span>              ctrl := {</span><br><span>diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn</span><br><span>index d31f1f4..ae21001 100644</span><br><span>--- a/pcu/GPRS_Components.ttcn</span><br><span>+++ b/pcu/GPRS_Components.ttcn</span><br><span>@@ -414,12 +414,13 @@</span><br><span>       var uint32_t dl_fn;</span><br><span> </span><br><span>      f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (not match(dl_block, tr_RLCMAC_UL_ACK_NACK(ul_tfi := ?, tlli := ?))) {</span><br><span style="color: hsl(0, 100%, 40%);">-               setverdict(fail, "Failed to match Packet Uplink ACK / NACK");</span><br><span style="color: hsl(0, 100%, 40%);">-         f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (match(dl_block, tr_RLCMAC_UL_ACK_NACK_GPRS(ul_tfi := ?)) or</span><br><span style="color: hsl(120, 100%, 40%);">+           match(dl_block, tr_RLCMAC_UL_ACK_NACK_EGPRS(ul_tfi := ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+              poll_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+          return;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       poll_fn := f_rrbp_ack_fn(dl_fn, dl_block.ctrl.mac_hdr.rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+  setverdict(fail, "Failed to match Packet Uplink ACK / NACK:", dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span> </span><br><span> function f_rx_rlcmac_dl_block_exp_dummy(out RlcmacDlBlock dl_block)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18335">change 18335</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/+/18335"/><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: I8066fba0e71911f0c6344c1540a501f1853daa7f </div>
<div style="display:none"> Gerrit-Change-Number: 18335 </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>