<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18760">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: allow multiple MSCs<br><br>Similar to the MSC tests, have several g_bssap and mp_bssap_cfg.<br>Prepare for MSC pool tests.<br><br>Replace g_bssap with a g_bssap[NUM_MSC] array.<br>Replace mp_bssap_cfg with an mp_bssap_cfg[NUM_MSC] array.<br><br>Requires patch I1986e4ef43beee161c82193694421b56136c1afe in docker-playground<br>to match the new required BSC_Tests.cfg format.<br><br>Related: OS#3682<br>Change-Id: Ibb36695b7c31f7b04eec6c5d59522fc0779b3c2f<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/BSC_Tests_LCLS.ttcn<br>M bsc/MSC_ConnectionHandler.ttcn<br>3 files changed, 120 insertions(+), 74 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/60/18760/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 48766f1..fb7ee25 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -59,6 +59,7 @@</span><br><span> import from SCCPasp_Types all;</span><br><span> </span><br><span> const integer NUM_BTS := 3;</span><br><span style="color: hsl(120, 100%, 40%);">+const integer NUM_MSC := 3;</span><br><span> const float T3101_MAX := 12.0;</span><br><span> </span><br><span> /* make sure to sync this with the osmo-bts.cfg you're using */</span><br><span>@@ -87,7 +88,7 @@</span><br><span>         var MGCP_Emulation_CT vc_MGCP;</span><br><span>       port TELNETasp_PT BSCVTY;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   var RAN_Adapter g_bssap;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RAN_Adapter g_bssap[NUM_MSC];</span><br><span>    /* for old legacy-tests only */</span><br><span>      port BSSAP_CODEC_PT BSSAP;</span><br><span> </span><br><span>@@ -119,16 +120,40 @@</span><br><span>       /* IP address at which the test binds */</span><br><span>     charstring mp_test_ip := "127.0.0.1";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     RAN_Configuration mp_bssap_cfg := {</span><br><span style="color: hsl(0, 100%, 40%);">-             transport := BSSAP_TRANSPORT_AoIP,</span><br><span style="color: hsl(0, 100%, 40%);">-              sccp_service_type := "mtp3_itu",</span><br><span style="color: hsl(0, 100%, 40%);">-              sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },</span><br><span style="color: hsl(0, 100%, 40%);">-             own_pc := 185,</span><br><span style="color: hsl(0, 100%, 40%);">-          own_ssn := 254,</span><br><span style="color: hsl(0, 100%, 40%);">-         peer_pc := 187,</span><br><span style="color: hsl(0, 100%, 40%);">-         peer_ssn := 254,</span><br><span style="color: hsl(0, 100%, 40%);">-                sio := '83'O,</span><br><span style="color: hsl(0, 100%, 40%);">-           rctx := 0</span><br><span style="color: hsl(120, 100%, 40%);">+     RAN_Configurations mp_bssap_cfg := {</span><br><span style="color: hsl(120, 100%, 40%);">+          {</span><br><span style="color: hsl(120, 100%, 40%);">+                     transport := BSSAP_TRANSPORT_AoIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                    sccp_service_type := "mtp3_itu",</span><br><span style="color: hsl(120, 100%, 40%);">+                    sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+                   own_pc := 185,  /* 0.23.1 first MSC emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+                      own_ssn := 254,</span><br><span style="color: hsl(120, 100%, 40%);">+                       peer_pc := 187, /* 0.23.3 osmo-bsc */</span><br><span style="color: hsl(120, 100%, 40%);">+                 peer_ssn := 254,</span><br><span style="color: hsl(120, 100%, 40%);">+                      sio := '83'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 rctx := 0</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%);">+                     transport := BSSAP_TRANSPORT_AoIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                    sccp_service_type := "mtp3_itu",</span><br><span style="color: hsl(120, 100%, 40%);">+                    sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+                   own_pc := 2,    /* 0.0.2 second MSC emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+                      own_ssn := 254,</span><br><span style="color: hsl(120, 100%, 40%);">+                       peer_pc := 187, /* 0.23.3 osmo-bsc */</span><br><span style="color: hsl(120, 100%, 40%);">+                 peer_ssn := 254,</span><br><span style="color: hsl(120, 100%, 40%);">+                      sio := '83'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 rctx := 2</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%);">+                     transport := BSSAP_TRANSPORT_AoIP,</span><br><span style="color: hsl(120, 100%, 40%);">+                    sccp_service_type := "mtp3_itu",</span><br><span style="color: hsl(120, 100%, 40%);">+                    sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" },</span><br><span style="color: hsl(120, 100%, 40%);">+                   own_pc := 3,    /* 0.0.3 third MSC emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+                       own_ssn := 254,</span><br><span style="color: hsl(120, 100%, 40%);">+                       peer_pc := 187, /* 0.23.3 osmo-bsc */</span><br><span style="color: hsl(120, 100%, 40%);">+                 peer_ssn := 254,</span><br><span style="color: hsl(120, 100%, 40%);">+                      sio := '83'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 rctx := 3</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    };</span><br><span> </span><br><span>       /* Whether to enable osmux tests. Can be dropped completely and enable</span><br><span>@@ -139,15 +164,16 @@</span><br><span>       uint8_t mp_exp_ms_power_level := 7;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_gen_test_hdlr_pars() return TestHdlrParams {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_gen_test_hdlr_pars(integer bssap_idx := 0) return TestHdlrParams {</span><br><span> </span><br><span>       var TestHdlrParams pars := valueof(t_def_TestHdlrPars);</span><br><span style="color: hsl(0, 100%, 40%);">- if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             pars.aoip := true;</span><br><span>   } else {</span><br><span>             pars.aoip := false;</span><br><span>  }</span><br><span>    pars.exp_ms_power_level := mp_exp_ms_power_level;</span><br><span style="color: hsl(120, 100%, 40%);">+     pars.mscpool.bssap_idx := bssap_idx;</span><br><span> </span><br><span>     return pars;</span><br><span> }</span><br><span>@@ -158,13 +184,15 @@</span><br><span>    mtc.stop;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_legacy_bssap_reset() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_legacy_bssap_reset(integer bssap_idx := 0) runs on test_CT {</span><br><span>         var BSSAP_N_UNITDATA_ind ud_ind;</span><br><span>     timer T := 5.0;</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled)));</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ts_BSSMAP_Reset(0, g_osmux_enabled)));</span><br><span>      T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap.sccp_addr_own, g_bssap.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[bssap_idx].sccp_addr_own, g_bssap[bssap_idx].sccp_addr_peer,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          tr_BSSMAP_ResetAck(g_osmux_enabled))) {</span><br><span>               log("Received RESET-ACK in response to RESET, we're ready to go!");</span><br><span>            }</span><br><span>    [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset(g_osmux_enabled))) -> value ud_ind {</span><br><span>@@ -306,7 +334,7 @@</span><br><span>           mgw_udp_port := 2427,</span><br><span>                /* Enable it for SCCPlite, since we have 2 MGCP sockets towards MGW (UDP one +</span><br><span>                  the on  with MGCP over IPA forwarded from MSC one) */</span><br><span style="color: hsl(0, 100%, 40%);">-                multi_conn_mode := (mp_bssap_cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER)</span><br><span style="color: hsl(120, 100%, 40%);">+                multi_conn_mode := (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_SCCPlite_SERVER)</span><br><span>    };</span><br><span> </span><br><span>       vc_MGCP := MGCP_Emulation_CT.create(id);</span><br><span>@@ -344,7 +372,9 @@</span><br><span> /* global initialization function</span><br><span>  * \param nr_bts Number of BTSs we should start/bring up</span><br><span>  * \param handler_mode Start an RSL_Emulation_CT component (true) or not (false) */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false, boolean allow_osmux := false) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false, boolean allow_osmux := false,</span><br><span style="color: hsl(120, 100%, 40%);">+              integer nr_msc := 1) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var integer bssap_idx;</span><br><span>       var integer i;</span><br><span> </span><br><span>   if (g_initialized) {</span><br><span>@@ -360,19 +390,21 @@</span><br><span>                 f_vty_allow_osmux(allow_osmux);</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* Call a function of our 'parent component' RAN_Adapter_CT to start the</span><br><span style="color: hsl(0, 100%, 40%);">-         * MSC-side BSSAP emulation */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (handler_mode) {</span><br><span style="color: hsl(0, 100%, 40%);">-             var RanOps ranops := MSC_RanOps;</span><br><span style="color: hsl(0, 100%, 40%);">-                ranops.use_osmux := g_osmux_enabled;</span><br><span style="color: hsl(0, 100%, 40%);">-            f_ran_adapter_init(g_bssap, mp_bssap_cfg, "VirtMSC", ranops);</span><br><span style="color: hsl(0, 100%, 40%);">-         connect(self:SCCPLITE_IPA_CTRL, g_bssap.vc_RAN:CTRL_CLIENT);</span><br><span style="color: hsl(0, 100%, 40%);">-            f_ran_adapter_start(g_bssap);</span><br><span style="color: hsl(0, 100%, 40%);">-   } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                f_ran_adapter_init(g_bssap, mp_bssap_cfg, "VirtMSC", omit);</span><br><span style="color: hsl(0, 100%, 40%);">-           connect(self:BSSAP, g_bssap.vc_SCCP:SCCP_SP_PORT);</span><br><span style="color: hsl(0, 100%, 40%);">-              f_ran_adapter_start(g_bssap);</span><br><span style="color: hsl(0, 100%, 40%);">-           f_legacy_bssap_reset();</span><br><span style="color: hsl(120, 100%, 40%);">+       for (bssap_idx := 0; bssap_idx < nr_msc; bssap_idx := bssap_idx+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Call a function of our 'parent component' RAN_Adapter_CT to start the</span><br><span style="color: hsl(120, 100%, 40%);">+               * MSC-side BSSAP emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+                if (handler_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   var RanOps ranops := MSC_RanOps;</span><br><span style="color: hsl(120, 100%, 40%);">+                      ranops.use_osmux := g_osmux_enabled;</span><br><span style="color: hsl(120, 100%, 40%);">+                  f_ran_adapter_init(g_bssap[bssap_idx], mp_bssap_cfg[bssap_idx], "VirtMSC", ranops);</span><br><span style="color: hsl(120, 100%, 40%);">+                 connect(self:SCCPLITE_IPA_CTRL, g_bssap[bssap_idx].vc_RAN:CTRL_CLIENT);</span><br><span style="color: hsl(120, 100%, 40%);">+                       f_ran_adapter_start(g_bssap[bssap_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      f_ran_adapter_init(g_bssap[bssap_idx], mp_bssap_cfg[bssap_idx], "VirtMSC", omit);</span><br><span style="color: hsl(120, 100%, 40%);">+                   connect(self:BSSAP, g_bssap[bssap_idx].vc_SCCP:SCCP_SP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+                 f_ran_adapter_start(g_bssap[bssap_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+                      f_legacy_bssap_reset();</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>    }</span><br><span> </span><br><span>        f_ipa_ctrl_start(mp_bsc_ip, mp_bsc_ctrl_port);</span><br><span>@@ -612,16 +644,17 @@</span><br><span> </span><br><span> /* Verify that the BSC refuses any BSSAP connection from the MSC (They are all BSC->MSC direction,</span><br><span>  * except for the inter-BSC handover, MT side) */</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_outbound_connect() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_outbound_connect(integer bssap_idx := 0) runs on test_CT {</span><br><span>     f_init(1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, 2342, ts_BSSMAP_AssignmentReq));</span><br><span style="color: hsl(120, 100%, 40%);">+       BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  2342, ts_BSSMAP_AssignmentReq));</span><br><span>     BSSAP.receive(tr_BSSAP_DISC_ind(2342, ?, ?));</span><br><span>        setverdict(pass);</span><br><span> }</span><br><span> </span><br><span> /* Test behavior if MSC answers with CREF to CR */</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_assignment_cic_only() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_assignment_cic_only(integer bssap_idx := 0) runs on test_CT {</span><br><span>       var BSSAP_N_CONNECT_ind rx_c_ind;</span><br><span>    var RSL_Message rx_rsl;</span><br><span>      var DchanTuple dt;</span><br><span>@@ -629,7 +662,7 @@</span><br><span>     f_init(1);</span><br><span> </span><br><span>       dt := f_est_dchan('23'O, 23, '00000000'O);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             /* send assignment without AoIP IEs */</span><br><span>               BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_AssignmentReq(ts_BSSMAP_IE_CIC(0, 1))));</span><br><span>     } else {</span><br><span>@@ -651,10 +684,10 @@</span><br><span> }</span><br><span> </span><br><span> /* generate an assignment request for either AoIP or SCCPlite */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_gen_ass_req(boolean osmux_enabled := false) return PDU_BSSAP {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_gen_ass_req(boolean osmux_enabled := false, integer bssap_idx := 0) return PDU_BSSAP {</span><br><span>    var PDU_BSSAP ass_cmd;</span><br><span>       var BSSMAP_IE_Osmo_OsmuxCID osmux_cid := valueof(ts_OsmuxCID(0));</span><br><span style="color: hsl(0, 100%, 40%);">-       if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             var BSSMAP_IE_AoIP_TransportLayerAddress tla :=</span><br><span>                                              valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));</span><br><span>          if (osmux_enabled) {</span><br><span>@@ -669,9 +702,9 @@</span><br><span>   return ass_cmd;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_gen_handover_req() return PDU_BSSAP {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_gen_handover_req(integer bssap_idx := 0) return PDU_BSSAP {</span><br><span>     var PDU_BSSAP ho_req;</span><br><span style="color: hsl(0, 100%, 40%);">-   if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             var BSSMAP_IE_AoIP_TransportLayerAddress tla :=</span><br><span>                                              valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));</span><br><span>          ho_req := valueof(ts_BSSMAP_HandoverRequest(omit, tla));</span><br><span>@@ -683,10 +716,10 @@</span><br><span> }</span><br><span> </span><br><span> /* generate an assignment complete template for either AoIP or SCCPlite */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_gen_exp_compl(boolean expect_osmux := false) return template PDU_BSSAP {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_gen_exp_compl(boolean expect_osmux := false, integer bssap_idx := 0) return template PDU_BSSAP {</span><br><span>      var template PDU_BSSAP exp_compl;</span><br><span>    var BSSMAP_IE_Osmo_OsmuxCID osmux_cid := valueof(ts_OsmuxCID(0));</span><br><span style="color: hsl(0, 100%, 40%);">-       if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             if (expect_osmux) {</span><br><span>                  exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?, osmux_cid);</span><br><span>               } else {</span><br><span>@@ -1055,9 +1088,9 @@</span><br><span>     IPA_RSL[0].clear;</span><br><span> </span><br><span>        /* perform BSSAP RESET, expect RESET ACK and DISC.ind on connection */</span><br><span style="color: hsl(0, 100%, 40%);">-  BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled)));</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled)));</span><br><span>         interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap.sccp_addr_own, g_bssap.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { }</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccp_addr_own, g_bssap[0].sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { }</span><br><span>        [] BSSAP.receive(tr_BSSAP_DISC_ind(dt.sccp_conn_id, ?, ?)) { }</span><br><span>       }</span><br><span> </span><br><span>@@ -1258,10 +1291,6 @@</span><br><span>       setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_bssap_tx_ud(template PDU_BSSAP bssap) runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-    BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, bssap));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> </span><br><span> /***********************************************************************</span><br><span>  * Paging Testing</span><br><span>@@ -1314,7 +1343,8 @@</span><br><span>               bssmap_chneed := omit;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   f_bssap_tx_ud(ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed));</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed)));</span><br><span> </span><br><span>        if (not istemplatekind(tmsi, "omit")) {</span><br><span>            mi := t_MI_TMSI(tmsi);</span><br><span>@@ -1583,9 +1613,9 @@</span><br><span>       f_pageing_helper('001010123456789'H, cid_list, c_BtsId_all);</span><br><span> </span><br><span>     /* Perform a BSSMAP Reset and wait for ACK */</span><br><span style="color: hsl(0, 100%, 40%);">-   BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled)));</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled)));</span><br><span>         alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap.sccp_addr_own, g_bssap.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { }</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccp_addr_own, g_bssap[0].sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { }</span><br><span>        [] BSSAP.receive { repeat; }</span><br><span>         }</span><br><span> </span><br><span>@@ -1744,8 +1774,8 @@</span><br><span> type function void_fn(charstring id) runs on MSC_ConnHdlr;</span><br><span> </span><br><span> /* helper function to create and connect a MSC_ConnHdlr component */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_connect_handler(inout MSC_ConnHdlr vc_conn) runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:RAN, g_bssap.vc_RAN:PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_connect_handler(inout MSC_ConnHdlr vc_conn, integer bssap_idx := 0) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  connect(vc_conn:RAN, g_bssap[bssap_idx].vc_RAN:PROC);</span><br><span>        connect(vc_conn:MGCP_PROC, vc_MGCP:MGCP_PROC);</span><br><span>       connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT);</span><br><span>   connect(vc_conn:RSL_PROC, bts[0].rsl.vc_RSL:RSL_PROC);</span><br><span>@@ -1757,7 +1787,7 @@</span><br><span>               connect(vc_conn:RSL2, bts[2].rsl.vc_RSL:CLIENT_PT);</span><br><span>          connect(vc_conn:RSL2_PROC, bts[2].rsl.vc_RSL:RSL_PROC);</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT);</span><br><span style="color: hsl(120, 100%, 40%);">+        connect(vc_conn:BSSAP, g_bssap[bssap_idx].vc_RAN:CLIENT);</span><br><span>    connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);</span><br><span>  connect(vc_conn:MGCP_MULTI, vc_MGCP:MGCP_CLIENT_MULTI);</span><br><span> }</span><br><span>@@ -1766,8 +1796,12 @@</span><br><span> runs on test_CT return MSC_ConnHdlr {</span><br><span>       var charstring id := testcasename();</span><br><span>         var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     var integer bssap_idx := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (isvalue(pars)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          bssap_idx := valueof(pars).mscpool.bssap_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span>    vc_conn := MSC_ConnHdlr.create(id);</span><br><span style="color: hsl(0, 100%, 40%);">-     f_connect_handler(vc_conn);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_connect_handler(vc_conn, bssap_idx);</span><br><span>       vc_conn.start(f_handler_init(fn, id, pars));</span><br><span>         return vc_conn;</span><br><span> }</span><br><span>@@ -2063,7 +2097,7 @@</span><br><span>         var template PDU_BSSAP exp_compl := f_gen_exp_compl(g_pars.use_osmux);</span><br><span> </span><br><span>   /* puzzle together the ASSIGNMENT REQ for given codec[s] */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             ass_cmd.pdu.bssmap.assignmentRequest.codecList := g_pars.ass_codec_list;</span><br><span>             exp_compl.pdu.bssmap.assignmentComplete.speechCodec.codecElements[0] :=</span><br><span>                                                              g_pars.ass_codec_list.codecElements[0];</span><br><span>@@ -2118,7 +2152,7 @@</span><br><span>      var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail;</span><br><span> </span><br><span>     /* puzzle together the ASSIGNMENT REQ for given codec[s] */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             ass_cmd.pdu.bssmap.assignmentRequest.codecList := g_pars.ass_codec_list;</span><br><span>     }</span><br><span>    ass_cmd.pdu.bssmap.assignmentRequest.channelType :=</span><br><span>@@ -3323,8 +3357,8 @@</span><br><span>  f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own;</span><br><span style="color: hsl(0, 100%, 40%);">-   pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer;</span><br><span style="color: hsl(120, 100%, 40%);">+        pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span style="color: hsl(120, 100%, 40%);">+      pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>        vc_conn := f_start_handler(refers(f_tc_ho_into_this_bsc), pars);</span><br><span>     vc_conn.done;</span><br><span>@@ -3396,8 +3430,8 @@</span><br><span>        f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own;</span><br><span style="color: hsl(0, 100%, 40%);">-   pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer;</span><br><span style="color: hsl(120, 100%, 40%);">+        pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span style="color: hsl(120, 100%, 40%);">+      pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>        vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears), pars);</span><br><span>        vc_conn.done;</span><br><span>@@ -3476,8 +3510,8 @@</span><br><span>        f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own;</span><br><span style="color: hsl(0, 100%, 40%);">-   pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer;</span><br><span style="color: hsl(120, 100%, 40%);">+        pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span style="color: hsl(120, 100%, 40%);">+      pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>        vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears_after_ho_detect), pars);</span><br><span>        vc_conn.done;</span><br><span>@@ -3557,8 +3591,8 @@</span><br><span>        f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own;</span><br><span style="color: hsl(0, 100%, 40%);">-   pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer;</span><br><span style="color: hsl(120, 100%, 40%);">+        pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span style="color: hsl(120, 100%, 40%);">+      pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>        vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect), pars);</span><br><span>         vc_conn.done;</span><br><span>@@ -3628,8 +3662,8 @@</span><br><span>        f_init(1, true);</span><br><span>     f_sleep(1.0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own;</span><br><span style="color: hsl(0, 100%, 40%);">-   pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer;</span><br><span style="color: hsl(120, 100%, 40%);">+        pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span style="color: hsl(120, 100%, 40%);">+      pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</span><br><span> </span><br><span>        vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect2), pars);</span><br><span>        vc_conn.done;</span><br><span>@@ -4422,7 +4456,7 @@</span><br><span>        execute( TC_ctrl_msc_connection_status() );</span><br><span>  execute( TC_ctrl_msc0_connection_status() );</span><br><span>         execute( TC_ctrl() );</span><br><span style="color: hsl(0, 100%, 40%);">-   if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER) {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_SCCPlite_SERVER) {</span><br><span>          execute( TC_ctrl_location() );</span><br><span>       }</span><br><span> </span><br><span>@@ -4453,7 +4487,7 @@</span><br><span>        execute( TC_assignment_sign() );</span><br><span>     execute( TC_assignment_fr_a5_0() );</span><br><span>  execute( TC_assignment_fr_a5_1() );</span><br><span style="color: hsl(0, 100%, 40%);">-     if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             execute( TC_assignment_fr_a5_1_codec_missing() );</span><br><span>    }</span><br><span>    execute( TC_assignment_fr_a5_3() );</span><br><span>@@ -4468,7 +4502,7 @@</span><br><span>  execute( TC_assignment_codec_amr_f() );</span><br><span>      execute( TC_assignment_codec_amr_h() );</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             execute( TC_assignment_codec_amr_f_S1() );</span><br><span>           execute( TC_assignment_codec_amr_h_S1() );</span><br><span>           execute( TC_assignment_codec_amr_f_S124() );</span><br><span>diff --git a/bsc/BSC_Tests_LCLS.ttcn b/bsc/BSC_Tests_LCLS.ttcn</span><br><span>index 6087133..72fb525 100644</span><br><span>--- a/bsc/BSC_Tests_LCLS.ttcn</span><br><span>+++ b/bsc/BSC_Tests_LCLS.ttcn</span><br><span>@@ -161,8 +161,8 @@</span><br><span> </span><br><span> /* helper function to create and connect a MSC_ConnHdlr component */</span><br><span> /* FIXME: Why can't we use BSC_Tests.f_connect_andler() ?!? */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_connect_handler(inout LCLS_MSC_ConnHdlr vc_conn) runs on lcls_test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">- connect(vc_conn:RAN, g_bssap.vc_RAN:PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_connect_handler(inout LCLS_MSC_ConnHdlr vc_conn, integer bssap_idx := 0) runs on lcls_test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        connect(vc_conn:RAN, g_bssap[bssap_idx].vc_RAN:PROC);</span><br><span>        connect(vc_conn:MGCP_PROC, vc_MGCP:MGCP_PROC);</span><br><span>       connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT);</span><br><span>   connect(vc_conn:RSL_PROC, bts[0].rsl.vc_RSL:RSL_PROC);</span><br><span>@@ -170,7 +170,7 @@</span><br><span>                 connect(vc_conn:RSL1, bts[1].rsl.vc_RSL:CLIENT_PT);</span><br><span>          connect(vc_conn:RSL1_PROC, bts[1].rsl.vc_RSL:RSL_PROC);</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT);</span><br><span style="color: hsl(120, 100%, 40%);">+        connect(vc_conn:BSSAP, g_bssap[bssap_idx].vc_RAN:CLIENT);</span><br><span>    connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);</span><br><span> }</span><br><span> </span><br><span>diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>index f1d2e63..593f4d6 100644</span><br><span>--- a/bsc/MSC_ConnectionHandler.ttcn</span><br><span>+++ b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>@@ -514,6 +514,12 @@</span><br><span>     SCCP_PAR_Address sccp_addr_bsc</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type record TestHdlrParamsMSCPool {</span><br><span style="color: hsl(120, 100%, 40%);">+  integer bssap_idx,</span><br><span style="color: hsl(120, 100%, 40%);">+    integer rsl_idx,</span><br><span style="color: hsl(120, 100%, 40%);">+      PDU_ML3_MS_NW l3_info optional</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type record TestHdlrParams {</span><br><span>  OCT1            ra,</span><br><span>  GsmFrameNumber  fn,</span><br><span>@@ -529,7 +535,8 @@</span><br><span>    uint5_t         exp_ms_power_level,</span><br><span>  boolean         exp_ms_power_params,</span><br><span>         boolean         aoip,</span><br><span style="color: hsl(0, 100%, 40%);">-   boolean         use_osmux</span><br><span style="color: hsl(120, 100%, 40%);">+     boolean         use_osmux,</span><br><span style="color: hsl(120, 100%, 40%);">+    TestHdlrParamsMSCPool mscpool</span><br><span> };</span><br><span> </span><br><span> /* Note: Do not use valueof() to get a value of this template, use</span><br><span>@@ -556,7 +563,12 @@</span><br><span>         exp_ms_power_level := 7, /* calculated from osmo-bsc.cfg "ms max power" */</span><br><span>         exp_ms_power_params := false,</span><br><span>        aoip := true,</span><br><span style="color: hsl(0, 100%, 40%);">-   use_osmux := false</span><br><span style="color: hsl(120, 100%, 40%);">+    use_osmux := false,</span><br><span style="color: hsl(120, 100%, 40%);">+   mscpool := {</span><br><span style="color: hsl(120, 100%, 40%);">+          bssap_idx := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+               rsl_idx := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+         l3_info := omit</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> }</span><br><span> </span><br><span> function f_create_chan_and_exp() runs on MSC_ConnHdlr {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18760">change 18760</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/+/18760"/><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: Ibb36695b7c31f7b04eec6c5d59522fc0779b3c2f </div>
<div style="display:none"> Gerrit-Change-Number: 18760 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>