bsc: Validate new 'srvcc fast-return' VTY command
Related: SYS#5337
Change-Id: I227abc3793255e3916eba0dbc1460f46ec9926fe
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 074fa60..d15b2ec 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -5226,11 +5226,15 @@
}
private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
- var template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE;
+ var template PDU_ML3_NW_MS exp_rr_rel_tmpl;
var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit;
if (not istemplatekind(g_pars.last_used_eutran_plmn, "omit")) {
oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));
+ }
+ if (g_pars.exp_fast_return) {
exp_rr_rel_tmpl := tr_RRM_RR_RELEASE_CellSelectInd;
+ } else {
+ exp_rr_rel_tmpl := tr_RRM_RR_RELEASE;
}
f_ho_into_this_bsc(id, oldToNewBSSIEs);
f_perform_clear(RSL, exp_rr_rel_tmpl);
@@ -5278,10 +5282,26 @@
testcase TC_srvcc_eutran_to_geran() runs on test_CT {
var TestHdlrParams pars := f_gen_test_hdlr_pars();
pars.last_used_eutran_plmn := '323454'O;
+ pars.exp_fast_return := true;
f_tc_ho_into_this_bsc_main(pars);
f_shutdown_helper();
}
+/* Same as TC_srvcc_eutran_to_geran, but test explicitly forbiding fast return
+ on the BTS. As a result, RR Release shouldn't contain the EUTRAN neighbor
+ list when the channel is released. */
+testcase TC_srvcc_eutran_to_geran_forbid_fast_return() runs on test_CT {
+ f_init_vty();
+ f_vty_allow_srvcc_fast_return(true, 0)
+
+ var TestHdlrParams pars := f_gen_test_hdlr_pars();
+ pars.last_used_eutran_plmn := '323454'O;
+ pars.exp_fast_return := false;
+ f_tc_ho_into_this_bsc_main(pars);
+ f_vty_allow_srvcc_fast_return(false, 0);
+ f_shutdown_helper();
+}
+
private function f_tc_srvcc_eutran_to_geran_ho_out(charstring id) runs on MSC_ConnHdlr {
var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs;
oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));
@@ -5289,15 +5309,16 @@
f_ho_out_of_this_bsc(oldToNewBSSIEs);
setverdict(pass);
}
-/* First, HO into BSC from EUTRAN (SRVCC): HO Request contains "Old BSS to New
- BSS Information" IE with "Last Used E-UTRAN PLMN Id".
- Second, HO to another BSC: HO Required contains "Old BSS to New BSS Information"
- IE with "Last Used E-UTRAN PLMN Id" from first step. */
-testcase TC_srvcc_eutran_to_geran_ho_out() runs on test_CT {
+
+private function f_tc_srvcc_eutran_to_geran_ho_out_main(boolean disable_fast_return)
+ runs on test_CT {
var MSC_ConnHdlr vc_conn;
var TestHdlrParams pars := f_gen_test_hdlr_pars();
f_init(1, true);
+ if (disable_fast_return) {
+ f_vty_allow_srvcc_fast_return(true, 0);
+ }
f_sleep(1.0);
f_ctrs_bsc_and_bts_init();
@@ -5316,9 +5337,26 @@
f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted", 1);
f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed", 1);
f_ctrs_bsc_and_bts_verify();
+
+ if (disable_fast_return) {
+ f_vty_allow_srvcc_fast_return(false, 0);
+ }
f_shutdown_helper();
}
+/* First, HO into BSC from EUTRAN (SRVCC): HO Request contains "Old BSS to New
+ BSS Information" IE with "Last Used E-UTRAN PLMN Id".
+ Second, HO to another BSC: HO Required contains "Old BSS to New BSS Information"
+ IE with "Last Used E-UTRAN PLMN Id" from first step. */
+testcase TC_srvcc_eutran_to_geran_ho_out() runs on test_CT {
+ f_tc_srvcc_eutran_to_geran_ho_out_main(false);
+}
+/* Validate subsequent intra-GSM-HO works the same (with OldBSSToNewBSSInfo IE)
+ * independently of fast-reture allowed/forbidden in local BTS */
+testcase TC_srvcc_eutran_to_geran_ho_out_forbid_fast_return() runs on test_CT {
+ f_tc_srvcc_eutran_to_geran_ho_out_main(true);
+}
+
private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr {
var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));
f_rslem_register(0, new_chan_nr);
@@ -7306,6 +7344,19 @@
f_vty_transceive(BSCVTY, "exit");
}
+/* Allow/Forbid Fast Return after SRVCC on a given BTS via VTY */
+private function f_vty_allow_srvcc_fast_return(boolean allow, integer bts_nr) runs on test_CT {
+ f_vty_enter_cfg_bts(BSCVTY, bts_nr);
+ if (allow) {
+ f_vty_transceive(BSCVTY, "srvcc fast-return allow");
+ } else {
+ f_vty_transceive(BSCVTY, "srvcc fast-return forbid");
+ }
+ f_vty_transceive(BSCVTY, "exit");
+ f_vty_transceive(BSCVTY, "exit");
+ f_vty_transceive(BSCVTY, "exit");
+}
+
/* Begin assignmet procedure and send an EMERGENCY SETUP (RR) */
private function f_assignment_emerg_setup() runs on MSC_ConnHdlr {
var PDU_ML3_MS_NW emerg_setup;
@@ -8950,6 +9001,8 @@
}
execute( TC_srvcc_eutran_to_geran() );
execute( TC_srvcc_eutran_to_geran_ho_out() );
+ execute( TC_srvcc_eutran_to_geran_forbid_fast_return() );
+ execute( TC_srvcc_eutran_to_geran_ho_out_forbid_fast_return() );
execute( TC_ho_in_fail_msc_clears() );
execute( TC_ho_in_fail_msc_clears_after_ho_detect() );
execute( TC_ho_in_fail_no_detect() );
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn
index c29ccd4..a4f1f51 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -590,6 +590,7 @@
TestHdlrParamsMSCPool mscpool,
boolean media_mgw_offer_ipv6,
OCT3 last_used_eutran_plmn optional,
+ boolean exp_fast_return, /* RR Release expected to contain CellSelectInd ? */
boolean expect_channel_mode_modify,
uint3_t expect_tsc optional
};
@@ -628,6 +629,7 @@
},
media_mgw_offer_ipv6 := true,
last_used_eutran_plmn := omit,
+ exp_fast_return := false,
expect_channel_mode_modify := false,
expect_tsc := omit
}