CTRL: Introduce support to run osmocom CTRL server
Change-Id: I37db9962f51baf2c63bd58ec47ec89f773d7a255
diff --git a/bsc-nat/BSCNAT_Tests.ttcn b/bsc-nat/BSCNAT_Tests.ttcn
index 41d58d7..1b24855 100644
--- a/bsc-nat/BSCNAT_Tests.ttcn
+++ b/bsc-nat/BSCNAT_Tests.ttcn
@@ -151,7 +151,7 @@
f_init_vty("VirtBSCNAT");
f_vty_allow_osmux(use_osmux);
- f_ipa_ctrl_start(mp_nat_ip, mp_nat_ctrl_port);
+ f_ipa_ctrl_start_client(mp_nat_ip, mp_nat_ctrl_port);
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);
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index a1fa4dd..2c02e36 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1103,7 +1103,7 @@
/* start the test with exactly all enabled MSCs allowed to attach */
f_vty_msc_allow_attach(BSCVTY, allow_attach);
- f_ipa_ctrl_start(mp_bsc_ip, mp_bsc_ctrl_port);
+ f_ipa_ctrl_start_client(mp_bsc_ip, mp_bsc_ctrl_port);
f_init_mgcp("VirtMSC");
@@ -3080,7 +3080,7 @@
bts[0].rsl.ccm_pars.name := "Osmocom TTCN-3 BTS Simulator";
bts[0].rsl.ccm_pars.unit_id := "99/0/0"; /* value which is unknown at BTS */
- f_ipa_ctrl_start(mp_bsc_ip, mp_bsc_ctrl_port);
+ f_ipa_ctrl_start_client(mp_bsc_ip, mp_bsc_ctrl_port);
f_init_mgcp("VirtMSC");
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 16e3d71..c843032 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -547,7 +547,7 @@
f_init_rsl(id);
f_sleep(0.5); /* workaround for OS#3000 */
f_init_vty(id);
- f_ipa_ctrl_start(mp_ctrl_ip, mp_ctrl_port);
+ f_ipa_ctrl_start_client(mp_ctrl_ip, mp_ctrl_port);
/* Send SI3 to the BTS, it is needed for various computations */
f_rsl_bcch_fill(RSL_SYSTEM_INFO_3, ts_SI3_default);
@@ -5376,7 +5376,7 @@
/* re-connect CTRL port from BTS to BSC */
f_ipa_ctrl_stop();
- f_ipa_ctrl_start(mp_bsc_ctrl_ip, mp_bsc_ctrl_port);
+ f_ipa_ctrl_start_client(mp_bsc_ctrl_ip, mp_bsc_ctrl_port);
/* Send that OML Alert */
PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_TXT_IND(0, PCU_OML_ALERT, testcasename())));
diff --git a/hlr/HLR_Tests.ttcn b/hlr/HLR_Tests.ttcn
index 36e28b8..ea450b3 100644
--- a/hlr/HLR_Tests.ttcn
+++ b/hlr/HLR_Tests.ttcn
@@ -245,7 +245,7 @@
f_init_gsup_server("HLR_Test");
}
- f_ipa_ctrl_start(mp_hlr_ip, mp_hlr_ctrl_port);
+ f_ipa_ctrl_start_client(mp_hlr_ip, mp_hlr_ctrl_port);
}
/*! Start HLR_ConnHdlr from testCT in a separate thread.
diff --git a/library/Osmocom_CTRL_Adapter.ttcn b/library/Osmocom_CTRL_Adapter.ttcn
index 0be3ebb..fefff8b 100644
--- a/library/Osmocom_CTRL_Adapter.ttcn
+++ b/library/Osmocom_CTRL_Adapter.ttcn
@@ -26,12 +26,24 @@
port IPA_CTRL_PT IPA_CTRL;
}
-
-/*! Start the CTRL connection to the specified BSC IP+Port */
-function f_ipa_ctrl_start(charstring bsc_host, PortNumber bsc_port)
+/* wait for IPA CTRL link to connect and send UP */
+function f_ipa_ctrl_wait_link_up()
runs on CTRL_Adapter_CT {
- var charstring id := "IPA-CTRL"
timer T := 10.0;
+ T.start;
+ alt {
+ [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { }
+ [] T.timeout {
+ setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_UP");
+ mtc.stop;
+ }
+ }
+}
+
+/*! Start the CTRL client connection to the specified CTRL IP+Port server*/
+function f_ipa_ctrl_start_client(charstring bsc_host, PortNumber bsc_port)
+runs on CTRL_Adapter_CT {
+ var charstring id := "IPA-CTRL-CLI"
vc_CTRL_IPA := IPA_Emulation_CT.create(id & "-IPA");
@@ -41,15 +53,21 @@
vc_CTRL_IPA.start(IPA_Emulation.main_client(bsc_host, bsc_port, "", 0,
c_IPA_default_ccm_pars, false));
- /* wait for IPA CTRL link to connect and send UP */
- T.start;
- alt {
- [] IPA_CTRL.receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { }
- [] T.timeout {
- setverdict(fail, "Timeout CTRL waiting for ASP_IPA_EVENT_UP");
- mtc.stop;
- }
- }
+ f_ipa_ctrl_wait_link_up();
+}
+
+/*! Start the CTRL server on the specified CTRL IP+Port */
+function f_ipa_ctrl_start_server(charstring listen_host, PortNumber listen_port)
+runs on CTRL_Adapter_CT {
+ var charstring id := "IPA-CTRL-SRV"
+ timer T := 10.0;
+
+ vc_CTRL_IPA := IPA_Emulation_CT.create(id & "-IPA");
+
+ map(vc_CTRL_IPA:IPA_PORT, system:IPA_CODEC_PT);
+ connect(vc_CTRL_IPA:IPA_CTRL_PORT, self:IPA_CTRL);
+
+ vc_CTRL_IPA.start(IPA_Emulation.main_server(listen_host, listen_port, false));
}
function f_ipa_ctrl_stop() runs on CTRL_Adapter_CT {
diff --git a/library/Osmocom_CTRL_Functions.ttcn b/library/Osmocom_CTRL_Functions.ttcn
index d26dc89..294fe33 100644
--- a/library/Osmocom_CTRL_Functions.ttcn
+++ b/library/Osmocom_CTRL_Functions.ttcn
@@ -117,6 +117,26 @@
return rx.cmd.val;
}
+ /* Expect a matching SET, optionally answer */
+ function f_ctrl_exp_get(IPA_CTRL_PT pt, template CtrlVariable variable,
+ template (omit) CtrlValue rsp := omit,
+ float timeout_val := 2.0) {
+ timer T := timeout_val;
+ var CtrlMessage rx;
+ T.start;
+ alt {
+ [] pt.receive(tr_CtrlMsgGet(?, variable)) -> value rx {
+ if (ispresent(rsp)) {
+ pt.send(ts_CtrlMsgGetRepl(rx.cmd.id, valueof(variable), valueof(rsp)));
+ }
+ }
+ [] T.timeout {
+ setverdict(fail, "Timeout waiting for GET ", variable);
+ mtc.stop;
+ }
+ }
+ }
+
/* Expect a matching GET result */
function f_ctrl_get_exp(IPA_CTRL_PT pt, CtrlVariable variable, template CtrlValue exp) {
var charstring ctrl_resp;
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 6ea4f86..3996a87 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -182,7 +182,7 @@
}
if (g_pars.ipa_ctrl_enable == true) {
- f_ipa_ctrl_start(g_pars.ipa_ctrl_ip, g_pars.ipa_ctrl_port);
+ f_ipa_ctrl_start_client(g_pars.ipa_ctrl_ip, g_pars.ipa_ctrl_port);
}
map(self:MSCVTY, system:MSCVTY);
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 5129c5b..e6681bb 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -318,7 +318,7 @@
}
}
- f_ipa_ctrl_start(mp_msc_ip, mp_msc_ctrl_port);
+ f_ipa_ctrl_start_client(mp_msc_ip, mp_msc_ctrl_port);
f_init_mncc("MSC_Test");
f_init_mgcp("MSC_Test");
diff --git a/sip/SIP_Tests.ttcn b/sip/SIP_Tests.ttcn
index 053395e..37c158e 100644
--- a/sip/SIP_Tests.ttcn
+++ b/sip/SIP_Tests.ttcn
@@ -134,7 +134,7 @@
}
function f_init() runs on test_CT {
- //f_ipa_ctrl_start(mp_osmosip_host, mp_osmosip_port_ctrl);
+ //f_ipa_ctrl_start_client(mp_osmosip_host, mp_osmosip_port_ctrl);
f_init_mncc("SIP_Test");
log("end of f_init_mncc");
f_init_sip(vc_SIP, "SIP_Test");