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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Test forwarding PCUIF<->IPA/OSMO/PCU<br><br>Change-Id: I78880098a55d1cb456011746efa0a47832a86ca8<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, 195 insertions(+), 6 deletions(-)<br><br></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 e855405..a08c3ff 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>@@ -440,7 +441,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 00c66c3..40fb5cd 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>@@ -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>@@ -616,6 +675,57 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Make sure that the IUT forwards Container PCUIF messages between BSC and PCU */</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%);">+       var octetstring payloadReq := f_rnd_octstring(300);</span><br><span style="color: hsl(120, 100%, 40%);">+   var octetstring payloadRep := f_rnd_octstring(300);</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%);">+  IPA_OSMO_PCU.send(ts_PCUIF_CONTAINER(0, ts_PCUIF_CONT_OTHER(100, payloadReq)))</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_CONTAINER(0, tr_PCUIF_CONT_OTHER(100, payloadReq)))) {</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_CONTAINER(0, tr_PCUIF_CONT_OTHER(100, payloadReq))));</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%);">+     /* Send back the response: */</span><br><span style="color: hsl(120, 100%, 40%);">+ PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_CONTAINER(0, ts_PCUIF_CONT_OTHER(100, payloadRep))))</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_CONTAINER(0, tr_PCUIF_CONT_OTHER(100, payloadRep))) {</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_CONTAINER(0, tr_PCUIF_CONT_OTHER(100, payloadRep)));</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 +744,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 6229f25..ae39671 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 6cfe410..1e57fb2 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -37,7 +37,8 @@</span><br><span>       PCU_IF_MSG_TIME_IND             ('52'O),</span><br><span>     PCU_IF_MSG_INTERF_IND           ('53'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_CONTAINER            ('80'O)</span><br><span> } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span> type enumerated PCUIF_Sapi {</span><br><span>@@ -253,6 +254,26 @@</span><br><span>         variant (tlli) "BYTEORDER(last)"</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type union PCUIF_ContainerMsgUnion {</span><br><span style="color: hsl(120, 100%, 40%);">+     /* This field can be removed once first container message is added, see</span><br><span style="color: hsl(120, 100%, 40%);">+        * https://bugs.eclipse.org/bugs/show_bug.cgi?id=574469 */</span><br><span style="color: hsl(120, 100%, 40%);">+   octetstring tmp_fixme,</span><br><span style="color: hsl(120, 100%, 40%);">+        octetstring     other</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record PCUIF_container {</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t         msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+     OCT1            spare,</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t        len, /* network byte order */</span><br><span style="color: hsl(120, 100%, 40%);">+ PCUIF_ContainerMsgUnion u</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+   variant (len) "BYTEORDER(last)"</span><br><span style="color: hsl(120, 100%, 40%);">+     variant (len) "LENGTHTO(u)"</span><br><span style="color: hsl(120, 100%, 40%);">+ variant (u) "CROSSTAG(</span><br><span style="color: hsl(120, 100%, 40%);">+                   tmp_fixme,      msg_type = 255;</span><br><span style="color: hsl(120, 100%, 40%);">+                       other,          OTHERWISE)"</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> type union PCUIF_MsgUnion {</span><br><span>    PCUIF_data              data_req,</span><br><span>@@ -268,7 +289,8 @@</span><br><span>      PCUIF_time_ind          time_ind,</span><br><span>    PCUIF_interf_ind        interf_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_container         container</span><br><span> } with { variant "" };</span><br><span> </span><br><span> type record PCUIF_Message {</span><br><span>@@ -290,7 +312,8 @@</span><br><span>                               time_ind,       msg_type = PCU_IF_MSG_TIME_IND;</span><br><span>                              interf_ind,     msg_type = PCU_IF_MSG_INTERF_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%);">+                           container,      msg_type = PCU_IF_MSG_CONTAINER)"</span><br><span>       /* PCUIFv10: 1006 * 8 = 8048 bits */</span><br><span>         variant "PADDING(8048)"</span><br><span> };</span><br><span>@@ -984,6 +1007,43 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_CONTAINER(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     template (value) PCUIF_container container) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       msg_type := PCU_IF_MSG_CONTAINER,</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%);">+                container := container</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_CONTAINER(template (present) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (present) PCUIF_container container) := {</span><br><span style="color: hsl(120, 100%, 40%);">+     msg_type := PCU_IF_MSG_CONTAINER,</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%);">+                container := container</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_container ts_PCUIF_CONT_OTHER(uint8_t msg_type, template (value) octetstring payload) := {</span><br><span style="color: hsl(120, 100%, 40%);">+     msg_type := msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+       len := lengthof(payload),</span><br><span style="color: hsl(120, 100%, 40%);">+     u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                other := payload</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_container tr_PCUIF_CONT_OTHER(template (present) uint8_t msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    template (present) octetstring payload) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   msg_type := msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+       len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                other := payload</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_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><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24772">change 24772</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/+/24772"/><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: I78880098a55d1cb456011746efa0a47832a86ca8 </div>
<div style="display:none"> Gerrit-Change-Number: 24772 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </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-MessageType: merged </div>