msc: new test: TC_lu_and_mt_csd
Related: OS#4394
Change-Id: Ie1701546e3dc18a5b0da4608b44a580237c979a6
diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn
index 1de34a0..74b9ca9 100644
--- a/library/MNCC_Types.ttcn
+++ b/library/MNCC_Types.ttcn
@@ -192,6 +192,27 @@
data := omit
};
+template MNCC_bearer_cap ts_MNCC_bcap_data := {
+ transfer := 1, /* unrestricted digital information */
+ mode := 0, /* circuit */
+ coding := 0, /* GSM standard */
+ radio := 3, /* FR/HR, FR preferred */
+ speech_ctm := 0, /* not supported */
+ speech_ver := { -1 },
+ data := {
+ rate_adaptation := GSM48_BCAP_RA_V110_X30,
+ sig_access := GSM48_BCAP_SA_NONE,
+ async := 1,
+ nr_stop_bits := 1,
+ nr_data_bits := 1,
+ user_rate := GSM48_BCAP_UR_4800,
+ parity := GSM48_BCAP_PAR_ODD,
+ interm_rate := GSM48_BCAP_IR_8k,
+ transp := GSM48_BCAP_TR_TRANSP,
+ modem_type := GSM48_BCAP_MT_V21
+ }
+};
+
type record MNCC_number {
GSM48_type_of_number number_type,
GSM48_num_plan_ind plan,
@@ -514,12 +535,13 @@
/* MT: MSC <- MNCC: SETUP.req from ext. MNCC handler to MSC */
-template MNCC_PDU ts_MNCC_SETUP_req(uint32_t call_id, charstring called, charstring calling, charstring imsi := "") := {
+template MNCC_PDU ts_MNCC_SETUP_req(uint32_t call_id, charstring called, charstring calling, charstring imsi := "",
+ template MNCC_bearer_cap bcap := ts_MNCC_bcap_voice) := {
msg_type := MNCC_SETUP_REQ,
u := {
signal := { /* See 24.008 9.3.23.1 */
callref := call_id,
- bearer_cap := ts_MNCC_bcap_voice, /* mandatory */
+ bearer_cap := valueof(bcap), /* mandatory */
called := valueof(ts_MNCC_number(called)), /* optional */
calling := valueof(ts_MNCC_number(calling)), /* optional */
redirecting := omit, /* optional */
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 3d7dc07..039a97d 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -1057,10 +1057,17 @@
/* 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)));
+ hex2str(cpars.called_party), hex2str(g_pars.imsi), bcap));
}
private template (value) SDP_Message ts_SDP_CRCX_CN(CallParameters cpars) :=
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 9650b3e..22b308e 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -7202,6 +7202,21 @@
vc_conn.done;
}
+friend function f_tc_lu_and_mt_csd(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
+ f_init_handler(pars);
+ var CallParameters cpars := valueof(t_CallParams);
+ cpars.csd := true;
+ f_perform_lu();
+ f_mt_call(cpars);
+}
+testcase TC_lu_and_mt_csd() runs on MTC_CT {
+ var BSC_ConnHdlr vc_conn;
+ f_init();
+
+ vc_conn := f_start_handler(refers(f_tc_lu_and_mt_csd), 7);
+ vc_conn.done;
+}
+
control {
execute( TC_cr_before_reset() );
execute( TC_lu_imsi_noauth_tmsi() );
@@ -7381,6 +7396,7 @@
execute( TC_auth_options_11() );
execute( TC_lu_and_mo_csd() );
+ execute( TC_lu_and_mt_csd() );
}