msc: Make TC_lu_and_mo_call succeed with osmo-mg enabled osmo-msc
This is for patch https://gerrit.osmocom.org/#/c/4980 in osmo-msc
Change-Id: Ieec52d5e0da776d35d6a473bd726b368af9d5c66
diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 549997e..2050e3d 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -585,6 +585,49 @@
}
}
+template PDU_ML3_NW_MS tr_ML3_MT_CC_CONNECT(integer tid) := {
+ discriminator := '0011'B,
+ tiOrSkip := {
+ transactionId := {
+ tio := int2bit(tid, 3),
+ tiFlag := '1'B,
+ tIExtension := omit
+ }
+ },
+ msgs := {
+ cc := {
+ connect_NW_MS := {
+ messageType := '000111'B,
+ nsd := '00'B,
+ facility := *,
+ progressIndicator := *,
+ connectedNumber := *,
+ connectedSubAddress := *,
+ user_user := *
+ }
+ }
+ }
+}
+
+template (value) PDU_ML3_MS_NW ts_ML3_MO_CC_CONNECT_ACK(integer tid) := {
+ discriminator := '0011'B,
+ tiOrSkip := {
+ transactionId := {
+ tio := int2bit(tid, 3),
+ tiFlag := '0'B,
+ tIExtension := omit
+ }
+ },
+ msgs := {
+ cc := {
+ connectAck := {
+ messageType := '001111'B,
+ nsd := '00'B
+ }
+ }
+ }
+}
+
template PDU_ML3_NW_MS tr_ML3_MT_CC_DISC(integer tid) := {
discriminator := '0011'B,
tiOrSkip := {
diff --git a/library/MGCP_Templates.ttcn b/library/MGCP_Templates.ttcn
index 182868e..7f10bd2 100644
--- a/library/MGCP_Templates.ttcn
+++ b/library/MGCP_Templates.ttcn
@@ -74,8 +74,8 @@
sdp := sdp
}
- template MgcpCommand tr_CRCX := {
- line := t_MgcpCmdLine("CRCX", ?, ?),
+ template MgcpCommand tr_CRCX(template MgcpEndpoint ep := ?) := {
+ line := t_MgcpCmdLine("CRCX", ?, ep),
params := *,
sdp := *
}
diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn
index 46159b7..884a7c0 100644
--- a/library/MNCC_Types.ttcn
+++ b/library/MNCC_Types.ttcn
@@ -499,9 +499,9 @@
}
};
-/* MT: MSC -> MNCC: Respons to SETUP.req */
-template MNCC_PDU tr_MNCC_SETUP_rsp(template uint32_t call_id := ?, template MNCC_number connected := *,
- template charstring imsi := ?) := {
+/* MO: MSC <- MNCC: Respons to SETUP.ind */
+template MNCC_PDU ts_MNCC_SETUP_rsp(uint32_t call_id, charstring imsi := "",
+ template MNCC_number connected := omit) := {
msg_type := MNCC_SETUP_RSP,
u := {
signal := { /* See 24.008 9.3.5 */
@@ -513,20 +513,20 @@
connected := connected,
cause := omit,
progress := omit,
- useruser := *,
- facility := *,
+ useruser := omit, /* optional */
+ facility := omit, /* optional */
cccap := omit,
- ssversion := *,
+ ssversion := omit, /* optional */
clir_sup := 0,
clir_inv := 0,
signal := omit,
keypad := omit,
more := 0,
notify := 0,
- emergency := *,
+ emergency := omit,
imsi := imsi,
- lchan_type := ?,
- lchan_mode := ?
+ lchan_type := 0,
+ lchan_mode := 0
}
}
};
@@ -595,9 +595,9 @@
}
}
-/* MO: MSC <- MNCC: SETUP_COMPL.req; request to send CONNECT ACK */
-template MNCC_PDU ts_MNCC_SETUP_COMPL_req(uint32_t call_id) :=
- ts_MNCC_SIMPLE(MNCC_SETUP_COMPL_REQ, call_id); /* See 24.008 9.3.6 */
+/* MT: MSC -> MNCC: SETUP_COMPL.req; request to send CONNECT ACK */
+template MNCC_PDU tr_MNCC_SETUP_COMPL_req(template uint32_t call_id) :=
+ tr_MNCC_SIMPLE(MNCC_SETUP_COMPL_REQ, call_id); /* See 24.008 9.3.6 */
/* MT: MSC -> MNCC: SETUP_COMPL.ind; receipt of CONNECT ACK */
template MNCC_PDU tr_MNCC_SETUP_COMPL_ind(template uint32_t call_id := ?) :=
diff --git a/msc_tests/BSC_ConnectionHandler.ttcn b/msc_tests/BSC_ConnectionHandler.ttcn
index 8ce1332..75871c5 100644
--- a/msc_tests/BSC_ConnectionHandler.ttcn
+++ b/msc_tests/BSC_ConnectionHandler.ttcn
@@ -285,6 +285,10 @@
PortNumber bss_rtp_port optional, /* BSS Side RTP Port */
HostName mss_rtp_ip optional, /* MSS Side RTP IP */
PortNumber mss_rtp_port optional, /* MSS Side RTP Port */
+ HostName mgw_rtp_ip_bss, /* BSS-facing MGW RTP IP */
+ PortNumber mgw_rtp_port_bss, /* BSS-facing MGW RTP Port */
+ HostName mgw_rtp_ip_mss, /* MSS-facing MGW RTP IP */
+ PortNumber mgw_rtp_port_mss, /* MSS-facing MGW RTP Port */
uint7_t rtp_payload_type, /* dynamic RTP payload type */
charstring rtp_sdp_format, /* AMR/8000 or the like */
@@ -302,10 +306,14 @@
bearer_cap := valueof(ts_Bcap_voice),
mncc_callref := omit,
mncc_bearer_cap := valueof(ts_MNCC_bcap_voice),
- bss_rtp_ip := "1.1.1.1",
- bss_rtp_port := 0,//
+ bss_rtp_ip := "9.8.7.6",
+ bss_rtp_port := 9000,
mss_rtp_ip := omit,
mss_rtp_port := omit,
+ mgw_rtp_ip_bss := "1.1.1.1",
+ mgw_rtp_port_bss := 10000,
+ mgw_rtp_ip_mss := "1.1.1.1",
+ mgw_rtp_port_mss := 11000,
rtp_payload_type := 98,
rtp_sdp_format := "AMR/8000",
mgcp_call_id := omit,
@@ -342,13 +350,14 @@
MNCC.send(ts_MNCC_CALL_PROC_req(cpars.mncc_callref, cpars.mncc_bearer_cap));
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_CALL_PROC(cpars.transaction_id)));
};
+ /* First MGCP CRCX (for BSS/RAN side) */
[] MGCP.receive(tr_CRCX) -> value mgcp_cmd {
cpars.mgcp_call_id := f_MgcpCmd_extract_call_id(mgcp_cmd);
/* TODO: dynamic EP allocation case */
cpars.mgcp_ep := mgcp_cmd.line.ep;
- var SDP_Message sdp := valueof(ts_SDP(cpars.bss_rtp_ip, cpars.bss_rtp_ip,
+ var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_rtp_ip_bss, cpars.mgw_rtp_ip_bss,
hex2str(cpars.mgcp_call_id), "42",
- cpars.bss_rtp_port,
+ cpars.mgw_rtp_port_bss,
{ int2str(cpars.rtp_payload_type) },
{ valueof(ts_SDP_rtpmap(cpars.rtp_payload_type,
cpars.rtp_sdp_format)),
@@ -356,22 +365,37 @@
MGCP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, cpars.mgcp_connection_id_bss, sdp));
}
}
+ /* Second MGCP CRCX (this time for MSS/CN side) */
+ MGCP.receive(tr_CRCX(cpars.mgcp_ep)) -> value mgcp_cmd {
+ var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_rtp_ip_mss, cpars.mgw_rtp_ip_mss,
+ hex2str(cpars.mgcp_call_id), "42",
+ cpars.mgw_rtp_port_mss,
+ { int2str(cpars.rtp_payload_type) },
+ { valueof(ts_SDP_rtpmap(cpars.rtp_payload_type,
+ cpars.rtp_sdp_format)),
+ valueof(ts_SDP_ptime(20)) }));
+ MGCP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, cpars.mgcp_connection_id_mss, sdp));
+ }
/* Alerting */
MNCC.send(ts_MNCC_ALERT_req(cpars.mncc_callref));
- BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_ALERTING(cpars.transaction_id)));
- alt {
- /* FIXME: expect AoIP IP/Port to match what we returned in CRCX_ACK above */
- [] BSSAP.receive(tr_BSSMAP_AssignmentReq) {
+ var BSSMAP_IE_AoIP_TransportLayerAddress tla_ass :=
+ valueof(ts_BSSMAP_IE_AoIP_TLA4(f_inet_addr(cpars.mgw_rtp_ip_bss),cpars.mgw_rtp_port_bss));
+ interleave {
+ [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_ALERTING(cpars.transaction_id))) {}
+ /* expect AoIP IP/Port to match what we returned in CRCX_ACK above */
+ [] BSSAP.receive(tr_BSSMAP_AssignmentReq(omit, tla_ass)) {
var BSSMAP_IE_AoIP_TransportLayerAddress tla;
tla := valueof(ts_BSSMAP_IE_AoIP_TLA4(f_inet_addr(cpars.bss_rtp_ip), cpars.bss_rtp_port));
BSSAP.send(ts_BSSMAP_AssignmentComplete(omit, tla));
}
}
- /* Answer. This causes TCH assignment in case of "late assignment" */
- MNCC.send(ts_MNCC_SETUP_COMPL_req(cpars.mncc_callref));
+ /* Answer. MNCC_SETUP_RSP -> CONNECT to MS; CONNECT_ACK from MS */
+ MNCC.send(ts_MNCC_SETUP_rsp(cpars.mncc_callref));
+ BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_CONNECT(cpars.transaction_id)));
+ BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_CONNECT_ACK(cpars.transaction_id)));
f_sleep(3.0);
diff --git a/msc_tests/MSC_Tests.ttcn b/msc_tests/MSC_Tests.ttcn
index 5afa93a..c5ab892 100644
--- a/msc_tests/MSC_Tests.ttcn
+++ b/msc_tests/MSC_Tests.ttcn
@@ -866,7 +866,8 @@
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_ALERTING(tid)));
/* Answer. This causes TCH assignment in case of "late assignment" */
- MNCC.send(ts_MNCC_SETUP_COMPL_req(mncc.u.signal.callref));
+ //MNCC.send(ts_MNCC_SETUP_COMPL_req(mncc.u.signal.callref));
+ MNCC.send(ts_MNCC_SETUP_rsp(mncc.u.signal.callref));
f_sleep(3.0);