aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Willmann <dwillmann@sysmocom.de>2022-02-21 17:56:16 +0100
committerDaniel Willmann <dwillmann@sysmocom.de>2022-02-21 18:01:34 +0100
commit5c8eb6c59075f8aad3b709fb6e94f6ca0cf502fd (patch)
tree3f1f9602a5e116eaf69210ef9ef8cf0bd4c636ad
parent5be0b2cdfe67387a0269c30378f19b48cb7004db (diff)
WIP MGCP timeoutdaniel/hnbgw
-rw-r--r--hnbgw/HNBGW_Tests.ttcn106
-rw-r--r--library/ranap/RANAP_Templates.ttcn4
2 files changed, 83 insertions, 27 deletions
diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn
index a7bfaf82..b4fd3c6f 100644
--- a/hnbgw/HNBGW_Tests.ttcn
+++ b/hnbgw/HNBGW_Tests.ttcn
@@ -118,6 +118,7 @@ type record CrcxResponse {
MgcpConnectionId mgcp_connection_id
}
type record MgcpParameters {
+ boolean handle_mgcp,
integer got_crcx_count,
integer got_dlcx_count,
MgcpCallId mgcp_call_id optional,
@@ -135,6 +136,7 @@ type record MgcpParameters {
}
template (value) MgcpParameters t_MgcpParams := {
+ handle_mgcp := true,
got_crcx_count := 0,
got_dlcx_count := 0,
mgcp_call_id := omit,
@@ -775,15 +777,17 @@ friend function f_rab_ass_req(MgcpParameters pars) runs on ConnHdlr {
BSSAP.send(tx);
T.start;
- /* Handle MGCP CRCX */
- alt {
- [] MGCP.receive(tr_CRCX) -> value mgcp_cmd {
- log("CRCX1", mgcp_cmd);
- var template MgcpResponse mgcp_rsp := f_handle_crcx(pars, mgcp_cmd);
- MGCP.send(valueof(mgcp_rsp));
- }
- [] T.timeout {
- setverdict(fail, "Timeout waiting for MGCP");
+ if (pars.handle_mgcp) {
+ /* Handle MGCP CRCX */
+ alt {
+ [] MGCP.receive(tr_CRCX) -> value mgcp_cmd {
+ log("CRCX1", mgcp_cmd);
+ var template MgcpResponse mgcp_rsp := f_handle_crcx(pars, mgcp_cmd);
+ MGCP.send(valueof(mgcp_rsp));
+ }
+ [] T.timeout {
+ setverdict(fail, "Timeout waiting for MGCP");
+ }
}
}
@@ -813,23 +817,25 @@ friend function f_rab_ass_resp(MgcpParameters pars) runs on ConnHdlr {
RUA.send(tx);
T.start;
- interleave {
- /* Expect MDCX with IP/port from RAB Assignment Response */
- [] MGCP.receive(tr_MDCX(tr_SDP(pars.hnb_rtp_ip, pars.hnb_rtp_port))) -> value mgcp_cmd {
- log("MDCX1", mgcp_cmd);
- /* Verify SDP of MDCX */
- var SDP_Message sdp := valueof(ts_SDP(pars.mgw_conn_1.mgw_rtp_ip, pars.mgw_conn_1.mgw_rtp_ip, hex2str(pars.mgcp_call_id), "42", pars.mgw_conn_1.mgw_rtp_port,
- { int2str(pars.rtp_payload_type) }, { valueof(ts_SDP_rtpmap(pars.rtp_payload_type, pars.rtp_sdp_format)), valueof(ts_SDP_ptime(20)) } ));
- var template MgcpResponse mgcp_rsp := ts_MDCX_ACK(mgcp_cmd.line.trans_id, pars.mgw_conn_1.mgcp_connection_id, sdp);
- MGCP.send(valueof(mgcp_rsp));
+ if (pars.handle_mgcp) {
+ interleave {
+ /* Expect MDCX with IP/port from RAB Assignment Response */
+ [] MGCP.receive(tr_MDCX(tr_SDP(pars.hnb_rtp_ip, pars.hnb_rtp_port))) -> value mgcp_cmd {
+ log("MDCX1", mgcp_cmd);
+ /* Verify SDP of MDCX */
+ var SDP_Message sdp := valueof(ts_SDP(pars.mgw_conn_1.mgw_rtp_ip, pars.mgw_conn_1.mgw_rtp_ip, hex2str(pars.mgcp_call_id), "42", pars.mgw_conn_1.mgw_rtp_port,
+ { int2str(pars.rtp_payload_type) }, { valueof(ts_SDP_rtpmap(pars.rtp_payload_type, pars.rtp_sdp_format)), valueof(ts_SDP_ptime(20)) } ));
+ var template MgcpResponse mgcp_rsp := ts_MDCX_ACK(mgcp_cmd.line.trans_id, pars.mgw_conn_1.mgcp_connection_id, sdp);
+ MGCP.send(valueof(mgcp_rsp));
+ }
+ /* Handle CRCX for second leg of endpoint, answer with IP/port */
+ [] MGCP.receive(tr_CRCX(pars.mgcp_ep, tr_SDP(pars.cn_rtp_ip, pars.cn_rtp_port))) -> value mgcp_cmd {
+ log("CRCX2", mgcp_cmd);
+ /* Verify SDP of CRCX */
+ var template MgcpResponse mgcp_rsp := f_handle_crcx(pars, mgcp_cmd);
+ MGCP.send(valueof(mgcp_rsp));
+ }
}
- /* Handle CRCX for second leg of endpoint, answer with IP/port */
- [] MGCP.receive(tr_CRCX(pars.mgcp_ep, tr_SDP(pars.cn_rtp_ip, pars.cn_rtp_port))) -> value mgcp_cmd {
- log("CRCX2", mgcp_cmd);
- /* Verify SDP of CRCX */
- var template MgcpResponse mgcp_rsp := f_handle_crcx(pars, mgcp_cmd);
- MGCP.send(valueof(mgcp_rsp));
- }
}
/* Expect RAB Assignment Response with IP/port from second CRCX ACK */
@@ -981,6 +987,55 @@ testcase TC_rab_release() runs on test_CT {
vc_conn.done;
}
+friend function f_tc_rab_assign_mgcp_to(charstring id, TestHdlrParams pars) runs on ConnHdlr {
+ var MgcpCommand mgcp_cmd;
+ var RANAP_PDU tx;
+ var template RAB_SetupOrModifyList rab_sml;
+ timer T := 15.0;
+
+ T.start;
+ pars.mgcp_pars.handle_mgcp := false;
+ f_init_handler(pars);
+ f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
+
+ tx := f_build_initial_ue(g_pars);
+ f_iuh2iu_connect(tx);
+
+
+ /* Send RAB Assignment Request */
+ rab_sml := ts_RAB_SML(t_RAB_id(23), f_ts_RAB_TLA(pars.mgcp_pars.cn_rtp_ip), t_RAB_binding_port(pars.mgcp_pars.cn_rtp_port));
+ tx := valueof(ts_RANAP_RabAssReq(rab_sml));
+ BSSAP.send(tx);
+
+ /* Ignore MGCP CRCX */
+ alt {
+ [] MGCP.receive(tr_CRCX) -> value mgcp_cmd {
+ log("Ignoreing CRCX1", mgcp_cmd);
+ repeat;
+ }
+ [] BSSAP.receive(tr_RANAP_IuReleaseRequest(?)) { }
+ [] T.timeout {
+ setverdict(fail, "Timeout waiting for IuRelease");
+ }
+ }
+
+ /* Send Iu Release */
+ tx := valueof(ts_RANAP_IuReleaseCommand(ts_RanapCause_om_intervention));
+ f_iu2iuh(tx);
+
+ tx := valueof(ts_RANAP_IuReleaseComplete());
+ f_iuh2iu(tx);
+}
+
+testcase TC_rab_assign_mgcp_to() runs on test_CT {
+ var ConnHdlr vc_conn;
+ f_init();
+ f_start_hnbs();
+
+ vc_conn := f_start_handler_with_pars(refers(f_tc_rab_assign_mgcp_to), t_pars(6));
+ vc_conn.done;
+}
+
/* Create an Iuh connection; send InitialUE; transceive data both directions */
friend function f_tc_ranap_bidir(charstring id, TestHdlrParams pars) runs on ConnHdlr {
f_init_handler(pars);
@@ -1061,6 +1116,7 @@ control {
execute(TC_rab_assignment());
execute(TC_rab_release());
execute(TC_rab_assign_fail());
+ execute(TC_rab_assign_mgcp_to());
execute(TC_ranap_cs_mo_disconnect());
execute(TC_ranap_ps_mo_disconnect());
}
diff --git a/library/ranap/RANAP_Templates.ttcn b/library/ranap/RANAP_Templates.ttcn
index 6b4699e1..caccdc76 100644
--- a/library/ranap/RANAP_Templates.ttcn
+++ b/library/ranap/RANAP_Templates.ttcn
@@ -451,7 +451,7 @@ ts_RANAP_IuReleaseRequest(template (value) Cause cause,
protocolIEs := {
{
id := id_Cause,
- criticality := reject,
+ criticality := ignore,
value_ := {
cause := cause
}
@@ -473,7 +473,7 @@ tr_RANAP_IuReleaseRequest(template Cause cause,
protocolIEs := {
{
id := id_Cause,
- criticality := reject,
+ criticality := ignore,
value_ := {
cause := cause
}