ipa: First version that emulates both MSC and BSC up to ASSIGNMENT REQ
diff --git a/ipa/IPA_Test.ttcn b/ipa/IPA_Test.ttcn
index 4e87fa6..c8b8205 100644
--- a/ipa/IPA_Test.ttcn
+++ b/ipa/IPA_Test.ttcn
@@ -1,48 +1,58 @@
module IPA_Test {
+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 MobileL3_Types all;
-import from MobileL3_CommonIE_Types all;
-import from L3_Templates all;
+import from MSC_Simulation all;
+import from BSC_MS_Simulation all;
-import from BSSAP_Types all;
-import from BSSMAP_Templates all;
+const integer NUM_MSC := 1;
+const integer NUM_BSC := 1;
+
+type record BscState {
+ BSC_CT BSC,
+ MSC_SCCP_MTP3_parameters sccp_pars,
+ SCCP_PAR_Address sccp_addr_own,
+ SCCP_PAR_Address sccp_addr_peer
+}
+
+type record MscState {
+ MSC_CT MSC,
+ MSC_SCCP_MTP3_parameters sccp_pars,
+ SCCP_PAR_Address sccp_addr_own
+}
type component test_CT {
- /* component references */
- var IPA_Emulation_CT vc_IPA;
- var SCCP_CT vc_SCCP;
- /* test port to SCCP emulation */
- port SCCPasp_PT SCCP;
+ var MscState msc[NUM_MSC];
+ var BscState bsc[NUM_BSC];
var boolean g_initialized := false;
- var octetstring g_sio;
- var MSC_SCCP_MTP3_parameters g_sccp_pars;
- var SCCP_PAR_Address g_sccp_addr_own, g_sccp_addr_peer;
-
- var ConnectionId g_ipa_conn_id := -1;
+ var octetstring g_sio := '83'O;
}
modulepar {
- PortNumber mp_local_port := 0;
- charstring mp_local_ip := "127.0.0.1";
- PortNumber mp_remote_port := 3002;
- charstring mp_remote_ip := "127.0.0.1";
+ PortNumber mp_bsc_port := 49999;
+ charstring mp_bsc_ip := "127.0.0.1";
+
+ PortNumber mp_msc_port := 5000;
+ charstring mp_msc_ip := "127.0.0.1";
charstring mp_sccp_service_type := "mtp3_itu";
- integer mp_own_pc := 196;
- integer mp_own_ssn := 254;
+ integer mp_bsc_pc := 196;
+ integer mp_bsc_ssn := 254;
- integer mp_peer_pc := 185; /* 0.23.1 */
- integer mp_peer_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 */
@@ -59,76 +69,62 @@
globalTitle := omit
}
-
-function f_gen_cl3() return PDU_BSSAP {
- var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV('901770123456789'H));
- var PDU_ML3_MS_NW l3 := valueof(ts_CM_SERV_REQ('0001'B, mi));
- var BSSMAP_IE_CellIdentifier cell_id := valueof(ts_CellID_LAC_CI(23, 42));
- var PDU_BSSAP bssap := valueof(ts_BSSMAP_ComplL3(cell_id, enc_PDU_ML3_MS_NW(l3)));
- return bssap;
+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)
}
-function f_send_bssap_cc(PDU_BSSAP bssap) runs on test_CT {
- var ASP_SCCP_N_CONNECT_req prim;
- prim := valueof(t_ASP_N_CONNECT_req(g_sccp_addr_peer, g_sccp_addr_own, omit, omit,
- enc_PDU_BSSAP(bssap), 23, omit));
- SCCP.send(prim);
+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_BscState(inout BscState bsc_st, integer opc, integer dpc, integer local_ssn, integer remote_ssn)
+runs on test_CT {
+ bsc_st.sccp_pars := valueof(ts_SCCP_Pars(g_sio, opc, dpc, local_ssn));
+ bsc_st.sccp_addr_own := valueof(ts_SccpAddr_PC_SSN(opc, local_ssn));
+ bsc_st.sccp_addr_peer := valueof(ts_SccpAddr_PC_SSN(dpc, remote_ssn));
}
-function init_pars() runs on test_CT {
- g_sio := '83'O;
- g_sccp_pars := {
- sio := {
- ni := substr(oct2bit(g_sio),0,2),
- prio := substr(oct2bit(g_sio),2,2),
- si := substr(oct2bit(g_sio),4,4)
- },
- opc := mp_own_pc,
- dpc := mp_peer_pc,
- sls := 0,
- sccp_serviceType := mp_sccp_service_type,
- ssn := mp_own_ssn
- };
- g_sccp_addr_own := valueof(ts_SccpAddr_PC_SSN(mp_own_pc, mp_own_ssn));
- g_sccp_addr_peer := valueof(ts_SccpAddr_PC_SSN(mp_peer_pc, mp_peer_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));
}
-private function f_init() runs on test_CT {
- var Result res;
+function f_init() runs on test_CT {
+ var integer i;
- if (g_initialized == true) {
- return;
+ 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;
+ msc[i].MSC.start(MSC_Simulation.main(mp_msc_ip, mp_msc_port + i, msc[i].sccp_pars, msc[i].sccp_addr_own));
}
- g_initialized := true;
- init_pars();
+ 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);
+ bsc[i].BSC := BSC_CT.create;
+ bsc[i].BSC.start(BSC_MS_Simulation.main(mp_msc_ip, mp_msc_port, mp_bsc_ip, mp_bsc_port+i,
+ bsc[i].sccp_pars, bsc[i].sccp_addr_own,
+ bsc[i].sccp_addr_peer));
+ }
- /* create components */
- vc_IPA := IPA_Emulation_CT.create;
- vc_SCCP := SCCP_CT.create;
-
- map(vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
-
- /* connect MTP3 service provider (IPA) to lower side of SCCP */
- connect(vc_IPA:MTP3_SP_PORT, vc_SCCP:MTP3_SCCP_PORT);
-
- /* connect us to upper side of SCCP */
- connect(self:SCCP, vc_SCCP:SCCP_SP_PORT);
-
- vc_IPA.start(IPA_Emulation.ScanEvents());
- vc_SCCP.start(SCCPStart(g_sccp_pars));
-
- //IPA_Emulation.f_connect(mp_remote_ip, mp_remote_port, mp_local_ip, mp_local_port);
}
testcase TC_recv_dump() runs on test_CT {
f_init();
- var PDU_BSSAP bssap := f_gen_cl3();
- f_send_bssap_cc(bssap);
+ //var PDU_BSSAP bssap := f_gen_cl3();
+ //f_send_bssap_cc(bssap);
while (true) {
- SCCP.receive;
+ //SCCP.receive;
}
}