|
|
|
@ -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() ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|