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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Support Neighbor Address Resolution over PCUIF<br><br>New versions of osmo-pcu support Neighbor Address Resolution over this<br>interface, and deprecated the old CTRL interface.<br>Let's use it by default while still keeping support for the old one for<br>a while to avoid breakage of existing deployments.<br><br>Tests run to validate:<br>* Old osmo-pcu still passes tests using CTRL interface<br>* New osmo-pcu (with new iface support) still passes tests using CTRL<br>  interface<br>* New osmo-pcu (with new iface support) passes tests using new iface<br><br>Related: SYS#4971<br>Change-Id: I05f1aabc64fc5bc4740b0d8afd8990b485eacd50<br>---<br>M bts/BTS_Tests_OML.ttcn<br>M library/Osmocom_CTRL_Adapter.ttcn<br>M library/PCUIF_Types.ttcn<br>M pcu/PCU_Tests.ttcn<br>4 files changed, 324 insertions(+), 195 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests_OML.ttcn b/bts/BTS_Tests_OML.ttcn</span><br><span>index 40fb5cd..4a58312 100644</span><br><span>--- a/bts/BTS_Tests_OML.ttcn</span><br><span>+++ b/bts/BTS_Tests_OML.ttcn</span><br><span>@@ -696,30 +696,30 @@</span><br><span>   IPA_OSMO_PCU.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_RESP));</span><br><span>  IPA_OSMO_PCU.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_ACK));</span><br><span> </span><br><span style="color: hsl(0, 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%);">+        IPA_OSMO_PCU.send(ts_PCUIF_CONTAINER(0, ts_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadReq)))</span><br><span>         T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 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%);">+      [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadReq)))) {</span><br><span>               setverdict(pass);</span><br><span>            }</span><br><span>    [] PCU.receive(PCUIF_send_data:?) -> value pcu_sd_msg {</span><br><span>           setverdict(fail, "Unexpected message received: ", pcu_sd_msg.data, " vs exp: ",</span><br><span style="color: hsl(0, 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%);">+                      t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadReq))));</span><br><span>    }</span><br><span>    [] T.timeout { setverdict(fail, "Timeout waiting for ANR request on PCU inteface");}</span><br><span>       }</span><br><span>    T.stop;</span><br><span> </span><br><span>  /* Send back the response: */</span><br><span style="color: hsl(0, 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%);">+      PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_CONTAINER(0, ts_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadRep))))</span><br><span>       T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 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%);">+        [] IPA_OSMO_PCU.receive(tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadRep))) {</span><br><span>                 setverdict(pass);</span><br><span>            }</span><br><span>    [] IPA_OSMO_PCU.receive(PCUIF_Message:?) -> value msg_rx {</span><br><span>                setverdict(fail, "Unexpected message received: ", msg_rx, " vs exp: ",</span><br><span style="color: hsl(0, 100%, 40%);">-                         tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(100, payloadRep)));</span><br><span style="color: hsl(120, 100%, 40%);">+                         tr_PCUIF_CONTAINER(0, tr_PCUIF_CONT_OTHER(PCU_IF_MSG_NEIGH_ADDR_REQ, payloadRep)));</span><br><span>       }</span><br><span>    [] T.timeout { setverdict(fail, "Timeout waiting for ANR request on BSC inteface"); }</span><br><span>      }</span><br><span>diff --git a/library/Osmocom_CTRL_Adapter.ttcn b/library/Osmocom_CTRL_Adapter.ttcn</span><br><span>index 34ea300..6a9706e 100644</span><br><span>--- a/library/Osmocom_CTRL_Adapter.ttcn</span><br><span>+++ b/library/Osmocom_CTRL_Adapter.ttcn</span><br><span>@@ -22,6 +22,7 @@</span><br><span> </span><br><span> type component CTRL_Adapter_CT {</span><br><span>       var IPA_Emulation_CT vc_CTRL_IPA;</span><br><span style="color: hsl(120, 100%, 40%);">+     var boolean ipa_is_up := false;</span><br><span>      /* test port for the CTRL interface of the BSC */</span><br><span>    port IPA_CTRL_PT IPA_CTRL;</span><br><span> }</span><br><span>@@ -29,10 +30,13 @@</span><br><span> /* wait for IPA CTRL link to connect and send UP */</span><br><span> function f_ipa_ctrl_wait_link_up()</span><br><span> runs on CTRL_Adapter_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (ipa_is_up == true) {</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span>    timer T := 10.0;</span><br><span>     T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { }</span><br><span style="color: hsl(120, 100%, 40%);">+      [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { ipa_is_up := true; }</span><br><span>  [] T.timeout {</span><br><span>               setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_UP");</span><br><span>             mtc.stop;</span><br><span>@@ -40,13 +44,16 @@</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* wait for IPA CTRL link to connect and send UP */</span><br><span style="color: hsl(120, 100%, 40%);">+/* wait for IPA CTRL link to connect and send DOWN */</span><br><span> function f_ipa_ctrl_wait_link_down()</span><br><span> runs on CTRL_Adapter_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     if (ipa_is_up == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+             return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span>    timer T := 10.0;</span><br><span>     T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_DOWN)) { }</span><br><span style="color: hsl(120, 100%, 40%);">+    [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_DOWN)) { ipa_is_up := false; }</span><br><span>       [] T.timeout {</span><br><span>               setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_DOWN");</span><br><span>           mtc.stop;</span><br><span>diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn</span><br><span>index 1e57fb2..dcae4e6 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -38,7 +38,10 @@</span><br><span>  PCU_IF_MSG_INTERF_IND           ('53'O),</span><br><span>     PCU_IF_MSG_PAG_REQ              ('60'O),</span><br><span>     PCU_IF_MSG_TXT_IND              ('70'O),</span><br><span style="color: hsl(0, 100%, 40%);">-        PCU_IF_MSG_CONTAINER            ('80'O)</span><br><span style="color: hsl(120, 100%, 40%);">+       PCU_IF_MSG_CONTAINER            ('80'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Container payload message types: */</span><br><span style="color: hsl(120, 100%, 40%);">+        PCU_IF_MSG_NEIGH_ADDR_REQ       ('81'O),</span><br><span style="color: hsl(120, 100%, 40%);">+      PCU_IF_MSG_NEIGH_ADDR_CNF       ('82'O)</span><br><span> } with { variant "FIELDLENGTH(8)" };</span><br><span> </span><br><span> type enumerated PCUIF_Sapi {</span><br><span>@@ -254,15 +257,37 @@</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_neigh_addr_req {</span><br><span style="color: hsl(120, 100%, 40%);">+      uint16_t        local_lac,</span><br><span style="color: hsl(120, 100%, 40%);">+    uint16_t        local_ci,</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t        tgt_arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t         tgt_bsic</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (local_lac) "BYTEORDER(last)"</span><br><span style="color: hsl(120, 100%, 40%);">+     variant (local_ci) "BYTEORDER(last)"</span><br><span style="color: hsl(120, 100%, 40%);">+        variant (tgt_arfcn) "BYTEORDER(last)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record PCUIF_neigh_addr_cnf {</span><br><span style="color: hsl(120, 100%, 40%);">+     PCUIF_neigh_addr_req orig_req,</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t         error_code,</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t        mcc,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint16_t        mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t         mnc_3_digits,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t        lac,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t         rac,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint16_t        cell_identity</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant (mcc) "BYTEORDER(last)"</span><br><span style="color: hsl(120, 100%, 40%);">+      variant (mnc) "BYTEORDER(last)"</span><br><span style="color: hsl(120, 100%, 40%);">+     variant (lac) "BYTEORDER(last)"</span><br><span style="color: hsl(120, 100%, 40%);">+     variant (cell_identity) "BYTEORDER(last)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type union PCUIF_ContainerMsgUnion {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* This field can be removed once first container message is added, see</span><br><span style="color: hsl(0, 100%, 40%);">-          * https://bugs.eclipse.org/bugs/show_bug.cgi?id=574469 */</span><br><span style="color: hsl(0, 100%, 40%);">-     octetstring tmp_fixme,</span><br><span style="color: hsl(120, 100%, 40%);">+        PCUIF_neigh_addr_req    neigh_addr_req,</span><br><span style="color: hsl(120, 100%, 40%);">+       PCUIF_neigh_addr_cnf    neigh_addr_cnf,</span><br><span>      octetstring     other</span><br><span> } with { variant "" };</span><br><span> </span><br><span> type record PCUIF_container {</span><br><span style="color: hsl(0, 100%, 40%);">-  uint8_t         msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+     PCUIF_MsgType   msg_type,</span><br><span>    OCT1            spare,</span><br><span>       uint16_t        len, /* network byte order */</span><br><span>        PCUIF_ContainerMsgUnion u</span><br><span>@@ -270,7 +295,8 @@</span><br><span>      variant (len) "BYTEORDER(last)"</span><br><span>    variant (len) "LENGTHTO(u)"</span><br><span>        variant (u) "CROSSTAG(</span><br><span style="color: hsl(0, 100%, 40%);">-                     tmp_fixme,      msg_type = 255;</span><br><span style="color: hsl(120, 100%, 40%);">+                       neigh_addr_req, msg_type = PCU_IF_MSG_NEIGH_ADDR_REQ;</span><br><span style="color: hsl(120, 100%, 40%);">+                 neigh_addr_cnf, msg_type = PCU_IF_MSG_NEIGH_ADDR_CNF;</span><br><span>                        other,          OTHERWISE)"</span><br><span> };</span><br><span> </span><br><span>@@ -1026,7 +1052,7 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 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%);">+template (value) PCUIF_container ts_PCUIF_CONT_OTHER(PCUIF_MsgType msg_type, template (value) octetstring payload) := {</span><br><span>         msg_type := msg_type,</span><br><span>        spare := '00'O,</span><br><span>      len := lengthof(payload),</span><br><span>@@ -1034,7 +1060,7 @@</span><br><span>            other := payload</span><br><span>     }</span><br><span> }</span><br><span style="color: hsl(0, 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) PCUIF_container tr_PCUIF_CONT_OTHER(template (present) PCUIF_MsgType msg_type,</span><br><span>                                                        template (present) octetstring payload) := {</span><br><span>  msg_type := msg_type,</span><br><span>        spare := '00'O,</span><br><span>@@ -1044,6 +1070,77 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PCUIF_container tr_PCUIF_CONT_NEIGH_ADDR_REQ(template (present) uint16_t local_lac := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               template (present) uint16_t local_ci := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                            template (present) uint16_t tgt_arfcn := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           template (present) uint8_t tgt_bsic := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        msg_type := PCU_IF_MSG_NEIGH_ADDR_REQ,</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%);">+                neigh_addr_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   local_lac := local_lac,</span><br><span style="color: hsl(120, 100%, 40%);">+                       local_ci := local_ci,</span><br><span style="color: hsl(120, 100%, 40%);">+                 tgt_arfcn := tgt_arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+                       tgt_bsic := tgt_bsic</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_NEIGH_ADDR_REQ(template (present) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                             template (present) uint16_t local_lac := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           template (present) uint16_t local_ci := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                            template (present) uint16_t tgt_arfcn := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           template (present) uint8_t tgt_bsic := ?) := {</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 := tr_PCUIF_CONT_NEIGH_ADDR_REQ(local_lac, local_ci, tgt_arfcn, tgt_bsic)</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_NEIGH_ADDR_CNF(template (value) PCUIF_neigh_addr_req orig_req,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (value) uint8_t error_code := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     template (value) uint16_t mcc := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint16_t mnc := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint8_t mnc_3_digits := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint16_t lac := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint8_t rac := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    template (value) uint16_t cell_identity := 0) := {</span><br><span style="color: hsl(120, 100%, 40%);">+    msg_type := PCU_IF_MSG_NEIGH_ADDR_CNF,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+       len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+   u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                neigh_addr_cnf := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   orig_req := orig_req,</span><br><span style="color: hsl(120, 100%, 40%);">+                 error_code := error_code,</span><br><span style="color: hsl(120, 100%, 40%);">+                     mcc := mcc,</span><br><span style="color: hsl(120, 100%, 40%);">+                   mnc := mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+                   mnc_3_digits := mnc_3_digits,</span><br><span style="color: hsl(120, 100%, 40%);">+                 lac := lac,</span><br><span style="color: hsl(120, 100%, 40%);">+                   rac := rac,</span><br><span style="color: hsl(120, 100%, 40%);">+                   cell_identity := cell_identity</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_NEIGH_ADDR_CNF(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (value) PCUIF_neigh_addr_req orig_req,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       template (value) uint8_t error_code := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     template (value) uint16_t mcc := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint16_t mnc := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint8_t mnc_3_digits := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint16_t lac := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template (value) uint8_t rac := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    template (value) uint16_t cell_identity := 0) := {</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 := ts_PCUIF_CONT_NEIGH_ADDR_CNF(orig_req, error_code, mcc, mnc, mnc_3_digits,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                         lac, rac, cell_identity)</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>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index c23e58c..15c451b 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -69,7 +69,7 @@</span><br><span>  charstring mp_pcu_statsd_ip := "127.0.0.1";</span><br><span>        integer mp_pcu_statsd_port := 8125;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- charstring mp_ctrl_neigh_ip := "127.0.0.1";</span><br><span style="color: hsl(120, 100%, 40%);">+ charstring mp_ctrl_neigh_ip := ""; /* Use new PCUIF over IPA multiplex for Neigh Addr Resolution */</span><br><span>        integer mp_ctrl_neigh_port := 4248;</span><br><span> </span><br><span>      boolean mp_osmo_pcu_newer_than_0_9_0 := true; /* Drop after OsmoPCU > 0.9.0 was released */</span><br><span>@@ -4391,10 +4391,35 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_handle_nacc_rac_ci_query(PCUIF_info_ind info_ind, GsmArfcn req_arfcn, uint6_t req_bsic,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           boolean answer := true, boolean use_old_ctrl_iface := false)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (use_old_ctrl_iface == true) {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(120, 100%, 40%);">+            var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(120, 100%, 40%);">+                                         int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                                       int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                                           int2str(req_arfcn) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                                          int2str(req_bsic);</span><br><span style="color: hsl(120, 100%, 40%);">+                if (answer) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      f_ctrl_exp_get(IPA_CTRL, ctrl_var, omit);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var PCUIF_Message pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+            BTS.receive(tr_PCUIF_NEIGH_ADDR_REQ(0, info_ind.lac, info_ind.cell_id, req_arfcn, req_bsic)) -> value pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+             if (answer) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 BTS.send(ts_PCUIF_NEIGH_ADDR_CNF(0, pcu_msg.u.container.u.neigh_addr_req, 0, 23, 43, 0, 423, 2, 5));</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> /* Start NACC from MS side */</span><br><span> private function f_outbound_nacc_success(inout GprsMS ms, PCUIF_info_ind info_ind,</span><br><span>                                         boolean exp_rac_ci_query := true, boolean exp_si_query := true,</span><br><span style="color: hsl(0, 100%, 40%);">-                                         boolean skip_final_ctrl_ack := false)</span><br><span style="color: hsl(120, 100%, 40%);">+                                         boolean skip_final_ctrl_ack := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         boolean use_old_ctrl_iface := false)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span>   var template (value) RlcmacUlCtrlMsg cell_chf_notif;</span><br><span>         var RlcmacDlBlock dl_block;</span><br><span>@@ -4408,13 +4433,7 @@</span><br><span> </span><br><span>     if (exp_rac_ci_query == true) {</span><br><span>              /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-           f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-              var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                           int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                         int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                     int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                            int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-          f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+               f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         }</span><br><span> </span><br><span>        if (exp_si_query == true) {</span><br><span>@@ -4443,9 +4462,12 @@</span><br><span>         var PollFnCtx pollctx;</span><br><span>       var GprsMS ms;</span><br><span>       var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span style="color: hsl(120, 100%, 40%);">+        var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -4469,7 +4491,7 @@</span><br><span>      f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);</span><br><span> </span><br><span>   /* Start NACC from MS side */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_outbound_nacc_success(ms, info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);</span><br><span> </span><br><span>         f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span>@@ -4481,9 +4503,12 @@</span><br><span>        var RlcmacDlBlock dl_block;</span><br><span>  var uint32_t sched_fn;</span><br><span>       var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span style="color: hsl(120, 100%, 40%);">+        var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -4507,7 +4532,7 @@</span><br><span>      f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);</span><br><span> </span><br><span>   /* Start NACC from MS side, avoid sending final CTRL ACK */</span><br><span style="color: hsl(0, 100%, 40%);">-     f_outbound_nacc_success(ms, info_ind, skip_final_ctrl_ack := true);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_outbound_nacc_success(ms, info_ind, skip_final_ctrl_ack := true, use_old_ctrl_iface := use_old_ctrl_iface);</span><br><span> </span><br><span>    /* Wait until we receive something non-dummy */</span><br><span>      dl_block := f_skip_dummy(0, sched_fn);</span><br><span>@@ -4530,9 +4555,12 @@</span><br><span>      var GprsMS ms;</span><br><span>       var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span>       var template (value) RlcmacUlCtrlMsg cell_chf_notif;</span><br><span style="color: hsl(120, 100%, 40%);">+  var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -4558,10 +4586,10 @@</span><br><span>    f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);</span><br><span> </span><br><span>   /* Start NACC from MS side */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_outbound_nacc_success(ms, info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);</span><br><span> </span><br><span>         /* First NACC procedure is done, let's try to start a new one now that previous queries are cached: */</span><br><span style="color: hsl(0, 100%, 40%);">-      f_outbound_nacc_success(ms, info_ind, false, false);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_outbound_nacc_success(ms, info_ind, false, false, use_old_ctrl_iface := use_old_ctrl_iface);</span><br><span> </span><br><span>   f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span>@@ -4574,9 +4602,12 @@</span><br><span>        var GprsMS ms;</span><br><span>       var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span>       var template (value) RlcmacUlCtrlMsg cell_chf_notif;</span><br><span style="color: hsl(120, 100%, 40%);">+  var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -4602,14 +4633,14 @@</span><br><span>    f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);</span><br><span> </span><br><span>   /* Start NACC from MS side */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_outbound_nacc_success(ms, info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);</span><br><span> </span><br><span>         /* CTRL client should have disconnected from us */</span><br><span>   f_ipa_ctrl_wait_link_down();</span><br><span>         /* wait for cache entries to time out */</span><br><span>     f_sleep(2.0);</span><br><span>        /* First NACC procedure is done, let's try to start a new one now that previous queries have timed out: */</span><br><span style="color: hsl(0, 100%, 40%);">-  f_outbound_nacc_success(ms, info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_outbound_nacc_success(ms, info_ind, use_old_ctrl_iface := use_old_ctrl_iface);</span><br><span> </span><br><span>         f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span>@@ -4680,9 +4711,12 @@</span><br><span>        var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span>       var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -4710,14 +4744,8 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span>       /* we receive RAC+CI resolution request, but we never answer to it, timeout should occur */</span><br><span style="color: hsl(0, 100%, 40%);">-     f_ctrl_exp_get(IPA_CTRL, ctrl_var, omit);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, false, use_old_ctrl_iface);</span><br><span> </span><br><span>    /* Wait until we receive something non-dummy */</span><br><span>      dl_block := f_skip_dummy(0, sched_fn);</span><br><span>@@ -4780,7 +4808,7 @@</span><br><span>                                   int2str(info_ind.cell_id) & "." &</span><br><span>                                  int2str(req_arfcn) & "." &</span><br><span>                                 int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  /* we receive RAC+CI resolution request and we send incorrectlt formated response */</span><br><span style="color: hsl(120, 100%, 40%);">+  /* we receive RAC+CI resolution request and we send incorrectly formated response */</span><br><span>         f_ctrl_exp_get(IPA_CTRL, ctrl_var, "foobar-error");</span><br><span> </span><br><span>    /* Wait until we receive something non-dummy */</span><br><span>@@ -4808,6 +4836,7 @@</span><br><span>      var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span>       var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span>  var BssgpCellId src := valueof(ts_BssgpCellId(ts_RAI(ts_LAI(f_enc_BcdMccMnc(info_ind.mcc, info_ind.mnc, info_ind.mnc_3_digits == 1), /* '262F42'H */</span><br><span>                                                                     info_ind.lac),</span><br><span>                                                        info_ind.rac),</span><br><span>@@ -4819,8 +4848,10 @@</span><br><span>         var template RIM_Routing_Address src_addr := t_RIM_Routing_Address_cid(src);</span><br><span>         var template RIM_Routing_Address dst_addr := t_RIM_Routing_Address_cid(dst);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -4848,13 +4879,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span> </span><br><span>     /* RIM procedure: */</span><br><span>         RIM.receive(tr_RAN_INFORMATION_REQUEST(tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr),</span><br><span>@@ -4886,11 +4911,16 @@</span><br><span>       var RlcmacDlBlock dl_block;</span><br><span>  var uint32_t sched_fn;</span><br><span>       var CtrlMessage rx_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+      var charstring ctrl_var;</span><br><span style="color: hsl(120, 100%, 40%);">+      var PCUIF_Message pcu_msg;</span><br><span>   var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -4918,25 +4948,40 @@</span><br><span>    f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  IPA_CTRL.receive(tr_CtrlMsgGet(?, ctrl_var)) -> value rx_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(120, 100%, 40%);">+            ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(120, 100%, 40%);">+                        int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                       int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                           int2str(req_arfcn) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                          int2str(req_bsic);</span><br><span style="color: hsl(120, 100%, 40%);">+                IPA_CTRL.receive(tr_CtrlMsgGet(?, ctrl_var)) -> value rx_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              BTS.receive(tr_PCUIF_NEIGH_ADDR_REQ(0, info_ind.lac, info_ind.cell_id, req_arfcn, req_bsic)) -> value pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* Before receiving CTRL response, MS retransmits Pkt cell Chg Notif */</span><br><span>      f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span>  f_sleep(0.2); /* let some time to avoid race conditons between CTRL and RLCMAC */</span><br><span style="color: hsl(0, 100%, 40%);">-       IPA_CTRL.send(ts_CtrlMsgGetRepl(rx_ctrl.cmd.id, valueof(ctrl_var), valueof("023-43-423-2-5")));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             IPA_CTRL.send(ts_CtrlMsgGetRepl(rx_ctrl.cmd.id, valueof(ctrl_var), valueof("023-43-423-2-5")));</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              BTS.send(ts_PCUIF_NEIGH_ADDR_CNF(0, pcu_msg.u.container.u.neigh_addr_req, 0, 23, 43, 0, 423, 2, 5));</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  timer T := 2.0;</span><br><span>      T.start;</span><br><span>     alt {</span><br><span>        [] as_outbound_nacc_rim_resolve(info_ind, do_repeat := true);</span><br><span style="color: hsl(0, 100%, 40%);">-   [] IPA_CTRL.receive(tr_CtrlMsgGet(?, ctrl_var)) -> value rx_ctrl {</span><br><span style="color: hsl(120, 100%, 40%);">+ [use_old_ctrl_iface] IPA_CTRL.receive(tr_CtrlMsgGet(?, ctrl_var)) -> value rx_ctrl {</span><br><span>              setverdict(fail, "Received unexpected CTRL resolution after duplicate Pkt Cell Change Notification:", rx_ctrl);</span><br><span>            f_shutdown(__BFILE__, __LINE__);</span><br><span>             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [not use_old_ctrl_iface] BTS.receive(tr_PCUIF_NEIGH_ADDR_REQ(0, info_ind.lac, info_ind.cell_id, req_arfcn, req_bsic)) -> value pcu_msg {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Received unexpected PCUIF resolution after duplicate Pkt Cell Change Notification:", pcu_msg);</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>    [] T.timeout {</span><br><span>               setverdict(pass);</span><br><span>            }</span><br><span>@@ -4971,9 +5016,12 @@</span><br><span>   var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5001,13 +5049,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         as_outbound_nacc_rim_resolve(info_ind, do_answer := false);</span><br><span>  /* Before receiving RIM response, MS retransmits Pkt cell Chg Notif */</span><br><span>       f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span>@@ -5054,9 +5096,12 @@</span><br><span>         var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5084,13 +5129,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span> </span><br><span>@@ -5125,9 +5164,12 @@</span><br><span>         var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5155,13 +5197,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span> </span><br><span>@@ -5195,9 +5231,12 @@</span><br><span>         var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5225,13 +5264,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span> </span><br><span>@@ -5264,11 +5297,16 @@</span><br><span>        var RlcmacDlBlock dl_block;</span><br><span>  var uint32_t sched_fn;</span><br><span>       var CtrlMessage rx_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+      var charstring ctrl_var;</span><br><span style="color: hsl(120, 100%, 40%);">+      var PCUIF_Message pcu_msg;</span><br><span>   var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5296,25 +5334,28 @@</span><br><span>    f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  IPA_CTRL.receive(tr_CtrlMsgGet(?, ctrl_var)) -> value rx_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(120, 100%, 40%);">+            ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(120, 100%, 40%);">+                        int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                       int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                           int2str(req_arfcn) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                          int2str(req_bsic);</span><br><span style="color: hsl(120, 100%, 40%);">+                IPA_CTRL.receive(tr_CtrlMsgGet(?, ctrl_var)) -> value rx_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              BTS.receive(tr_PCUIF_NEIGH_ADDR_REQ(0, info_ind.lac, info_ind.cell_id, req_arfcn, req_bsic)) -> value pcu_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span>    /* Before receiving CTRL response, MS retransmits Pkt cell Chg Notif with different tgt arfcn */</span><br><span>     cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);</span><br><span>    f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span>  f_sleep(0.2); /* let some time to avoid race conditons between CTRL and RLCMAC */</span><br><span style="color: hsl(0, 100%, 40%);">-       IPA_CTRL.send(ts_CtrlMsgGetRepl(rx_ctrl.cmd.id, valueof(ctrl_var), valueof("023-43-423-2-5")));</span><br><span style="color: hsl(120, 100%, 40%);">+     if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             IPA_CTRL.send(ts_CtrlMsgGetRepl(rx_ctrl.cmd.id, valueof(ctrl_var), valueof("023-43-423-2-5")));</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              BTS.send(ts_PCUIF_NEIGH_ADDR_CNF(0, pcu_msg.u.container.u.neigh_addr_req, 0, 23, 43, 0, 423, 2, 5));</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span>    /* We should now receive a 2nd CTRL request with the new ARFCN+BSIC */</span><br><span style="color: hsl(0, 100%, 40%);">-  ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                  int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-             int2str(req_arfcn + 1) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                int2str(req_bsic + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-      f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);</span><br><span> </span><br><span>     /* And finally everything continues as usual with RIN procedure */</span><br><span>   as_outbound_nacc_rim_resolve(info_ind);</span><br><span>@@ -5349,9 +5390,12 @@</span><br><span>     var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5379,13 +5423,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         as_outbound_nacc_rim_resolve(info_ind, do_answer := false);</span><br><span>  /* Before receiving RIM response, MS retransmits Pkt cell Chg Notif with different tgt cell: */</span><br><span>      cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);</span><br><span>@@ -5394,12 +5432,7 @@</span><br><span>   f_outbound_nacc_rim_tx_resp(info_ind);</span><br><span> </span><br><span>   /* As a result, CTRL + RIM resolution for new tgt cell should now be done: */</span><br><span style="color: hsl(0, 100%, 40%);">-   ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                  int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-             int2str(req_arfcn + 1) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                int2str(req_bsic + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-      f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);</span><br><span> </span><br><span>     /* And finally everything continues as usual with RIN procedure */</span><br><span>   as_outbound_nacc_rim_resolve(info_ind);</span><br><span>@@ -5434,9 +5467,12 @@</span><br><span>     var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5464,13 +5500,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span> </span><br><span>@@ -5480,12 +5510,7 @@</span><br><span>         f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* It should trigger RAC_CI resolution to start again: */</span><br><span style="color: hsl(0, 100%, 40%);">-       ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                      int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                     int2str(req_arfcn + 1) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                        int2str(req_bsic + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span>      /* Transmit SI back to MS */</span><br><span>@@ -5515,9 +5540,12 @@</span><br><span>        var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5545,13 +5573,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span> </span><br><span>@@ -5562,16 +5584,12 @@</span><br><span>        cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);</span><br><span>    f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* It should trigger RAC_CI resolution to start again: */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /* PCU TBF NACC state changed, so we should next receive a dummy block: */</span><br><span>   f_rx_rlcmac_dl_block_exp_dummy(dl_block, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* It should trigger RAC_CI resolution to start again: */</span><br><span style="color: hsl(0, 100%, 40%);">-       ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                      int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                     int2str(req_arfcn + 1) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                        int2str(req_bsic + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span>      /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span>      /* Transmit SI back to MS */</span><br><span>@@ -5601,9 +5619,12 @@</span><br><span>        var CtrlMessage rx_ctrl;</span><br><span>     var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5631,13 +5652,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span> </span><br><span>@@ -5655,21 +5670,32 @@</span><br><span>        cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn + 1, req_bsic + 1);</span><br><span>    f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* It should trigger RAC_CI resolution to start again: */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* When using new PCUIF interface for resolution, we must</span><br><span style="color: hsl(120, 100%, 40%);">+      * PCUIF.receive() here since that's the first message in the PCUIF</span><br><span style="color: hsl(120, 100%, 40%);">+        * queue that PCU will have sent. Calling other functions doing</span><br><span style="color: hsl(120, 100%, 40%);">+        * PCUIF.receive() (like f_ms_tx_ul_block() below) will make them fail</span><br><span style="color: hsl(120, 100%, 40%);">+         * due to unexpected message receive. */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (not use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+         f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* PKT CELL CHG CONTINUE ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span>    if (dl_block.ctrl.mac_hdr.rrbp_valid) {</span><br><span>              sched_fn := f_rrbp_ack_fn(sched_fn, dl_block.ctrl.mac_hdr.rrbp);</span><br><span>             f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), sched_fn);</span><br><span>         }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* When using CTRL interface, we must schedule the ACK before (see</span><br><span style="color: hsl(120, 100%, 40%);">+     * above) blocking here waiting for the resoltion, otherwise we'll be</span><br><span style="color: hsl(120, 100%, 40%);">+      * too late scheduling by the time the resolution is done. */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_handle_nacc_rac_ci_query(info_ind, req_arfcn + 1, req_bsic + 1, true, use_old_ctrl_iface);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* PCU TBF NACC state changed, so we should next receive a dummy block: */</span><br><span>   f_rx_rlcmac_dl_block_exp_dummy(dl_block);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* It should trigger RAC_CI resolution to start again: */</span><br><span style="color: hsl(0, 100%, 40%);">-       ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                      int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                     int2str(req_arfcn + 1) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                        int2str(req_bsic + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span>      /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span>      /* Transmit SI back to MS */</span><br><span>@@ -5700,9 +5726,12 @@</span><br><span>        var GsmArfcn req_arfcn := 862;</span><br><span>       var uint6_t req_bsic := 43;</span><br><span>  var octetstring data := f_rnd_octstring(10);</span><br><span style="color: hsl(120, 100%, 40%);">+  var boolean use_old_ctrl_iface := mp_ctrl_neigh_ip != "";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_old_ctrl_iface) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* Initialize NS/BSSGP side */</span><br><span>       f_init_bssgp();</span><br><span>@@ -5730,13 +5759,7 @@</span><br><span>     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span> </span><br><span>      /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(0, 100%, 40%);">-   f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(0, 100%, 40%);">-      var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                 int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                             int2str(req_arfcn) & "." &</span><br><span style="color: hsl(0, 100%, 40%);">-                                    int2str(req_bsic);</span><br><span style="color: hsl(0, 100%, 40%);">-  f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       f_handle_nacc_rac_ci_query(info_ind, req_arfcn, req_bsic, true, use_old_ctrl_iface);</span><br><span>         /* RIM procedure: */</span><br><span>         as_outbound_nacc_rim_resolve(info_ind);</span><br><span> </span><br><span>@@ -6122,9 +6145,7 @@</span><br><span>  execute( TC_nacc_outbound_success_no_ctrl_ack() );</span><br><span>   execute( TC_nacc_outbound_success_twice() );</span><br><span>         execute( TC_nacc_outbound_success_twice_nocache() );</span><br><span style="color: hsl(0, 100%, 40%);">-    execute( TC_nacc_outbound_rac_ci_resolve_conn_refused() );</span><br><span>   execute( TC_nacc_outbound_rac_ci_resolve_timeout() );</span><br><span style="color: hsl(0, 100%, 40%);">-   execute( TC_nacc_outbound_rac_ci_resolve_fail_parse_response() );</span><br><span>    execute( TC_nacc_outbound_si_resolve_timeout() );</span><br><span>    execute( TC_nacc_outbound_pkt_cell_chg_notif_dup() );</span><br><span>        execute( TC_nacc_outbound_pkt_cell_chg_notif_dup2() );</span><br><span>@@ -6137,6 +6158,10 @@</span><br><span>      execute( TC_nacc_outbound_pkt_cell_chg_notif_twice4() );</span><br><span>     execute( TC_nacc_outbound_pkt_cell_chg_notif_twice5() );</span><br><span>     execute( TC_nacc_outbound_pkt_cell_chg_notif_unassigned_dl_tbf() );</span><br><span style="color: hsl(120, 100%, 40%);">+   if (mp_ctrl_neigh_ip != "") { /* PCU using old CTRL neigh addr resolution iface */</span><br><span style="color: hsl(120, 100%, 40%);">+          execute( TC_nacc_outbound_rac_ci_resolve_conn_refused() );</span><br><span style="color: hsl(120, 100%, 40%);">+            execute( TC_nacc_outbound_rac_ci_resolve_fail_parse_response() );</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span>        execute( TC_rim_ran_info_req_single_rep() );</span><br><span>         execute( TC_rim_ran_info_req_single_rep_eutran() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/25406">change 25406</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/+/25406"/><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: I05f1aabc64fc5bc4740b0d8afd8990b485eacd50 </div>
<div style="display:none"> Gerrit-Change-Number: 25406 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </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: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>