ts_BSSMAP_HandoReq: Hand in raw list as argument, not IE type
Also, add new ts_BSSMAP_Paging() template.
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
new file mode 100644
index 0000000..4629e6e
--- /dev/null
+++ b/bsc/BSC_Tests.ttcn
@@ -0,0 +1,110 @@
+module BSC_Tests {
+
+import from Osmocom_Types all;
+
+import from IPL4asp_Types all;
+
+import from IPA_Emulation all;
+
+import from MTP3asp_Types all;
+
+import from SCCP_Types all;
+import from SCCPasp_Types all;
+import from SCCP_Emulation all;
+
+import from MSC_Simulation all;
+
+const integer NUM_MSC := 1;
+
+type record MscState {
+ MSC_CT MSC,
+ MSC_SCCP_MTP3_parameters sccp_pars,
+ SCCP_PAR_Address sccp_addr_own
+}
+
+type component test_CT {
+ var MscState msc[NUM_MSC];
+
+ var boolean g_initialized := false;
+ var octetstring g_sio := '83'O;
+}
+
+modulepar {
+ PortNumber mp_msc_port := 5000;
+ charstring mp_msc_ip := "127.0.0.1";
+
+ charstring mp_sccp_service_type := "mtp3_itu";
+
+ integer mp_bsc_pc := 196;
+ integer mp_bsc_ssn := 254;
+
+ integer mp_msc_pc := 185; /* 0.23.1 */
+ integer mp_msc_ssn := 254;
+}
+
+/* construct a SCCP_PAR_Address with just PC + SSN and no GT */
+template (value) SCCP_PAR_Address ts_SccpAddr_PC_SSN(integer pc, integer ssn) := {
+ addressIndicator := {
+ pointCodeIndic := '1'B,
+ ssnIndicator := '1'B,
+ globalTitleIndic := '0000'B,
+ routingIndicator := '1'B
+ },
+ signPointCode := SCCP_SPC_int2bit(pc, mp_sccp_service_type, '83'O),
+ //signPointCode := SCCP_SPC_int2bit(pc, mp_sccp_service_type, g_sio),
+ subsystemNumber := ssn,
+ globalTitle := omit
+}
+
+template MTP3_Field_sio ts_sio(octetstring sio_in) := {
+ ni := substr(oct2bit(sio_in),0,2),
+ prio := substr(oct2bit(sio_in),2,2),
+ si := substr(oct2bit(sio_in),4,4)
+}
+
+template MSC_SCCP_MTP3_parameters ts_SCCP_Pars(octetstring sio, integer opc, integer dpc,
+ integer local_ssn) := {
+ sio := ts_sio(sio),
+ opc := opc,
+ dpc := dpc,
+ sls := 0,
+ sccp_serviceType := mp_sccp_service_type,
+ ssn := local_ssn
+};
+
+function f_init_MscState(inout MscState msc_st, integer opc, integer dpc, integer local_ssn, integer remote_ssn)
+runs on test_CT {
+ msc_st.sccp_pars := valueof(ts_SCCP_Pars(g_sio, opc, dpc, local_ssn));
+ msc_st.sccp_addr_own := valueof(ts_SccpAddr_PC_SSN(opc, local_ssn));
+}
+
+function f_init() runs on test_CT {
+ var integer i;
+ var charstring id;
+
+ 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);
+ msc[i].MSC := MSC_CT.create;
+ id := "MSC" & int2str(i);
+ msc[i].MSC.start(MSC_Simulation.main(mp_msc_ip, mp_msc_port + i, msc[i].sccp_pars, msc[i].sccp_addr_own, id));
+ }
+
+}
+
+testcase TC_recv_dump() runs on test_CT {
+ var integer i;
+ timer T := 30.0;
+
+ f_init();
+
+ alt {
+ [] msc[0].MSC.done { }
+ [] T.timeout { setverdict(fail); }
+ }
+}
+
+control {
+ execute( TC_recv_dump() );
+}
+
+}