aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Willmann <dwillmann@sysmocom.de>2018-01-17 12:44:35 +0100
committerDaniel Willmann <dwillmann@sysmocom.de>2018-01-17 13:12:19 +0100
commit6304d06b575472f40f08e7ae8d8102efc7108643 (patch)
tree683c4da880c41291b4b94d824b0e8b4812598148
parenta43a78cc5c92cece10449e82d218ef7f6ccfde3f (diff)
bsc: Start MGCP_Emulation and extend MSC_ConnectionHandler for MGCP
-rw-r--r--bsc/BSC_Tests.ttcn21
-rw-r--r--bsc/MSC_ConnectionHandler.ttcn23
2 files changed, 41 insertions, 3 deletions
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 0080fe09..3f047280 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -31,6 +31,7 @@ import from IPA_Emulation all;
import from IPA_Types all;
import from RSL_Types all;
import from RSL_Emulation all;
+import from MGCP_Emulation all;
import from Osmocom_CTRL_Functions all;
import from Osmocom_CTRL_Types all;
@@ -78,6 +79,8 @@ type component test_CT extends BSSAP_Adapter_CT {
/* array of per-BTS RSL test ports */
port IPA_RSL_PT IPA_RSL[NUM_BTS];
+ var MGCP_Emulation_CT vc_MGCP;
+
/* component reference to the IPA_Client component used for CTRL to BSC */
var IPA_Client ctrl;
/* test port for the CTRL interface of the BSC */
@@ -160,6 +163,11 @@ runs on test_CT {
}
}
+function f_mgcp_start(inout MGCP_Emulation_CT vc_mgcp, MGCP_conn_parameters p) runs on test_CT {
+ vc_mgcp := MGCP_Emulation_CT.create("MGCP");
+ vc_mgcp.start(MGCP_Emulation.main(p, "foo"));
+}
+
/*! Start the CTRL connection to the specified BSC IP+Port */
function f_ipa_ctrl_start(inout IPA_Client clnt, charstring bsc_host, PortNumber bsc_port, integer i)
runs on test_CT {
@@ -229,6 +237,7 @@ altstep as_Tguard() runs on test_CT {
* \param handler_mode Start an RSL_Emulation_CT component (true) or not (false) */
function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false) runs on test_CT {
var integer i;
+ var MGCP_conn_parameters mgcp_pars;
if (g_initialized) {
return;
@@ -238,8 +247,18 @@ function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false) runs o
/* Call a function of our 'parent component' BSSAP_Adapter_CT to start the
* MSC-side BSSAP emulation */
f_bssap_init("VirtMSC", handler_mode);
+
f_ipa_ctrl_start(ctrl, mp_bsc_ip, mp_bsc_ctrl_port, 0);
+ mgcp_pars := {
+ callagent_ip := mp_bsc_ip,
+ callagent_udp_port := 2427,
+ mgw_ip := mp_test_ip,
+ mgw_udp_port := 2727
+ };
+
+ f_mgcp_start(vc_MGCP, mgcp_pars);
+
for (i := 0; i < nr_bts; i := i+1) {
/* wait until osmo-bts-omldummy has respawned */
f_wait_oml(i, "degraded", 5.0);
@@ -1241,8 +1260,10 @@ function f_start_handler(void_fn fn, charstring id) runs on test_CT return MSC_C
vc_conn := MSC_ConnHdlr.create(id);
connect(vc_conn:BSSMAPEM, vc_BSSMAP:PROC);
+ connect(vc_conn:MGCPEM, vc_MGCP:PROC);
connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT);
connect(vc_conn:BSSAP, vc_BSSMAP:CLIENT);
+ connect(vc_conn:MGCP, vc_MGCP:CLIENT);
vc_conn.start(derefers(fn)(id));
return vc_conn;
}
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn
index f683ef4d..6a589024 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -10,6 +10,7 @@ import from BSSMAP_Templates all;
import from MGCP_Types all;
import from MGCP_Templates all;
+import from MGCP_Emulation all;
import from SDP_Types all;
import from RSL_Emulation all;
@@ -24,12 +25,13 @@ import from L3_Templates all;
/* this component represents a single subscriber connection at the MSC.
* There is a 1:1 mapping between SCCP connections and BSSAP_ConnHdlr components.
* We inherit all component variables, ports, functions, ... from BSSAP_ConnHdlr */
-type component MSC_ConnHdlr extends BSSAP_ConnHdlr, RSL_DchanHdlr {
+type component MSC_ConnHdlr extends BSSAP_ConnHdlr, RSL_DchanHdlr, MGCP_ConnHdlr {
/* SCCP Connecction Identifier for the underlying SCCP connection */
var integer g_sccp_conn_id;
/* procedure port back to our parent (BSSMAP_Emulation_CT) for control */
port BSSMAPEM_PROC_PT BSSMAPEM;
+ port MGCPEM_PROC_PT MGCPEM;
var MSC_State g_state := MSC_STATE_NONE;
}
@@ -53,6 +55,10 @@ const BssmapOps MSC_BssmapOps := {
unitdata_cb := refers(UnitdataCallback)
}
+const MGCPOps MSC_MGCPOps := {
+ create_cb := refers(MGCP_Emulation.ExpectedCreateCallback)
+}
+
type enumerated MSC_State {
MSC_STATE_NONE,
MSC_STATE_WAIT_ASS_COMPL,
@@ -62,8 +68,15 @@ type enumerated MSC_State {
MSC_STATE_WAIT_DLCX_ACK
}
+/* register an expect with the MGCP core */
+private function f_create_mgcp_exp(template MgcpCommand cmd) runs on MSC_ConnHdlr {
+ MGCPEM.call(MGCPEM_register:{cmd, self}) {
+ [] MGCPEM.getreply(MGCPEM_register:{?, ?}) {};
+ }
+}
+
/* register an expect with the BSSMAP core */
-private function f_create_exp(octetstring l3_enc) runs on MSC_ConnHdlr {
+private function f_create_bssmap_exp(octetstring l3_enc) runs on MSC_ConnHdlr {
BSSMAPEM.call(BSSMAPEM_register:{l3_enc, self}) {
[] BSSMAPEM.getreply(BSSMAPEM_register:{?, ?}) {};
}
@@ -90,7 +103,7 @@ function f_create_chan_and_exp(TestHdlrParams pars) runs on MSC_ConnHdlr {
/* call helper function for CHAN_RQD -> IMM ASS ->EST_IND */
RSL_Emulation.f_chan_est(pars.ra, l3_enc, pars.link_id, pars.fn);
- f_create_exp(l3_enc);
+ f_create_bssmap_exp(l3_enc);
}
function f_rsl_reply(template PDU_ML3_MS_NW l3, RSL_Message orig) runs on MSC_ConnHdlr {
@@ -182,10 +195,14 @@ runs on MSC_ConnHdlr return PDU_BSSAP {
crcx_seen := true;
repeat;
}
+ /* mgw CRCX goes here */
+
[crcx_seen] RSL.receive(tr_RSL_IPA_MDCX(g_chan_nr, ?)) -> value rsl{
RSL.send(ts_RSL_IPA_MDCX_ACK(g_chan_nr, 1, 1, 1, 1));
repeat;
}
+ /* mgw MGCX goes here */
+
[exp_compl] BSSAP.receive(tr_BSSMAP_AssignmentComplete) {
setverdict(fail, "Received non-matching ASSIGNMENT COMPLETE");
}