bsc-nat: Introduce Osmux test

Depends: openbsc.git Iadc004064a5a237c93009f242cb943ebc4d2d7e6
Change-Id: I35f206aab713ccf0a4e074872e291c349c903b9d
diff --git a/bsc-nat/BSC_MS_ConnectionHandler.ttcn b/bsc-nat/BSC_MS_ConnectionHandler.ttcn
index 7777f03..f9f4db0 100644
--- a/bsc-nat/BSC_MS_ConnectionHandler.ttcn
+++ b/bsc-nat/BSC_MS_ConnectionHandler.ttcn
@@ -63,6 +63,7 @@
 	decode_dtap := false,
 	role_ms := true,
 	protocol := RAN_PROTOCOL_BSSAP,
+	/* Always false. We don't want to enable Osmux signalling in SCCPLite messages: */
 	use_osmux := false,
 	sccp_addr_local := omit,
 	sccp_addr_peer := omit
@@ -89,11 +90,12 @@
 }
 
 /* main function processing various incoming events */
-function main(SCCP_PAR_Address sccp_addr_own, SCCP_PAR_Address sccp_addr_remote)
+function main(SCCP_PAR_Address sccp_addr_own, SCCP_PAR_Address sccp_addr_remote, boolean use_osmux)
 runs on BSC_MS_ConnHdlr {
 	var PDU_BSSAP bssap;
 	var MgcpCommand mgcp_cmd;
-	var MgcpResponse mgcp_resp;
+	var template MgcpResponse mgcp_resp;
+	var MgcpOsmuxCID osmux_cid;
 
 	log("Starting main of BSC_MS_ConnHdlr");
 
@@ -127,7 +129,19 @@
 						  valueof(ts_SDP_ptime(20)) }));
 			/* respond with CRCX_ACK */
 			g_state := BSC_STATE_WAIT_MDCX;
-			BSSAP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, g_mgcp_conn_id, g_sdp));
+
+			if (use_osmux != f_MgcpCmd_contains_par(mgcp_cmd, "X-OSMUX")) {
+				setverdict(fail, log2str("Received Osmux CID presence doesn't match presence expectancy (", use_osmux, ")"));
+				self.stop;
+			}
+
+			if (use_osmux) {
+				osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);
+				mgcp_resp := ts_CRCX_ACK_osmux(mgcp_cmd.line.trans_id, g_mgcp_conn_id, osmux_cid, g_sdp);
+			} else {
+				mgcp_resp := ts_CRCX_ACK(mgcp_cmd.line.trans_id, g_mgcp_conn_id, g_sdp);
+			}
+			BSSAP.send(valueof(mgcp_resp));
 			}
 
 		/* MDCX -> OK */