<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19323">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">library/PCUIF_Types: version 10: add frequency hopping parameters<br><br>Change-Id: Idf11bc4ba3ff0b00b32f2beab8fd020c67119d05<br>Related: SYS#4868, OS#4547<br>---<br>M bts/BTS_Tests.ttcn<br>M library/PCUIF_Types.ttcn<br>M pcu/PCU_Tests.ttcn<br>3 files changed, 108 insertions(+), 14 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/23/19323/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 1c8127b..dfda043 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -5444,7 +5444,7 @@</span><br><span>      var PCUIF_send_data sd;</span><br><span> </span><br><span>  [] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {</span><br><span style="color: hsl(0, 100%, 40%);">-          var bitstring pdch_mask := sd.data.u.info_ind.trx[trx_nr].pdch_mask;</span><br><span style="color: hsl(120, 100%, 40%);">+          var bitstring pdch_mask := f_PCUIF_ver_INFO_PDCHMask(sd.data.u.info_ind, trx_nr);</span><br><span>            if (substr(pdch_mask, g_chan_nr.tn, 1) != exp) {</span><br><span>                     repeat;</span><br><span>              }</span><br><span>diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn</span><br><span>index 089403c..2b1646b 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -16,11 +16,11 @@</span><br><span> </span><br><span> modulepar {</span><br><span>      /* PCUIF version supported by the IUT */</span><br><span style="color: hsl(0, 100%, 40%);">-        PCUIF_Version mp_pcuif_version := 9;</span><br><span style="color: hsl(120, 100%, 40%);">+  PCUIF_Version mp_pcuif_version := 10;</span><br><span> };</span><br><span> </span><br><span> const charstring PCU_SOCK_DEFAULT := "/tmp/pcu_bts";</span><br><span style="color: hsl(0, 100%, 40%);">-type integer PCUIF_Version (9); /* supported versions */</span><br><span style="color: hsl(120, 100%, 40%);">+type integer PCUIF_Version (9..10); /* supported versions */</span><br><span> </span><br><span> type enumerated PCUIF_MsgType {</span><br><span>       PCU_IF_MSG_DATA_REQ             ('00'O),</span><br><span>@@ -140,14 +140,39 @@</span><br><span>     uint8_t         ts_nr</span><br><span> } with { variant "" };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-type record PCUIF_InfoTrx {</span><br><span style="color: hsl(120, 100%, 40%);">+private type record PCUIF_InfoTrxTs {</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t                 tsc,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t                 hopping,</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t                 hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t                 maio,</span><br><span style="color: hsl(120, 100%, 40%);">+ bitstring               ma length(64)</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (ma) "BITORDER(lsb)" };</span><br><span style="color: hsl(120, 100%, 40%);">+private type record length(8) of PCUIF_InfoTrxTs PCUIF_InfoTrxTsList;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Version >= 10 specific coding */</span><br><span style="color: hsl(120, 100%, 40%);">+private type record PCUIF_InfoV10Trx {</span><br><span style="color: hsl(120, 100%, 40%);">+    uint16_t                arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+        BIT8                    pdch_mask,</span><br><span style="color: hsl(120, 100%, 40%);">+    OCT1                    spare,</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t                hLayer1,</span><br><span style="color: hsl(120, 100%, 40%);">+      PCUIF_InfoTrxTsList     ts</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (pdch_mask) "BITORDER(msb)" };</span><br><span style="color: hsl(120, 100%, 40%);">+private type record length(8) of PCUIF_InfoV10Trx PCUIF_InfoV10TrxList;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Version <= 9 specific coding */</span><br><span style="color: hsl(120, 100%, 40%);">+private type record PCUIF_InfoV09Trx {</span><br><span>      uint16_t        arfcn,</span><br><span>       BIT8            pdch_mask,</span><br><span>   OCT1            spare,</span><br><span>       OCT8            tsc,</span><br><span>         uint32_t        hLayer1</span><br><span> } with { variant (pdch_mask) "BITORDER(msb)" };</span><br><span style="color: hsl(0, 100%, 40%);">-type record length(8) of PCUIF_InfoTrx PCUIF_InfoTrxs;</span><br><span style="color: hsl(120, 100%, 40%);">+private type record length(8) of PCUIF_InfoV09Trx PCUIF_InfoV09TrxList;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type union PCUIF_InfoTrxs {</span><br><span style="color: hsl(120, 100%, 40%);">+    PCUIF_InfoV09TrxList    v09,</span><br><span style="color: hsl(120, 100%, 40%);">+  PCUIF_InfoV10TrxList    v10</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "" };</span><br><span> </span><br><span> type record PCUIF_info_ind {</span><br><span>    uint32_t        version,</span><br><span>@@ -187,7 +212,11 @@</span><br><span>      record length(2) of uint16_t    local_pprt,</span><br><span>  record length(2) of uint16_t    remote_port,</span><br><span>         record length(2) of OCT4        remote_ip</span><br><span style="color: hsl(0, 100%, 40%);">-} with { variant "" }</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+    /* NOTE: TITAN is not smart enough to handle 'version < 10' and 'version > 9',</span><br><span style="color: hsl(120, 100%, 40%);">+   * so we cannot support more than two versions at the same time here. Sigh. */</span><br><span style="color: hsl(120, 100%, 40%);">+        variant (trx) "CROSSTAG(v09, version = 9; v10, version = 10)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> </span><br><span> type record PCUIF_act_req {</span><br><span>       uint8_t         is_activate,</span><br><span>@@ -676,9 +705,40 @@</span><br><span>  spare2 := '000'B</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template (value) PCUIF_InfoTrx ts_PCUIF_InfoTrx(template (value) uint16_t arfcn := 871,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               template (value) BIT8 pdch_mask := '00000001'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                                         OCT1 tsc := '07'O) := {</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_InfoTrxTs ts_PCUIF_InfoTrxTsH0(template (value) uint3_t tsc := 7) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        tsc := tsc,</span><br><span style="color: hsl(120, 100%, 40%);">+   hopping := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ hsn := 0, maio := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+  ma := '0000000000000000000000000000000000000000000000000000000000000000'B</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 (value) PCUIF_InfoTrxTs ts_PCUIF_InfoTrxTsH1(template (value) uint3_t tsc := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint6_t hsn := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    template (value) uint6_t maio := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies ts_PCUIF_InfoTrxTsH0 := {</span><br><span style="color: hsl(120, 100%, 40%);">+ hopping := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ hsn := hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+   maio := maio</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 (value) PCUIF_InfoV10Trx ts_PCUIF_InfoV10Trx(template (value) uint16_t arfcn := 871,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) BIT8 pdch_mask := '00000001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               template (value) uint3_t tsc := 7) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+       pdch_mask := pdch_mask,</span><br><span style="color: hsl(120, 100%, 40%);">+       spare := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+       hLayer1 := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts := {</span><br><span style="color: hsl(120, 100%, 40%);">+               ts_PCUIF_InfoTrxTsH0(tsc), ts_PCUIF_InfoTrxTsH0(tsc),</span><br><span style="color: hsl(120, 100%, 40%);">+         ts_PCUIF_InfoTrxTsH0(tsc), ts_PCUIF_InfoTrxTsH0(tsc),</span><br><span style="color: hsl(120, 100%, 40%);">+         ts_PCUIF_InfoTrxTsH0(tsc), ts_PCUIF_InfoTrxTsH0(tsc),</span><br><span style="color: hsl(120, 100%, 40%);">+         ts_PCUIF_InfoTrxTsH0(tsc), ts_PCUIF_InfoTrxTsH0(tsc)</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 (value) PCUIF_InfoV09Trx ts_PCUIF_InfoV09Trx(template (value) uint16_t arfcn := 871,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      template (value) BIT8 pdch_mask := '00000001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               OCT1 tsc := '07'O) := {</span><br><span>        arfcn := arfcn,</span><br><span>      pdch_mask := pdch_mask,</span><br><span>      spare := '00'O,</span><br><span>@@ -686,11 +746,25 @@</span><br><span>      hLayer1 := 0</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template (value) PCUIF_InfoTrx ts_PCUIF_InfoTrxNULL := ts_PCUIF_InfoTrx(0, '00000000'B, '00'O);</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_InfoV09Trx ts_PCUIF_InfoV09TrxNULL := ts_PCUIF_InfoV09Trx(0, '00000000'B, '00'O);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template (value) PCUIF_InfoTrxs ts_PCUIF_InfoTrxs_def := {</span><br><span style="color: hsl(0, 100%, 40%);">-            ts_PCUIF_InfoTrx, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL,</span><br><span style="color: hsl(0, 100%, 40%);">-             ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL };</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_InfoTrxs ts_PCUIF_InfoV09Trxs_def := {</span><br><span style="color: hsl(120, 100%, 40%);">+      v09 := {</span><br><span style="color: hsl(120, 100%, 40%);">+              ts_PCUIF_InfoV09Trx, ts_PCUIF_InfoV09TrxNULL,</span><br><span style="color: hsl(120, 100%, 40%);">+         ts_PCUIF_InfoV09TrxNULL, ts_PCUIF_InfoV09TrxNULL,</span><br><span style="color: hsl(120, 100%, 40%);">+             ts_PCUIF_InfoV09TrxNULL, ts_PCUIF_InfoV09TrxNULL,</span><br><span style="color: hsl(120, 100%, 40%);">+             ts_PCUIF_InfoV09TrxNULL, ts_PCUIF_InfoV09TrxNULL</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 (value) PCUIF_InfoTrxs ts_PCUIF_InfoV10Trxs_def := {</span><br><span style="color: hsl(120, 100%, 40%);">+        v10 := {</span><br><span style="color: hsl(120, 100%, 40%);">+              ts_PCUIF_InfoV10Trx, ts_PCUIF_InfoV10Trx,</span><br><span style="color: hsl(120, 100%, 40%);">+             ts_PCUIF_InfoV10Trx, ts_PCUIF_InfoV10Trx,</span><br><span style="color: hsl(120, 100%, 40%);">+             ts_PCUIF_InfoV10Trx, ts_PCUIF_InfoV10Trx,</span><br><span style="color: hsl(120, 100%, 40%);">+             ts_PCUIF_InfoV10Trx, ts_PCUIF_InfoV10Trx</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 (value) PCUIF_Message ts_PCUIF_INFO_IND(template (value) uint8_t bts_nr,</span><br><span>                                                template (value) PCUIF_info_ind info_ind) := {</span><br><span>@@ -830,4 +904,24 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* TODO: remove this as soon as we drop version 9 support */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_PCUIF_ver_INFO_Trxs()</span><br><span style="color: hsl(120, 100%, 40%);">+return PCUIF_InfoTrxs {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (PCUIF_Types.mp_pcuif_version >= 10) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return valueof(ts_PCUIF_InfoV10Trxs_def);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              return valueof(ts_PCUIF_InfoV09Trxs_def);</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%);">+function f_PCUIF_ver_INFO_PDCHMask(in PCUIF_info_ind info, uint8_t trx_nr)</span><br><span style="color: hsl(120, 100%, 40%);">+return bitstring {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (PCUIF_Types.mp_pcuif_version >= 10) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return info.trx.v10[trx_nr].pdch_mask;</span><br><span style="color: hsl(120, 100%, 40%);">+        } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              return info.trx.v09[trx_nr].pdch_mask;</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> } with { encode "RAW" variant "BYTEORDER(first)" };</span><br><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index 20e3582..9fc5ab6 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -62,7 +62,7 @@</span><br><span> friend template (value) PCUIF_info_ind ts_PCUIF_INFO_default := {</span><br><span>    version := PCUIF_Types.mp_pcuif_version,</span><br><span>     flags := c_PCUIF_Flags_default,</span><br><span style="color: hsl(0, 100%, 40%);">- trx := valueof(ts_PCUIF_InfoTrxs_def),</span><br><span style="color: hsl(120, 100%, 40%);">+        trx := f_PCUIF_ver_INFO_Trxs(),</span><br><span>      bsic := 7,</span><br><span>   mcc := 262,</span><br><span>  mnc := 42,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19323">change 19323</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/+/19323"/><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: Idf11bc4ba3ff0b00b32f2beab8fd020c67119d05 </div>
<div style="display:none"> Gerrit-Change-Number: 19323 </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>