<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24657">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Test forwarding PCUIF<->IPA/OSMO/PCU<br><br>Related: SYS#5303<br>Change-Id: Ib3012ce612f78e661fd46b608a0bf67e038e136f<br>---<br>M bts/BTS_Tests.cfg<br>M bts/BTS_Tests.ttcn<br>M bts/BTS_Tests_OML.ttcn<br>M library/AbisOML_Types.ttcn<br>M library/PCUIF_Types.ttcn<br>5 files changed, 229 insertions(+), 8 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/57/24657/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.cfg b/bts/BTS_Tests.cfg</span><br><span>index aaffbf6..36d81e2 100644</span><br><span>--- a/bts/BTS_Tests.cfg</span><br><span>+++ b/bts/BTS_Tests.cfg</span><br><span>@@ -31,6 +31,7 @@</span><br><span> #BTS_Tests.mp_tolerance_rxlev := 10;</span><br><span> #BTS_Tests.mp_tolerance_rxqual := 1;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+BTS_Tests_OML.mp_pcu_socket := "/tmp/pcu_sock"</span><br><span> </span><br><span> [MAIN_CONTROLLER]</span><br><span> </span><br><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 547ada2..9dd4027 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -70,6 +70,7 @@</span><br><span> friend module BTS_Tests_virtphy;</span><br><span> friend module BTS_Tests_LAPDm;</span><br><span> friend module BTS_Tests_perf;</span><br><span style="color: hsl(120, 100%, 40%);">+friend module BTS_Tests_OML;</span><br><span> </span><br><span> /* The tests assume a BTS with the following timeslot configuration:</span><br><span>  * TS0 : Combined CCCH + SDCCH/4</span><br><span>@@ -429,7 +430,7 @@</span><br><span> }</span><br><span> </span><br><span> /* PCU socket may at any time receive a new INFO.ind */</span><br><span style="color: hsl(0, 100%, 40%);">-private altstep as_pcu_info_ind(PCUIF_CODEC_PT pt, integer pcu_conn_id,</span><br><span style="color: hsl(120, 100%, 40%);">+friend altstep as_pcu_info_ind(PCUIF_CODEC_PT pt, integer pcu_conn_id,</span><br><span>                          out PCUIF_Message pcu_last_info) {</span><br><span>   var PCUIF_send_data sd;</span><br><span>      [] pt.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(0, ?))) -> value sd {</span><br><span>diff --git a/bts/BTS_Tests_OML.ttcn b/bts/BTS_Tests_OML.ttcn</span><br><span>index ddeb139..e37805e 100644</span><br><span>--- a/bts/BTS_Tests_OML.ttcn</span><br><span>+++ b/bts/BTS_Tests_OML.ttcn</span><br><span>@@ -16,6 +16,13 @@</span><br><span> import from AbisOML_Types all;</span><br><span> import from IPA_Emulation all;</span><br><span> import from IPA_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Misc_Helpers all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from PCUIF_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from PCUIF_CodecPort all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from PCUIF_CodecPort all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from BTS_Tests all;</span><br><span> </span><br><span> const integer NUM_TRX := 8;</span><br><span> </span><br><span>@@ -43,6 +50,8 @@</span><br><span>     uint8_t mp_air_timer := 100;</span><br><span>         uint8_t mp_ny1 := 10;</span><br><span>        uint8_t mp_bsic := 63;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      charstring mp_pcu_socket := PCU_SOCK_DEFAULT;</span><br><span> };</span><br><span> </span><br><span> /* BSC side OML component */</span><br><span>@@ -52,8 +61,17 @@</span><br><span>         /* Port for OML */</span><br><span>   port IPA_OML_PT OML;</span><br><span>         var uint8_t g_bts_nr := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         /* Port for Abis/Osmo/PCU */</span><br><span>         port IPA_OSMO_PCU_PT IPA_OSMO_PCU;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* PCU Interface of BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+    port PCUIF_CODEC_PT PCU;</span><br><span style="color: hsl(120, 100%, 40%);">+      var integer g_pcu_conn_id;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Last PCU INFO IND we received */</span><br><span style="color: hsl(120, 100%, 40%);">+   var PCUIF_Message g_pcu_last_info;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* As rxed by Get Attributes Response NM_ATT_MANUF_ID IE, see f_oml_getattr() */</span><br><span style="color: hsl(120, 100%, 40%);">+      var bitstring g_bts_features;</span><br><span> </span><br><span>    /* global test case guard timer */</span><br><span>   timer T_oml_guard := 60.0;</span><br><span>@@ -112,6 +130,27 @@</span><br><span>    activate(as_IPA_evt());</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_init_pcu(PCUIF_CODEC_PT pt, charstring id,</span><br><span style="color: hsl(120, 100%, 40%);">+                           out integer pcu_conn_id, out PCUIF_Message pcu_last_info) {</span><br><span style="color: hsl(120, 100%, 40%);">+       timer T := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       var PCUIF_send_data sd;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (mp_pcu_socket == "") {</span><br><span style="color: hsl(120, 100%, 40%);">+          pcu_conn_id := -1;</span><br><span style="color: hsl(120, 100%, 40%);">+            return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     map(self:PCU, system:PCU);</span><br><span style="color: hsl(120, 100%, 40%);">+    pcu_conn_id := f_pcuif_connect(pt, mp_pcu_socket);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_pcu_info_ind(pt, pcu_conn_id, pcu_last_info);</span><br><span style="color: hsl(120, 100%, 40%);">+   [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for PCU INFO_IND");</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%);">+     pt.send(t_SD_PCUIF(pcu_conn_id, ts_PCUIF_TXT_IND(0, PCU_VERSION, testcasename())));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> /* Perform an "OPSTART" procedure with the speciifed MO" */</span><br><span> private function f_oml_opstart(template (value) OML_FOM_ObjectClass obj_class,</span><br><span>@@ -232,7 +271,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Perform a "SET BTS ATTRIBUTES" procedure with the BTS */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_oml_bts_attr()</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_oml_bts_setattr()</span><br><span> runs on BSC_OML_CT {</span><br><span>    var OML_FOM_ObjectInstance obj_inst := valueof(ts_OML_ObjectInstance(g_bts_nr, 255, 255));</span><br><span>   var template (value) OML_FOM_IE_List ies := {</span><br><span>@@ -290,12 +329,15 @@</span><br><span>        }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_oml_exp_rx(template OML_PDU exp_rx, charstring err_msg) runs on BSC_OML_CT</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_oml_exp_rx(template OML_PDU exp_rx, charstring err_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+   runs on BSC_OML_CT return OML_PDU</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+        var OML_PDU rx;</span><br><span>      timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] OML.receive(exp_rx) {</span><br><span style="color: hsl(120, 100%, 40%);">+      [] OML.receive(exp_rx) -> value rx {</span><br><span>              setverdict(pass);</span><br><span>            }</span><br><span>    [] OML.receive { repeat; }</span><br><span>@@ -303,6 +345,7 @@</span><br><span>             setverdict(fail, "Timeout waiting for ", err_msg);</span><br><span>                 }</span><br><span>    }</span><br><span style="color: hsl(120, 100%, 40%);">+     return rx;</span><br><span> }</span><br><span> </span><br><span> /* Send an OML message and expect a failure event report in response */</span><br><span>@@ -351,7 +394,23 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_oml_getattr(template OML_PDU exp_rx := tr_OML_GetAttributesResponse(NM_OC_BTS, ?, ?)) runs on BSC_OML_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    var OML_FOM_ObjectInstance obj_inst := valueof(ts_OML_ObjectInstance(g_bts_nr, 255, 255));</span><br><span style="color: hsl(120, 100%, 40%);">+    var OML_FOM_IE_Type attr_li[2] := { NM_ATT_MANUF_ID, NM_ATT_SW_CONFIG };</span><br><span style="color: hsl(120, 100%, 40%);">+      var octetstring req_attr := ''O;</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer i := 0; i < lengthof(attr_li); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              req_attr := req_attr & int2oct(enum2int(attr_li[i]), 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     var OML_PDU cmd := valueof(ts_OML_GetAttributes(NM_OC_BTS, obj_inst, req_attr));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  OML.send(cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        var OML_PDU rx := f_oml_exp_rx(exp_rx, "BTS GetAttributes Response");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     var OML_FOM_IE_Body ie_ari := f_OML_FOM_get_ie(rx.u.fom, NM_ATT_GET_ARI);</span><br><span style="color: hsl(120, 100%, 40%);">+     var OML_FOM_IE_Body manuf_id := f_OML_FOM_IE_List_get_ie(ie_ari.ari.ies, NM_ATT_MANUF_ID);</span><br><span style="color: hsl(120, 100%, 40%);">+    g_bts_features := oct2bit(manuf_id.other.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> </span><br><span> </span><br><span>@@ -539,7 +598,7 @@</span><br><span>      [] OML.receive { repeat; }</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   f_oml_bts_attr();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_oml_bts_setattr();</span><br><span>         f_oml_opstart(obj_class, obj_inst, false, NM_OPSTATE_ENABLED);</span><br><span> }</span><br><span> </span><br><span>@@ -616,6 +675,71 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Make sure that the IUT sends RSL Connect NACK when the remote is not reachable. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ipa_osmo_pcu_anr_fwd() runs on BSC_OML_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var PCUIF_send_data pcu_sd_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+       var PCUIF_Message msg_rx;</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init_oml(testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_pcu(PCU, testcasename(), g_pcu_conn_id, g_pcu_last_info);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_oml_getattr();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    log("BTS Features:", g_bts_features);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (lengthof(g_bts_features) < 21 or g_bts_features[20] != '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Feature ABIS_OSMO_PCU not supported!");</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%);">+   IPA_OSMO_PCU.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP));</span><br><span style="color: hsl(120, 100%, 40%);">+        IPA_OSMO_PCU.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_RESP));</span><br><span style="color: hsl(120, 100%, 40%);">+   IPA_OSMO_PCU.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_ACK));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  var PCUIF_CellDescriptionList cell_list := {</span><br><span style="color: hsl(120, 100%, 40%);">+          {3, 2, 880}, {3, 1, 880}, {3, 1, 887}</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+    var PCUIF_CellDescriptionList zeroed_val := {{0, 0, 0}};</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer i := 3; i < 80; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             cell_list := cell_list & zeroed_val;</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%);">+   IPA_OSMO_PCU.send(ts_PCUIF_ANR_REQ(0, lengthof(cell_list), cell_list));</span><br><span style="color: hsl(120, 100%, 40%);">+       T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_ANR_REQ(0, lengthof(cell_list), cell_list))) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] PCU.receive(PCUIF_send_data:?) -> value pcu_sd_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail, "Unexpected message received: ", pcu_sd_msg.data, " vs exp: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                      t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_ANR_REQ(0, lengthof(cell_list), cell_list)));</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout { setverdict(fail, "Timeout waiting for ANR request on PCU inteface");}</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     T.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     var PCUIF_CellDescriptionList cell_list_resp := {</span><br><span style="color: hsl(120, 100%, 40%);">+             {3, 2, 880}, {3, 1, 880}, {3, 1, 887}</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+    var PCUIF_RxLevList rxlev_list := { 40, 255, 34 };</span><br><span style="color: hsl(120, 100%, 40%);">+    for (var integer i := 3; i < 32; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+             cell_list_resp := cell_list_resp & zeroed_val;</span><br><span style="color: hsl(120, 100%, 40%);">+            rxlev_list := rxlev_list & {0};</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Send back the response: */</span><br><span style="color: hsl(120, 100%, 40%);">+ PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_ANR_CNF(0, lengthof(cell_list_resp), cell_list_resp, rxlev_list)))</span><br><span style="color: hsl(120, 100%, 40%);">+        T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] IPA_OSMO_PCU.receive(tr_PCUIF_ANR_CNF(0, lengthof(cell_list_resp), cell_list_resp, rxlev_list)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] IPA_OSMO_PCU.receive(PCUIF_Message:?) -> value msg_rx {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Unexpected message received: ", msg_rx, " vs exp: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                       tr_PCUIF_ANR_CNF(0, lengthof(cell_list_resp), cell_list_resp, rxlev_list));</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout { setverdict(fail, "Timeout waiting for ANR request on BSC inteface");}</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> control {</span><br><span>      execute( TC_wrong_mdisc() );</span><br><span>@@ -634,6 +758,8 @@</span><br><span>   execute( TC_ts_opstart_noattr() );</span><br><span>   execute( TC_initial_state_reports() );</span><br><span>       execute( TC_ipa_rsl_connect_nack() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_ipa_osmo_pcu_anr_fwd() );</span><br><span> }</span><br><span> </span><br><span> /* BTS:</span><br><span>diff --git a/library/AbisOML_Types.ttcn b/library/AbisOML_Types.ttcn</span><br><span>index 5997543..63dab7b 100644</span><br><span>--- a/library/AbisOML_Types.ttcn</span><br><span>+++ b/library/AbisOML_Types.ttcn</span><br><span>@@ -1226,6 +1226,21 @@</span><br><span>      return resp;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_OML_FOM_IE_List_get_ie(OML_FOM_IE_List ie_list, OML_FOM_IE_Type iei) return OML_FOM_IE_Body</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer i := 0; i < lengthof(ie_list); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              if (ie_list[i].iei == iei) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  return ie_list[i].body;</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%);">+     var OML_FOM_IE_Body dummy;</span><br><span style="color: hsl(120, 100%, 40%);">+    return dummy; /*TODO: setverdict(fail?) */</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_OML_FOM_get_ie(OML_FOM fom, OML_FOM_IE_Type iei) return OML_FOM_IE_Body</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        return f_OML_FOM_IE_List_get_ie(fom.ies, iei);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> </span><br><span> /***********************************************************************</span><br><span>diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn</span><br><span>index 9d6b023..9c83a44 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -36,7 +36,9 @@</span><br><span>       PCU_IF_MSG_ACT_REQ              ('40'O),</span><br><span>     PCU_IF_MSG_TIME_IND             ('52'O),</span><br><span>     PCU_IF_MSG_PAG_REQ              ('60'O),</span><br><span style="color: hsl(0, 100%, 40%);">-        PCU_IF_MSG_TXT_IND              ('70'O)</span><br><span style="color: hsl(120, 100%, 40%);">+       PCU_IF_MSG_TXT_IND              ('70'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      PCU_IF_MSG_ANR_REQ              ('80'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      PCU_IF_MSG_ANR_CNF              ('81'O)</span><br><span> } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span> type enumerated PCUIF_Sapi {</span><br><span>@@ -244,6 +246,25 @@</span><br><span>         variant (tlli) "BYTEORDER(last)"</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type record PCUIF_CellDescriptionV {</span><br><span style="color: hsl(120, 100%, 40%);">+    uint3_t                         bcc, /* PLMN colour code */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint3_t                         ncc, /* BS colour code */</span><br><span style="color: hsl(120, 100%, 40%);">+     uint10_t                        bcch_arfcn</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "FIELDORDER(lsb)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type set of PCUIF_CellDescriptionV PCUIF_CellDescriptionList;</span><br><span style="color: hsl(120, 100%, 40%);">+type set of uint8_t PCUIF_RxLevList;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record PCUIF_anr_req {</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t         num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+    PCUIF_CellDescriptionList cell_list</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (cell_list) "FIELDLENGTH(80)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record PCUIF_anr_cnf {</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t         num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+    PCUIF_CellDescriptionList cell_list,</span><br><span style="color: hsl(120, 100%, 40%);">+  PCUIF_RxLevList rxlev_list</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (cell_list) "FIELDLENGTH(32)"</span><br><span style="color: hsl(120, 100%, 40%);">+   variant (rxlev_list) "FIELDLENGTH(32)" };</span><br><span> </span><br><span> type union PCUIF_MsgUnion {</span><br><span>      PCUIF_data              data_req,</span><br><span>@@ -258,7 +279,9 @@</span><br><span>      PCUIF_act_req           act_req,</span><br><span>     PCUIF_time_ind          time_ind,</span><br><span>    PCUIF_pag_req           pag_req,</span><br><span style="color: hsl(0, 100%, 40%);">-        PCUIF_app_info_req      app_info_req</span><br><span style="color: hsl(120, 100%, 40%);">+  PCUIF_app_info_req      app_info_req,</span><br><span style="color: hsl(120, 100%, 40%);">+ PCUIF_anr_req           anr_req,</span><br><span style="color: hsl(120, 100%, 40%);">+      PCUIF_anr_cnf           anr_cnf</span><br><span> } with { variant "" };</span><br><span> </span><br><span> type record PCUIF_Message {</span><br><span>@@ -279,7 +302,9 @@</span><br><span>                                 act_req,        msg_type = PCU_IF_MSG_ACT_REQ;</span><br><span>                               time_ind,       msg_type = PCU_IF_MSG_TIME_IND;</span><br><span>                              pag_req,        msg_type = PCU_IF_MSG_PAG_REQ;</span><br><span style="color: hsl(0, 100%, 40%);">-                          app_info_req,   msg_type = PCU_IF_MSG_APP_INFO_REQ)"</span><br><span style="color: hsl(120, 100%, 40%);">+                             app_info_req,   msg_type = PCU_IF_MSG_APP_INFO_REQ;</span><br><span style="color: hsl(120, 100%, 40%);">+                           anr_req,        msg_type = PCU_IF_MSG_ANR_REQ;</span><br><span style="color: hsl(120, 100%, 40%);">+                                anr_cnf,        msg_type = PCU_IF_MSG_ANR_CNF)"</span><br><span>         /* PCUIFv10: 1006 * 8 = 8048 bits */</span><br><span>         variant "PADDING(8048)"</span><br><span> };</span><br><span>@@ -937,6 +962,59 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_ANR_REQ(uint8_t bts_nr, uint8_t num_cells, PCUIF_CellDescriptionList cell_list) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      msg_type := PCU_IF_MSG_ANR_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+       bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+     u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                anr_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  num_cells := num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+                       cell_list := cell_list</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 (present) PCUIF_Message tr_PCUIF_ANR_REQ(template (present) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (present) uint8_t num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (present) PCUIF_CellDescriptionList cell_list) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   msg_type := PCU_IF_MSG_ANR_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+       bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+     u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                anr_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  num_cells := num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+                       cell_list := cell_list</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 (value) PCUIF_Message ts_PCUIF_ANR_CNF(uint8_t bts_nr, uint8_t num_cells, PCUIF_CellDescriptionList cell_list,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               PCUIF_RxLevList rxlev_list) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      msg_type := PCU_IF_MSG_ANR_CNF,</span><br><span style="color: hsl(120, 100%, 40%);">+       bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+     u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                anr_cnf := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  num_cells := num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+                       cell_list := cell_list,</span><br><span style="color: hsl(120, 100%, 40%);">+                       rxlev_list := rxlev_list</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 (present) PCUIF_Message tr_PCUIF_ANR_CNF(template (present) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (present) uint8_t num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (present) PCUIF_CellDescriptionList cell_list,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       template (present) PCUIF_RxLevList rxlev_list) := {</span><br><span style="color: hsl(120, 100%, 40%);">+    msg_type := PCU_IF_MSG_ANR_CNF,</span><br><span style="color: hsl(120, 100%, 40%);">+       bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+     spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+     u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                anr_cnf := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  num_cells := num_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+                       cell_list := cell_list,</span><br><span style="color: hsl(120, 100%, 40%);">+                       rxlev_list := rxlev_list</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> function f_PCUIF_PDCHMask_set(inout PCUIF_info_ind info, BIT8 pdch_mask,</span><br><span>                               template (present) uint8_t trx_nr := ?)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24657">change 24657</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/+/24657"/><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: Ib3012ce612f78e661fd46b608a0bf67e038e136f </div>
<div style="display:none"> Gerrit-Change-Number: 24657 </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>