bsc-nat: Introduce Osmux test
Depends: openbsc.git Iadc004064a5a237c93009f242cb943ebc4d2d7e6 Change-Id: I35f206aab713ccf0a4e074872e291c349c903b9d
This commit is contained in:
parent
34b5a95d09
commit
f3c12228fb
|
@ -4,8 +4,19 @@ mtc.FileMask := ERROR | WARNING | PARALLEL | VERDICTOP;
|
|||
|
||||
[TESTPORT_PARAMETERS]
|
||||
#*.*.udpReuseAddress := "yes";
|
||||
*.BSCNATVTY.CTRL_MODE := "client"
|
||||
*.BSCNATVTY.CTRL_HOSTNAME := "127.0.0.1"
|
||||
*.BSCNATVTY.CTRL_PORTNUM := "4244"
|
||||
*.BSCNATVTY.CTRL_LOGIN_SKIPPED := "yes"
|
||||
*.BSCNATVTY.CTRL_DETECT_SERVER_DISCONNECTED := "yes"
|
||||
*.BSCNATVTY.CTRL_READMODE := "buffered"
|
||||
*.BSCNATVTY.CTRL_CLIENT_CLEANUP_LINEFEED := "yes"
|
||||
*.BSCNATVTY.CTRL_DETECT_CONNECTION_ESTABLISHMENT_RESULT := "yes"
|
||||
*.BSCNATVTY.PROMPT1 := "OsmoBSCNAT> "
|
||||
|
||||
|
||||
[MODULE_PARAMETERS]
|
||||
Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoBSCNAT";
|
||||
mp_bsc_port := 49999;
|
||||
mp_bsc_ip := "127.0.0.1";
|
||||
mp_msc_port := 5100;
|
||||
|
@ -22,4 +33,3 @@ mp_mgw_ip := "127.0.0.1";
|
|||
mp_mgw_udp_port := 2427;
|
||||
|
||||
[EXECUTE]
|
||||
|
||||
|
|
|
@ -26,6 +26,9 @@ import from SCCP_Emulation all;
|
|||
import from MSC_Simulation all;
|
||||
import from BSC_MS_Simulation all;
|
||||
|
||||
import from Osmocom_VTY_Functions all;
|
||||
import from TELNETasp_PortType all;
|
||||
|
||||
const integer NUM_MSC := 1;
|
||||
const integer NUM_BSC := 1;
|
||||
|
||||
|
@ -46,6 +49,8 @@ type component test_CT {
|
|||
var MscState msc[NUM_MSC];
|
||||
var BscState bsc[NUM_BSC];
|
||||
|
||||
port TELNETasp_PT BSCNATVTY;
|
||||
|
||||
var boolean g_initialized := false;
|
||||
var octetstring g_sio := '83'O;
|
||||
}
|
||||
|
@ -112,10 +117,31 @@ runs on test_CT {
|
|||
msc_st.sccp_addr_own := valueof(ts_SccpAddr_PC_SSN(opc, local_ssn));
|
||||
}
|
||||
|
||||
function f_init() runs on test_CT {
|
||||
function f_vty_allow_osmux(boolean allow) runs on test_CT {
|
||||
if (allow) {
|
||||
f_vty_config(BSCNATVTY, "mgcp", "osmux on");
|
||||
} else {
|
||||
f_vty_config(BSCNATVTY, "mgcp", "osmux off");
|
||||
}
|
||||
}
|
||||
|
||||
function f_init_vty(charstring id := "foo") runs on test_CT {
|
||||
if (BSCNATVTY.checkstate("Mapped")) {
|
||||
/* skip initialization if already executed once */
|
||||
return;
|
||||
}
|
||||
map(self:BSCNATVTY, system:BSCNATVTY);
|
||||
f_vty_set_prompts(BSCNATVTY);
|
||||
f_vty_transceive(BSCNATVTY, "enable");
|
||||
}
|
||||
|
||||
function f_init(boolean use_osmux) runs on test_CT {
|
||||
var integer i;
|
||||
var charstring id;
|
||||
|
||||
f_init_vty("VirtBSCNAT");
|
||||
f_vty_allow_osmux(use_osmux);
|
||||
|
||||
for (i := 0; i < NUM_MSC; i := i+1) {
|
||||
f_init_MscState(msc[i], mp_msc_pc +i, mp_bsc_pc, mp_msc_ssn, mp_bsc_ssn);
|
||||
id := "MSC" & int2str(i);
|
||||
|
@ -125,22 +151,23 @@ function f_init() runs on test_CT {
|
|||
|
||||
/* Wait for bsc_nat to attach to MSC. Before that all BSC connections will be dropped */
|
||||
f_sleep(5.0);
|
||||
|
||||
for (i := 0; i < NUM_BSC; i := i+1) {
|
||||
f_init_BscState(bsc[i], mp_bsc_pc +i, mp_msc_pc, mp_bsc_ssn, mp_msc_ssn);
|
||||
id := "BSC" & int2str(i);
|
||||
bsc[i].BSC := BSC_CT.create(id);
|
||||
bsc[i].BSC.start(BSC_MS_Simulation.main(mp_nat_ip, mp_nat_port, mp_bsc_ip, mp_bsc_port+i,
|
||||
bsc[i].sccp_pars, bsc[i].sccp_addr_own,
|
||||
bsc[i].sccp_addr_peer, id));
|
||||
bsc[i].sccp_addr_peer, use_osmux, id));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
testcase TC_recv_dump() runs on test_CT {
|
||||
function f_TC_recv_dump(boolean use_osmux := false) runs on test_CT {
|
||||
var integer i;
|
||||
timer T := 30.0;
|
||||
|
||||
f_init();
|
||||
f_init(use_osmux);
|
||||
|
||||
alt {
|
||||
/* wait for BSC to stop. The idea is that the BSC components terminate first */
|
||||
|
@ -155,8 +182,17 @@ testcase TC_recv_dump() runs on test_CT {
|
|||
}
|
||||
}
|
||||
|
||||
testcase TC_recv_dump() runs on test_CT {
|
||||
f_TC_recv_dump();
|
||||
}
|
||||
|
||||
testcase TC_recv_dump_osmux() runs on test_CT {
|
||||
f_TC_recv_dump(true);
|
||||
}
|
||||
|
||||
control {
|
||||
execute( TC_recv_dump() );
|
||||
execute( TC_recv_dump_osmux() );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ const RanOps BSC_MS_RanOps := {
|
|||
decode_dtap := false,
|
||||
role_ms := true,
|
||||
protocol := RAN_PROTOCOL_BSSAP,
|
||||
/* Always false. We don't want to enable Osmux signalling in SCCPLite messages: */
|
||||
use_osmux := false,
|
||||
sccp_addr_local := omit,
|
||||
sccp_addr_peer := omit
|
||||
|
@ -89,11 +90,12 @@ type enumerated BSC_State {
|
|||
}
|
||||
|
||||
/* main function processing various incoming events */
|
||||
function main(SCCP_PAR_Address sccp_addr_own, SCCP_PAR_Address sccp_addr_remote)
|
||||
function main(SCCP_PAR_Address sccp_addr_own, SCCP_PAR_Address sccp_addr_remote, boolean use_osmux)
|
||||
runs on BSC_MS_ConnHdlr {
|
||||
var PDU_BSSAP bssap;
|
||||
var MgcpCommand mgcp_cmd;
|
||||
var MgcpResponse mgcp_resp;
|
||||
var template MgcpResponse mgcp_resp;
|
||||
var MgcpOsmuxCID osmux_cid;
|
||||
|
||||
log("Starting main of BSC_MS_ConnHdlr");
|
||||
|
||||
|
@ -127,7 +129,19 @@ runs on BSC_MS_ConnHdlr {
|
|||
valueof(ts_SDP_ptime(20)) }));
|
||||
/* respond with CRCX_ACK */
|
||||
g_state := BSC_STATE_WAIT_MDCX;
|
||||
BSSAP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, g_mgcp_conn_id, g_sdp));
|
||||
|
||||
if (use_osmux != f_MgcpCmd_contains_par(mgcp_cmd, "X-OSMUX")) {
|
||||
setverdict(fail, log2str("Received Osmux CID presence doesn't match presence expectancy (", use_osmux, ")"));
|
||||
self.stop;
|
||||
}
|
||||
|
||||
if (use_osmux) {
|
||||
osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);
|
||||
mgcp_resp := ts_CRCX_ACK_osmux(mgcp_cmd.line.trans_id, g_mgcp_conn_id, osmux_cid, g_sdp);
|
||||
} else {
|
||||
mgcp_resp := ts_CRCX_ACK(mgcp_cmd.line.trans_id, g_mgcp_conn_id, g_sdp);
|
||||
}
|
||||
BSSAP.send(valueof(mgcp_resp));
|
||||
}
|
||||
|
||||
/* MDCX -> OK */
|
||||
|
|
|
@ -33,6 +33,7 @@ type component BSC_CT {
|
|||
|
||||
var SCCP_PAR_Address g_sccp_addr_own;
|
||||
var SCCP_PAR_Address g_sccp_addr_remote;
|
||||
var boolean g_use_osmux;
|
||||
|
||||
var charstring g_bsc_num_str;
|
||||
}
|
||||
|
@ -45,7 +46,8 @@ function main(charstring remote_ip, PortNumber remote_port,
|
|||
charstring local_ip, PortNumber local_port,
|
||||
MSC_SCCP_MTP3_parameters sccp_pars,
|
||||
SCCP_PAR_Address sccp_addr_own,
|
||||
SCCP_PAR_Address sccp_addr_remote, charstring id) runs on BSC_CT
|
||||
SCCP_PAR_Address sccp_addr_remote,
|
||||
boolean use_osmux, charstring id) runs on BSC_CT
|
||||
{
|
||||
var integer i := 0;
|
||||
timer T := 1.0;
|
||||
|
@ -54,6 +56,7 @@ function main(charstring remote_ip, PortNumber remote_port,
|
|||
|
||||
g_sccp_addr_own := sccp_addr_own;
|
||||
g_sccp_addr_remote := sccp_addr_remote;
|
||||
g_use_osmux := use_osmux;
|
||||
|
||||
/* create components for IPA/SCCP/BSS[M]AP stack */
|
||||
vc_IPA := IPA_Emulation_CT.create(id & "-IPA");
|
||||
|
@ -98,7 +101,7 @@ function f_start_BSC_MS(charstring id) runs on BSC_CT {
|
|||
/* connect client BSSAP port to BSSAP dispatcher */
|
||||
connect(vc_conn:BSSAP, vc_BSSMAP:CLIENT);
|
||||
/* start component */
|
||||
vc_conn.start(BSC_MS_ConnectionHandler.main(g_sccp_addr_own, g_sccp_addr_remote));
|
||||
vc_conn.start(BSC_MS_ConnectionHandler.main(g_sccp_addr_own, g_sccp_addr_remote, g_use_osmux));
|
||||
/* blocking wait until component terminates. If you want to start MSs in parallel,
|
||||
* you have to remove this statement here */
|
||||
vc_conn.done;
|
||||
|
|
|
@ -20,6 +20,11 @@ DIR=$BASEDIR/titan.TestPorts.IPL4asp/src
|
|||
FILES="IPL4asp_Functions.ttcn IPL4asp_PT.cc IPL4asp_PT.hh IPL4asp_PortType.ttcn IPL4asp_Types.ttcn IPL4asp_discovery.cc IPL4asp_protocol_L234.hh"
|
||||
gen_links $DIR $FILES
|
||||
|
||||
# for Osmocom_VTY
|
||||
DIR=$BASEDIR/titan.TestPorts.TELNETasp/src
|
||||
FILES="TELNETasp_PT.cc TELNETasp_PT.hh TELNETasp_PortType.ttcn"
|
||||
gen_links $DIR $FILES
|
||||
|
||||
# required by SCCP Emulation
|
||||
DIR=$BASEDIR/titan.TestPorts.MTP3asp/src
|
||||
FILES="MTP3asp_PortType.ttcn MTP3asp_Types.ttcn"
|
||||
|
@ -47,7 +52,7 @@ FILES="RTP_EncDec.cc RTP_Types.ttcn"
|
|||
gen_links $DIR $FILES
|
||||
|
||||
DIR=../library
|
||||
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn"
|
||||
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_VTY_Functions.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn"
|
||||
gen_links $DIR $FILES
|
||||
|
||||
ignore_pp_results
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
MAIN=BSCNAT_Tests.ttcn
|
||||
|
||||
FILES="*.ttcn *.ttcnpp SCCP_EncDec.cc IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc RTP_EncDec.cc SDP_EncDec.cc *.c MGCP_CodecPort_CtrlFunctDef.cc"
|
||||
FILES="*.ttcn *.ttcnpp SCCP_EncDec.cc IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc RTP_EncDec.cc SDP_EncDec.cc *.c MGCP_CodecPort_CtrlFunctDef.cc TELNETasp_PT.cc"
|
||||
|
||||
export CPPFLAGS_TTCN3="-DIPA_EMULATION_SCCP -DIPA_EMULATION_MGCP -DRAN_EMULATION_BSSAP -DRAN_EMULATION_MGCP -DUSE_MTP3_DISTRIBUTOR"
|
||||
|
||||
|
|
Loading…
Reference in New Issue