msc: TC_lu_and_mt_csd: test multiple bearer services

Related: OS#4394
Depends: osmo-msc I7297cc481fbe36355b5231ca800cf566a1ee93c0
Change-Id: Idf6502c826a441b8dd18257c85f9a3323883825e
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 76702d4..1359dc7 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -1059,17 +1059,12 @@
 /* Allocate a call reference and send SETUP via MNCC to MSC */
 function f_mt_call_initiate(inout CallParameters cpars)
 runs on BSC_ConnHdlr {
-	var template MNCC_bearer_cap bcap := ts_MNCC_bcap_voice;
-
-	if (cpars.csd) {
-		bcap := ts_MNCC_bcap_data;
-	}
-
 	cpars.mo_call := false;
 	cpars.mncc_callref := f_rnd_int(2147483648);
 
 	MNCC.send(ts_MNCC_SETUP_req(cpars.mncc_callref, hex2str(g_pars.msisdn),
-					hex2str(cpars.called_party), hex2str(g_pars.imsi), bcap));
+					hex2str(cpars.called_party), hex2str(g_pars.imsi),
+					cpars.mncc_bearer_cap));
 }
 
 private template (value) SDP_Message ts_SDP_CRCX_CN(CallParameters cpars) :=
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 22b308e..1340252 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -7202,13 +7202,44 @@
 	vc_conn.done;
 }
 
-friend function f_tc_lu_and_mt_csd(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	f_init_handler(pars);
+friend function f_mt_csd(charstring bs_name, BIT1 async, GSM48_bcap_transp transp, GSM48_bcap_user_rate user_rate)
+		runs on BSC_ConnHdlr {
+	log("-----------------------------------------------");
+	log("MT CSD: " & bs_name);
+	log("-----------------------------------------------");
+	g_Tguard.start(20.0);
+
 	var CallParameters cpars := valueof(t_CallParams);
+
 	cpars.csd := true;
+	cpars.mncc_bearer_cap := valueof(ts_MNCC_bcap_data);
+	cpars.mncc_bearer_cap.data.async := bit2int(async);
+	cpars.mncc_bearer_cap.data.transp := transp;
+	cpars.mncc_bearer_cap.data.user_rate := user_rate;
+
 	f_perform_lu();
 	f_mt_call(cpars);
 }
+friend function f_tc_lu_and_mt_csd(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
+	f_init_handler(pars);
+
+	f_mt_csd("BS21T", '1'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_300);
+	f_mt_csd("BS22T", '1'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_1200);
+	f_mt_csd("BS24T", '1'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_2400);
+	f_mt_csd("BS25T", '1'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_4800);
+	f_mt_csd("BS26T", '1'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_9600);
+
+	f_mt_csd("BS21NT", '1'B, GSM48_BCAP_TR_RLP, GSM48_BCAP_UR_300);
+	f_mt_csd("BS22NT", '1'B, GSM48_BCAP_TR_RLP, GSM48_BCAP_UR_1200);
+	f_mt_csd("BS24NT", '1'B, GSM48_BCAP_TR_RLP, GSM48_BCAP_UR_2400);
+	f_mt_csd("BS25NT", '1'B, GSM48_BCAP_TR_RLP, GSM48_BCAP_UR_4800);
+	f_mt_csd("BS26NT", '1'B, GSM48_BCAP_TR_RLP, GSM48_BCAP_UR_9600);
+
+	f_mt_csd("BS31T", '0'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_1200);
+	f_mt_csd("BS32T", '0'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_2400);
+	f_mt_csd("BS33T", '0'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_4800);
+	f_mt_csd("BS34T", '0'B, GSM48_BCAP_TR_TRANSP, GSM48_BCAP_UR_9600);
+}
 testcase TC_lu_and_mt_csd() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
 	f_init();