<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19991">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library/PCUIF_Types: version 10: add Mobile Allocation length field<br><br>My initial assumption was that we can skip redundant '0'B bits or<br>even '00'O octets in the Mobile Allocation IE, and thus reduce<br>the overall size of this element.  Unfortunately, this is wrong.<br><br>3GPP TS 44.018, section 10.5.2.21 clearly states that the Mobile<br>Allocation IE contains a bit-string of size NF, where NF is the<br>number of frequencies in the cell allocation.  If NF % 8 != 0,<br>then '0'B padding bits must be appended to make it octet-aligned.<br><br>In other words, if the cell allocation contains let's say 13<br>frequencies, but a hopping timeslot makes use of only a small<br>fraction of it (e.g. 4 first channels), we would still need to<br>transmit at least 13 bits (+padding), including all redundant<br>bits and octets.<br><br>In RLC/MAC frames though it's not required to make the bit-string<br>octet aligned, so we need to send exactly NF bits without padding.<br><br>In order to achieve that:<br><br>  a) add MA length field to INFO.ind (record PCUIF_InfoTrxTs);<br>  b) ajust the existing test cases to use this field.<br><br>It's safe to merge this change as the related patches have not<br>been merged to osmo-pcu and osmo-bts yet.<br><br>Change-Id: I2709673c90a0cd7d76de9db8b8ad82ac59ca84a0<br>Related: SYS#4868, OS#4547<br>---<br>M library/PCUIF_Types.ttcn<br>M pcu/PCU_Tests.ttcn<br>2 files changed, 15 insertions(+), 23 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/91/19991/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn</span><br><span>index 8144d97..f0200af 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -145,6 +145,7 @@</span><br><span>      uint8_t                 hopping,</span><br><span>     uint8_t                 hsn,</span><br><span>         uint8_t                 maio,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t                 ma_bit_len,</span><br><span>  bitstring               ma length(64)</span><br><span> } with { variant (ma) "BYTEORDER(first), BITORDER(msb)" };</span><br><span> private type record length(8) of PCUIF_InfoTrxTs PCUIF_InfoTrxTsList;</span><br><span>@@ -709,12 +710,14 @@</span><br><span>       tsc := tsc,</span><br><span>  hopping := 0,</span><br><span>        hsn := 0, maio := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+  ma_bit_len := 0,</span><br><span>     ma := f_pad_bit(''B, 64, '0'B)</span><br><span> };</span><br><span> template PCUIF_InfoTrxTs tr_PCUIF_InfoTrxTsH0(template uint3_t tsc := ?) := {</span><br><span>        tsc := tsc,</span><br><span>  hopping := 0,</span><br><span>        hsn := ?, maio := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+  ma_bit_len := ?,</span><br><span>     ma := ?</span><br><span> };</span><br><span> </span><br><span>@@ -726,16 +729,19 @@</span><br><span>    hopping := 1,</span><br><span>        hsn := hsn,</span><br><span>  maio := maio,</span><br><span style="color: hsl(120, 100%, 40%);">+ ma_bit_len := lengthof(valueof(ma)),</span><br><span>         ma := f_pad_bit(valueof(ma), 64, '0'B)</span><br><span> };</span><br><span> template PCUIF_InfoTrxTs tr_PCUIF_InfoTrxTsH1(template uint3_t tsc := ?,</span><br><span>                                           template uint6_t hsn := ?,</span><br><span>                                           template uint6_t maio := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-                                             template bitstring ma := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                              template bitstring ma := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           template uint8_t ma_bit_len := ?) := {</span><br><span>         tsc := tsc,</span><br><span>  hopping := 1,</span><br><span>        hsn := hsn,</span><br><span>  maio := maio,</span><br><span style="color: hsl(120, 100%, 40%);">+ ma_bit_len := ma_bit_len,</span><br><span>    ma := ma</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 2d20975..a4596bf 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -2193,18 +2193,12 @@</span><br><span>                       ia.pkt_chan_desc, " vs ", tr_pkt_chan_desc);</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   var MobileAllocationLV tr_ma := { len := 0, ma := ''B };</span><br><span style="color: hsl(0, 100%, 40%);">-        var octetstring ma_oct := bit2oct(ts.ma);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Calculate length of the useful part of Mobile Allocation */</span><br><span style="color: hsl(0, 100%, 40%);">-  for (var integer i := 0; i < lengthof(ma_oct); i := i + 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-         if (ma_oct[i] != '00'O) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       tr_ma.len := i + 1;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Strip zero bytes from the right side of MA */</span><br><span style="color: hsl(0, 100%, 40%);">-        tr_ma.ma := substr(ts.ma, 0, tr_ma.len * 8);</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Mobile Allocation is expected to be octet-aligned */</span><br><span style="color: hsl(120, 100%, 40%);">+       var uint8_t ma_oct_len := (ts.ma_bit_len + 8 - 1) / 8;</span><br><span style="color: hsl(120, 100%, 40%);">+        var template MobileAllocationLV tr_ma := {</span><br><span style="color: hsl(120, 100%, 40%);">+            len := ma_oct_len, /* in bytes */</span><br><span style="color: hsl(120, 100%, 40%);">+             ma := substr(ts.ma, 0, ma_oct_len * 8)</span><br><span style="color: hsl(120, 100%, 40%);">+        };</span><br><span> </span><br><span>       if (not match(ia.mobile_allocation, tr_ma)) {</span><br><span>                setverdict(fail, "Mobile Allocation does not match: ",</span><br><span>@@ -2284,14 +2278,6 @@</span><br><span> {</span><br><span>       /* FIXME: TRX0/TS7 is a hard-coded expectation, make it configurable */</span><br><span>      var PCUIF_InfoTrxTs ts := info_ind.trx.v10[0].ts[7];</span><br><span style="color: hsl(0, 100%, 40%);">-    var integer ma_bit_len := 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    /* Calculate length of the useful part of Mobile Allocation */</span><br><span style="color: hsl(0, 100%, 40%);">-  for (var integer i := 0; i < lengthof(ts.ma); i := i + 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-          if (ts.ma[i] == '1'B) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 ma_bit_len := i + 1;</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span> </span><br><span>        /* Table 12.8.1: Frequency Parameters information elements */</span><br><span>        var template FrequencyParameters tr_fp := {</span><br><span>@@ -2307,8 +2293,8 @@</span><br><span>                          rfl_number_list_present := '0'B,</span><br><span>                             rfl_number_list := omit,</span><br><span>                             ma_present := '0'B, /* inverted logic */</span><br><span style="color: hsl(0, 100%, 40%);">-                                ma_length := ma_bit_len,</span><br><span style="color: hsl(0, 100%, 40%);">-                                ma_bitmap := substr(ts.ma, 0, ma_bit_len)</span><br><span style="color: hsl(120, 100%, 40%);">+                             ma_length := ts.ma_bit_len,</span><br><span style="color: hsl(120, 100%, 40%);">+                           ma_bitmap := substr(ts.ma, 0, ts.ma_bit_len)</span><br><span>                         }</span><br><span>            },</span><br><span>           direct2 := omit</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19991">change 19991</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/+/19991"/><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: I2709673c90a0cd7d76de9db8b8ad82ac59ca84a0 </div>
<div style="display:none"> Gerrit-Change-Number: 19991 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>