From f246a925e8a8a27963d10756cc2c398324429fca Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Wed, 13 May 2020 02:27:10 +0200 Subject: bsc: allow multiple MSCs Similar to the MSC tests, have several g_bssap and mp_bssap_cfg. Prepare for MSC pool tests. Replace g_bssap with a g_bssap[NUM_MSC] array. Replace mp_bssap_cfg with an mp_bssap_cfg[NUM_MSC] array. Requires patch I1986e4ef43beee161c82193694421b56136c1afe in docker-playground to match the new required BSC_Tests.cfg format. Related: OS#3682 Change-Id: Ibb36695b7c31f7b04eec6c5d59522fc0779b3c2f --- bsc/BSC_Tests.ttcn | 176 +++++++++++++++++++++++++---------------- bsc/BSC_Tests_LCLS.ttcn | 6 +- bsc/MSC_ConnectionHandler.ttcn | 12 ++- 3 files changed, 119 insertions(+), 75 deletions(-) diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn index 48766f15..364254c5 100644 --- a/bsc/BSC_Tests.ttcn +++ b/bsc/BSC_Tests.ttcn @@ -59,6 +59,7 @@ import from BSSMAP_Templates all; import from SCCPasp_Types all; const integer NUM_BTS := 3; +const integer NUM_MSC := 3; const float T3101_MAX := 12.0; /* make sure to sync this with the osmo-bts.cfg you're using */ @@ -87,7 +88,7 @@ type component test_CT extends CTRL_Adapter_CT { var MGCP_Emulation_CT vc_MGCP; port TELNETasp_PT BSCVTY; - var RAN_Adapter g_bssap; + var RAN_Adapter g_bssap[NUM_MSC]; /* for old legacy-tests only */ port BSSAP_CODEC_PT BSSAP; @@ -119,16 +120,40 @@ modulepar { /* IP address at which the test binds */ charstring mp_test_ip := "127.0.0.1"; - RAN_Configuration mp_bssap_cfg := { - transport := BSSAP_TRANSPORT_AoIP, - sccp_service_type := "mtp3_itu", - sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" }, - own_pc := 185, - own_ssn := 254, - peer_pc := 187, - peer_ssn := 254, - sio := '83'O, - rctx := 0 + RAN_Configurations mp_bssap_cfg := { + { + transport := BSSAP_TRANSPORT_AoIP, + sccp_service_type := "mtp3_itu", + sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" }, + own_pc := 185, /* 0.23.1 first MSC emulation */ + own_ssn := 254, + peer_pc := 187, /* 0.23.3 osmo-bsc */ + peer_ssn := 254, + sio := '83'O, + rctx := 0 + }, + { + transport := BSSAP_TRANSPORT_AoIP, + sccp_service_type := "mtp3_itu", + sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" }, + own_pc := 2, /* 0.0.2 second MSC emulation */ + own_ssn := 254, + peer_pc := 187, /* 0.23.3 osmo-bsc */ + peer_ssn := 254, + sio := '83'O, + rctx := 2 + }, + { + transport := BSSAP_TRANSPORT_AoIP, + sccp_service_type := "mtp3_itu", + sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" }, + own_pc := 3, /* 0.0.3 third MSC emulation */ + own_ssn := 254, + peer_pc := 187, /* 0.23.3 osmo-bsc */ + peer_ssn := 254, + sio := '83'O, + rctx := 3 + } }; /* Whether to enable osmux tests. Can be dropped completely and enable @@ -139,15 +164,16 @@ modulepar { uint8_t mp_exp_ms_power_level := 7; } -private function f_gen_test_hdlr_pars() return TestHdlrParams { +private function f_gen_test_hdlr_pars(integer bssap_idx := 0) return TestHdlrParams { var TestHdlrParams pars := valueof(t_def_TestHdlrPars); - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) { pars.aoip := true; } else { pars.aoip := false; } pars.exp_ms_power_level := mp_exp_ms_power_level; + pars.mscpool.bssap_idx := bssap_idx; return pars; } @@ -158,13 +184,15 @@ private function f_shutdown_helper() runs on test_CT { mtc.stop; } -private function f_legacy_bssap_reset() runs on test_CT { +private function f_legacy_bssap_reset(integer bssap_idx := 0) runs on test_CT { var BSSAP_N_UNITDATA_ind ud_ind; timer T := 5.0; - BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled))); + BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own, + ts_BSSMAP_Reset(0, g_osmux_enabled))); T.start; alt { - [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap.sccp_addr_own, g_bssap.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { + [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[bssap_idx].sccp_addr_own, g_bssap[bssap_idx].sccp_addr_peer, + tr_BSSMAP_ResetAck(g_osmux_enabled))) { log("Received RESET-ACK in response to RESET, we're ready to go!"); } [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset(g_osmux_enabled))) -> value ud_ind { @@ -306,7 +334,7 @@ function f_init_mgcp(charstring id) runs on test_CT { mgw_udp_port := 2427, /* Enable it for SCCPlite, since we have 2 MGCP sockets towards MGW (UDP one + the on with MGCP over IPA forwarded from MSC one) */ - multi_conn_mode := (mp_bssap_cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER) + multi_conn_mode := (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_SCCPlite_SERVER) }; vc_MGCP := MGCP_Emulation_CT.create(id); @@ -343,8 +371,12 @@ function f_init_vty(charstring id := "foo") runs on test_CT { /* global initialization function * \param nr_bts Number of BTSs we should start/bring up - * \param handler_mode Start an RSL_Emulation_CT component (true) or not (false) */ -function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false, boolean allow_osmux := false) runs on test_CT { + * \param handler_mode Start an RSL_Emulation_CT component (true) or not (false). + * \param nr_msc Number of virtual MSCs to bring up to connect to osmo-bsc. + */ +function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false, boolean allow_osmux := false, + integer nr_msc := 1) runs on test_CT { + var integer bssap_idx; var integer i; if (g_initialized) { @@ -360,19 +392,21 @@ function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false, boolea f_vty_allow_osmux(allow_osmux); } - /* Call a function of our 'parent component' RAN_Adapter_CT to start the - * MSC-side BSSAP emulation */ - if (handler_mode) { - var RanOps ranops := MSC_RanOps; - ranops.use_osmux := g_osmux_enabled; - f_ran_adapter_init(g_bssap, mp_bssap_cfg, "VirtMSC", ranops); - connect(self:SCCPLITE_IPA_CTRL, g_bssap.vc_RAN:CTRL_CLIENT); - f_ran_adapter_start(g_bssap); - } else { - f_ran_adapter_init(g_bssap, mp_bssap_cfg, "VirtMSC", omit); - connect(self:BSSAP, g_bssap.vc_SCCP:SCCP_SP_PORT); - f_ran_adapter_start(g_bssap); - f_legacy_bssap_reset(); + for (bssap_idx := 0; bssap_idx < nr_msc; bssap_idx := bssap_idx+1) { + /* Call a function of our 'parent component' RAN_Adapter_CT to start the + * MSC-side BSSAP emulation */ + if (handler_mode) { + var RanOps ranops := MSC_RanOps; + ranops.use_osmux := g_osmux_enabled; + f_ran_adapter_init(g_bssap[bssap_idx], mp_bssap_cfg[bssap_idx], "VirtMSC", ranops); + connect(self:SCCPLITE_IPA_CTRL, g_bssap[bssap_idx].vc_RAN:CTRL_CLIENT); + f_ran_adapter_start(g_bssap[bssap_idx]); + } else { + f_ran_adapter_init(g_bssap[bssap_idx], mp_bssap_cfg[bssap_idx], "VirtMSC", omit); + connect(self:BSSAP, g_bssap[bssap_idx].vc_SCCP:SCCP_SP_PORT); + f_ran_adapter_start(g_bssap[bssap_idx]); + f_legacy_bssap_reset(); + } } f_ipa_ctrl_start(mp_bsc_ip, mp_bsc_ctrl_port); @@ -612,16 +646,17 @@ testcase TC_chan_deact_silence() runs on test_CT { /* Verify that the BSC refuses any BSSAP connection from the MSC (They are all BSC->MSC direction, * except for the inter-BSC handover, MT side) */ -testcase TC_outbound_connect() runs on test_CT { +testcase TC_outbound_connect(integer bssap_idx := 0) runs on test_CT { f_init(1); - BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, 2342, ts_BSSMAP_AssignmentReq)); + BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own, + 2342, ts_BSSMAP_AssignmentReq)); BSSAP.receive(tr_BSSAP_DISC_ind(2342, ?, ?)); setverdict(pass); } /* Test behavior if MSC answers with CREF to CR */ -testcase TC_assignment_cic_only() runs on test_CT { +testcase TC_assignment_cic_only(integer bssap_idx := 0) runs on test_CT { var BSSAP_N_CONNECT_ind rx_c_ind; var RSL_Message rx_rsl; var DchanTuple dt; @@ -629,7 +664,7 @@ testcase TC_assignment_cic_only() runs on test_CT { f_init(1); dt := f_est_dchan('23'O, 23, '00000000'O); - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) { /* send assignment without AoIP IEs */ BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_AssignmentReq(ts_BSSMAP_IE_CIC(0, 1)))); } else { @@ -651,10 +686,10 @@ testcase TC_assignment_cic_only() runs on test_CT { } /* generate an assignment request for either AoIP or SCCPlite */ -function f_gen_ass_req(boolean osmux_enabled := false) return PDU_BSSAP { +function f_gen_ass_req(boolean osmux_enabled := false, integer bssap_idx := 0) return PDU_BSSAP { var PDU_BSSAP ass_cmd; var BSSMAP_IE_Osmo_OsmuxCID osmux_cid := valueof(ts_OsmuxCID(0)); - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) { var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342)); if (osmux_enabled) { @@ -669,9 +704,9 @@ function f_gen_ass_req(boolean osmux_enabled := false) return PDU_BSSAP { return ass_cmd; } -function f_gen_handover_req() return PDU_BSSAP { +function f_gen_handover_req(integer bssap_idx := 0) return PDU_BSSAP { var PDU_BSSAP ho_req; - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) { var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342)); ho_req := valueof(ts_BSSMAP_HandoverRequest(omit, tla)); @@ -683,10 +718,10 @@ function f_gen_handover_req() return PDU_BSSAP { } /* generate an assignment complete template for either AoIP or SCCPlite */ -function f_gen_exp_compl(boolean expect_osmux := false) return template PDU_BSSAP { +function f_gen_exp_compl(boolean expect_osmux := false, integer bssap_idx := 0) return template PDU_BSSAP { var template PDU_BSSAP exp_compl; var BSSMAP_IE_Osmo_OsmuxCID osmux_cid := valueof(ts_OsmuxCID(0)); - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) { if (expect_osmux) { exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?, osmux_cid); } else { @@ -1055,9 +1090,9 @@ testcase TC_chan_rel_a_reset() runs on test_CT { IPA_RSL[0].clear; /* perform BSSAP RESET, expect RESET ACK and DISC.ind on connection */ - BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled))); + 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))); interleave { - [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap.sccp_addr_own, g_bssap.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { } + [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccp_addr_own, g_bssap[0].sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { } [] BSSAP.receive(tr_BSSAP_DISC_ind(dt.sccp_conn_id, ?, ?)) { } } @@ -1258,10 +1293,6 @@ testcase TC_ctrl_location() runs on test_CT { setverdict(pass); } -function f_bssap_tx_ud(template PDU_BSSAP bssap) runs on test_CT { - BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, bssap)); -} - /*********************************************************************** * Paging Testing @@ -1314,7 +1345,8 @@ private function f_pageing_helper(hexstring imsi, bssmap_chneed := omit; } - f_bssap_tx_ud(ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed)); + BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, + ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed))); if (not istemplatekind(tmsi, "omit")) { mi := t_MI_TMSI(tmsi); @@ -1583,9 +1615,9 @@ testcase TC_paging_imsi_a_reset() runs on test_CT { f_pageing_helper('001010123456789'H, cid_list, c_BtsId_all); /* Perform a BSSMAP Reset and wait for ACK */ - BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled))); + 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))); alt { - [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap.sccp_addr_own, g_bssap.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { } + [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccp_addr_own, g_bssap[0].sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled))) { } [] BSSAP.receive { repeat; } } @@ -1744,8 +1776,8 @@ import from MSC_ConnectionHandler all; type function void_fn(charstring id) runs on MSC_ConnHdlr; /* helper function to create and connect a MSC_ConnHdlr component */ -private function f_connect_handler(inout MSC_ConnHdlr vc_conn) runs on test_CT { - connect(vc_conn:RAN, g_bssap.vc_RAN:PROC); +private function f_connect_handler(inout MSC_ConnHdlr vc_conn, integer bssap_idx := 0) runs on test_CT { + connect(vc_conn:RAN, g_bssap[bssap_idx].vc_RAN:PROC); connect(vc_conn:MGCP_PROC, vc_MGCP:MGCP_PROC); connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT); connect(vc_conn:RSL_PROC, bts[0].rsl.vc_RSL:RSL_PROC); @@ -1757,7 +1789,7 @@ private function f_connect_handler(inout MSC_ConnHdlr vc_conn) runs on test_CT { connect(vc_conn:RSL2, bts[2].rsl.vc_RSL:CLIENT_PT); connect(vc_conn:RSL2_PROC, bts[2].rsl.vc_RSL:RSL_PROC); } - connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT); + connect(vc_conn:BSSAP, g_bssap[bssap_idx].vc_RAN:CLIENT); connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT); connect(vc_conn:MGCP_MULTI, vc_MGCP:MGCP_CLIENT_MULTI); } @@ -1766,8 +1798,12 @@ function f_start_handler(void_fn fn, template (omit) TestHdlrParams pars := omit runs on test_CT return MSC_ConnHdlr { var charstring id := testcasename(); var MSC_ConnHdlr vc_conn; + var integer bssap_idx := 0; + if (isvalue(pars)) { + bssap_idx := valueof(pars).mscpool.bssap_idx; + } vc_conn := MSC_ConnHdlr.create(id); - f_connect_handler(vc_conn); + f_connect_handler(vc_conn, bssap_idx); vc_conn.start(f_handler_init(fn, id, pars)); return vc_conn; } @@ -2063,7 +2099,7 @@ private function f_TC_assignment_codec(charstring id) runs on MSC_ConnHdlr { var template PDU_BSSAP exp_compl := f_gen_exp_compl(g_pars.use_osmux); /* puzzle together the ASSIGNMENT REQ for given codec[s] */ - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) { ass_cmd.pdu.bssmap.assignmentRequest.codecList := g_pars.ass_codec_list; exp_compl.pdu.bssmap.assignmentComplete.speechCodec.codecElements[0] := g_pars.ass_codec_list.codecElements[0]; @@ -2118,7 +2154,7 @@ private function f_TC_assignment_codec_fail(charstring id) runs on MSC_ConnHdlr var template PDU_BSSAP exp_fail := tr_BSSMAP_AssignmentFail; /* puzzle together the ASSIGNMENT REQ for given codec[s] */ - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) { ass_cmd.pdu.bssmap.assignmentRequest.codecList := g_pars.ass_codec_list; } ass_cmd.pdu.bssmap.assignmentRequest.channelType := @@ -3323,8 +3359,8 @@ testcase TC_ho_into_this_bsc() runs on test_CT { f_init(1, true); f_sleep(1.0); - pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own; - pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer; + pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own; + pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_into_this_bsc), pars); vc_conn.done; @@ -3396,8 +3432,8 @@ testcase TC_ho_in_fail_msc_clears() runs on test_CT { f_init(1, true); f_sleep(1.0); - pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own; - pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer; + pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own; + pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears), pars); vc_conn.done; @@ -3476,8 +3512,8 @@ testcase TC_ho_in_fail_msc_clears_after_ho_detect() runs on test_CT { f_init(1, true); f_sleep(1.0); - pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own; - pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer; + pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own; + pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears_after_ho_detect), pars); vc_conn.done; @@ -3557,8 +3593,8 @@ testcase TC_ho_in_fail_no_detect() runs on test_CT { f_init(1, true); f_sleep(1.0); - pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own; - pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer; + pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own; + pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect), pars); vc_conn.done; @@ -3628,8 +3664,8 @@ testcase TC_ho_in_fail_no_detect2() runs on test_CT { f_init(1, true); f_sleep(1.0); - pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own; - pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer; + pars.handover.sccp_addr_msc := g_bssap[0].sccp_addr_own; + pars.handover.sccp_addr_bsc := g_bssap[0].sccp_addr_peer; vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect2), pars); vc_conn.done; @@ -4422,7 +4458,7 @@ control { execute( TC_ctrl_msc_connection_status() ); execute( TC_ctrl_msc0_connection_status() ); execute( TC_ctrl() ); - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER) { + if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_SCCPlite_SERVER) { execute( TC_ctrl_location() ); } @@ -4453,7 +4489,7 @@ control { execute( TC_assignment_sign() ); execute( TC_assignment_fr_a5_0() ); execute( TC_assignment_fr_a5_1() ); - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) { execute( TC_assignment_fr_a5_1_codec_missing() ); } execute( TC_assignment_fr_a5_3() ); @@ -4468,7 +4504,7 @@ control { execute( TC_assignment_codec_amr_f() ); execute( TC_assignment_codec_amr_h() ); - if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) { + if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) { execute( TC_assignment_codec_amr_f_S1() ); execute( TC_assignment_codec_amr_h_S1() ); execute( TC_assignment_codec_amr_f_S124() ); diff --git a/bsc/BSC_Tests_LCLS.ttcn b/bsc/BSC_Tests_LCLS.ttcn index 60871330..72fb525b 100644 --- a/bsc/BSC_Tests_LCLS.ttcn +++ b/bsc/BSC_Tests_LCLS.ttcn @@ -161,8 +161,8 @@ runs on LCLS_MSC_ConnHdlr { /* helper function to create and connect a MSC_ConnHdlr component */ /* FIXME: Why can't we use BSC_Tests.f_connect_andler() ?!? */ -private function f_connect_handler(inout LCLS_MSC_ConnHdlr vc_conn) runs on lcls_test_CT { - connect(vc_conn:RAN, g_bssap.vc_RAN:PROC); +private function f_connect_handler(inout LCLS_MSC_ConnHdlr vc_conn, integer bssap_idx := 0) runs on lcls_test_CT { + connect(vc_conn:RAN, g_bssap[bssap_idx].vc_RAN:PROC); connect(vc_conn:MGCP_PROC, vc_MGCP:MGCP_PROC); connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT); connect(vc_conn:RSL_PROC, bts[0].rsl.vc_RSL:RSL_PROC); @@ -170,7 +170,7 @@ private function f_connect_handler(inout LCLS_MSC_ConnHdlr vc_conn) runs on lcls connect(vc_conn:RSL1, bts[1].rsl.vc_RSL:CLIENT_PT); connect(vc_conn:RSL1_PROC, bts[1].rsl.vc_RSL:RSL_PROC); } - connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT); + connect(vc_conn:BSSAP, g_bssap[bssap_idx].vc_RAN:CLIENT); connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT); } diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn index f1d2e639..feedc6f0 100644 --- a/bsc/MSC_ConnectionHandler.ttcn +++ b/bsc/MSC_ConnectionHandler.ttcn @@ -514,6 +514,10 @@ type record TestHdlrParamsHandover { SCCP_PAR_Address sccp_addr_bsc } +type record TestHdlrParamsMSCPool { + integer bssap_idx +} + type record TestHdlrParams { OCT1 ra, GsmFrameNumber fn, @@ -529,7 +533,8 @@ type record TestHdlrParams { uint5_t exp_ms_power_level, boolean exp_ms_power_params, boolean aoip, - boolean use_osmux + boolean use_osmux, + TestHdlrParamsMSCPool mscpool }; /* Note: Do not use valueof() to get a value of this template, use @@ -556,7 +561,10 @@ template (value) TestHdlrParams t_def_TestHdlrPars := { exp_ms_power_level := 7, /* calculated from osmo-bsc.cfg "ms max power" */ exp_ms_power_params := false, aoip := true, - use_osmux := false + use_osmux := false, + mscpool := { + bssap_idx := 0 + } } function f_create_chan_and_exp() runs on MSC_ConnHdlr { -- cgit v1.2.3