msc: add and fix Iu mt call
Change-Id: I3ce29f3d9254656dc295674e8cec72a741b7764a
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 7bbae34..11f0a5f 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -905,21 +905,89 @@
}
} else {
- var template TransportLayerAddress rab_tla := ? /* FIXME: encode the mgw_rtp_ip/mgw_rtp_port */
- var template RAB_SetupOrModifyList rab_sml := tr_RAB_SML(rab_id := ?, tla := rab_tla, binding_id := ?);
-
interleave {
[] MGCP.receive(tr_CRCX(cpars.mgcp_ep)) -> value mgcp_cmd {
- var SDP_Message sdp := valueof(ts_SDP_CRCX_CN(cpars));
- MGCP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, cpars.mgw_conn_2.mgcp_connection_id, sdp));
- /* MSC acknowledges the MNCC_CREATE to the MNCC handler */
- MNCC.receive(tr_MNCC_RTP_CREATE(cpars.mncc_callref));
+ log("f_mt_call_complete 4.iu");
+ if (not f_handle_crcx(cpars, mgcp_cmd)) {
+ break;
}
- [] BSSAP.receive(tr_RANAP_RabAssReq(rab_sml)) {
- //BSSAP.send(ts_RANAP_RabAssResp(rab_sml)); FIXME
}
- /* FIXME: same MNCC and MGCP as in 2G above */
+ /* MSC acknowledges the MNCC_CREATE to the MNCC handler */
+ [] MNCC.receive(tr_MNCC_RTP_CREATE(cpars.mncc_callref)) {
+ log("f_mt_call_complete 5.iu");
+ }
+
+ [] BSSAP.receive(tr_RANAP_RabAssReq(?)) {
+ log("f_mt_call_complete 6.iu");
+ var RAB_SetupOrModifiedList l := {
+ {
+ {
+ id := id_RAB_SetupOrModifiedItem,
+ criticality := ignore,
+ value_ := {
+ rAB_SetupOrModifiedItem := {
+ rAB_ID := int2bit(23, 8),
+ transportLayerAddress := hex2bit( '350001c0a8021500000000000000000000000000'H),
+ iuTransportAssociation := {
+ bindingID := '040c0000'O
+ },
+ dl_dataVolumes := omit,
+ iE_Extensions := omit
+ }
+ }
+ }
+ }
+ };
+ BSSAP.send(ts_RANAP_RabAssResp(l));
+
+ BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_CONNECT(cpars.transaction_id)));
+ }
+
+ [] MNCC.receive(tr_MNCC_SETUP_cnf(cpars.mncc_callref)) {
+ log("f_mt_call_complete 7.iu");
+ MNCC.send(ts_MNCC_RTP_CONNECT(cpars.mncc_callref,
+ /* ip 42.23.11.5 */ hex2int('42231105'H),
+ /* port 423 */ 423,
+ /* payload type 3 = GSM FR */ 3));
+ }
+
+ /* MDCX setting up the RAN side remote RTP address received from Assignment Complete */
+ [] MGCP.receive(tr_MDCX) -> value mgcp_cmd {
+ log("f_mt_call_complete 8.iu");
+ var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_ip,
+ hex2str(cpars.mgcp_call_id), "42",
+ cpars.mgw_conn_2.mgw_rtp_port,
+ { int2str(cpars.rtp_payload_type) },
+ { valueof(ts_SDP_rtpmap(cpars.rtp_payload_type,
+ cpars.rtp_sdp_format)),
+ valueof(ts_SDP_ptime(20)) }));
+ if (cpars.use_osmux) {
+ osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);
+ if (osmux_cid != 0) { /* we expect MSC to use specific CID here */
+ setverdict(fail, "MSC using unexpected CID " & int2str(osmux_cid) & " != 0");
+ mtc.stop;
+ }
+ mgcp_resp := ts_MDCX_ACK_osmux(mgcp_cmd.line.trans_id, cpars.mgw_conn_1.mgcp_connection_id, osmux_cid, sdp);
+ } else {
+ mgcp_resp := ts_MDCX_ACK(mgcp_cmd.line.trans_id, cpars.mgw_conn_2.mgcp_connection_id, sdp);
+ }
+ MGCP.send(mgcp_resp);
+ }
+
+ /* MDCX setting up the CN side remote RTP address received from MNCC CONNECT */
+ [] MGCP.receive(tr_MDCX) -> value mgcp_cmd {
+ log("f_mt_call_complete 9.iu");
+ var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_ip,
+ hex2str(cpars.mgcp_call_id), "42",
+ cpars.mgw_conn_2.mgw_rtp_port,
+ { 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_MDCX_ACK(mgcp_cmd.line.trans_id, cpars.mgw_conn_2.mgcp_connection_id, sdp));
+ }
+
}
}