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