<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19076">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  neels: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Support sending with CS other than CS1 in f_ms_tx_ul_block()<br><br>Change-Id: Ibafa4246b442e7c26666eb0d37570bfbbf1dbda7<br>---<br>M library/RLCMAC_Templates.ttcn<br>M pcu/GPRS_Components.ttcn<br>2 files changed, 45 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn</span><br><span>index 848052e..560074f 100644</span><br><span>--- a/library/RLCMAC_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_Templates.ttcn</span><br><span>@@ -93,6 +93,30 @@</span><br><span>                return CS_1;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Minimum CodingScheme required to fit RLCMAC block */</span><br><span style="color: hsl(120, 100%, 40%);">+       function f_rlcmac_block_len_required_cs_mcs(uint32_t len, boolean is_mcs) return CodingScheme {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (is_mcs) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (len <= 27) { return MCS_1; }</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (len <= 33) { return MCS_2; }</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (len <= 42) { return MCS_3; }</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (len <= 49) { return MCS_4; }</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (len <= 60) { return MCS_5; }</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (len <= 61) { return MCS_5; }</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (len <= 79) { return MCS_6; }</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (len <= 119) { return MCS_7; }</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (len <= 143) { return MCS_8; }</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (len <= 155) { return MCS_9; }</span><br><span style="color: hsl(120, 100%, 40%);">+                  return MCS_1; /* error! */</span><br><span style="color: hsl(120, 100%, 40%);">+            } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* 3GPP TS 44.060 Table 10.2.1: RLC data block size, discounting padding in octet */</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (len <= 23) { return CS_1; }</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (len <= 33) { return CS_2; }</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (len <= 39) { return CS_3; }</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (len <= 53) { return CS_4; }</span><br><span style="color: hsl(120, 100%, 40%);">+                    return CS_1; /* error! */</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>  function f_rlcmac_block_ChCodingCommand2cs_mcs(ChCodingCommand chcc) return CodingScheme {</span><br><span>           select (chcc) {</span><br><span>                      case (CH_CODING_CS1) { return CS_1; }</span><br><span>diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn</span><br><span>index 3eb3f9f..6018b7b 100644</span><br><span>--- a/pcu/GPRS_Components.ttcn</span><br><span>+++ b/pcu/GPRS_Components.ttcn</span><br><span>@@ -333,14 +333,32 @@</span><br><span>   f_pcuif_tx_data_ind(data, ms.lqual_cb, fn);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_ms_tx_ul_block(inout GprsMS ms, template (value) RlcmacUlBlock ul_data, uint32_t fn := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ms_tx_ul_block(inout GprsMS ms, template (value) RlcmacUlBlock ul_data, uint32_t fn := 0, template (omit) CodingScheme force_cs_mcs := omit)</span><br><span> runs on MS_BTS_IFACE_CT return integer {</span><br><span>        var octetstring data;</span><br><span>        var integer padding_len;</span><br><span style="color: hsl(120, 100%, 40%);">+      var CodingScheme cs_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+      var uint32_t cs_mcs_len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* Encode the payload of DATA.ind */</span><br><span>         data := enc_RlcmacUlBlock(valueof(ul_data));</span><br><span style="color: hsl(0, 100%, 40%);">-    padding_len := 23 - lengthof(data);</span><br><span style="color: hsl(0, 100%, 40%);">-     data := f_pad_oct(data, 23, '00'O); /* CS-1 */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (ispresent(force_cs_mcs)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                cs_mcs := valueof(force_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+      } else if (ischosen(ul_data.ctrl)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          cs_mcs := CS_1; /* CTRL is always CS1 */</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Add padding to encode payload to minimum required CS/MCS: */</span><br><span style="color: hsl(120, 100%, 40%);">+               cs_mcs := f_rlcmac_block_len_required_cs_mcs(lengthof(data), ischosen(ul_data.data_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%);">+   cs_mcs_len := f_rlcmac_cs_mcs2block_len(cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+      padding_len := cs_mcs_len - lengthof(data);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (padding_len < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Unable to encode UL block of size ", lengthof(data), " with ", cs_mcs);</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 style="color: hsl(120, 100%, 40%);">+     data := f_pad_oct(data, cs_mcs_len, '00'O);</span><br><span> </span><br><span>      /* Enqueue DATA.ind (both TDMA frame and block numbers to be patched) */</span><br><span>     f_ms_tx_data_ind(ms, data, fn);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19076">change 19076</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/+/19076"/><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: Ibafa4246b442e7c26666eb0d37570bfbbf1dbda7 </div>
<div style="display:none"> Gerrit-Change-Number: 19076 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>