bsc: Introduce TC_srvcc_eutran_to_geran
Related: SYS#5337
Change-Id: If26cc9241b1b0eb4112f1227427008ece242bb41
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index f062274..1f8f951 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1501,15 +1501,16 @@
return ass_cmd;
}
-function f_gen_handover_req(integer bssap_idx := 0, charstring aoip_tla := "1.2.3.4") return PDU_BSSAP {
+function f_gen_handover_req(integer bssap_idx := 0, charstring aoip_tla := "1.2.3.4",
+ template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit) return PDU_BSSAP {
var PDU_BSSAP ho_req;
if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {
var BSSMAP_IE_AoIP_TransportLayerAddress tla :=
valueof(f_ts_BSSMAP_IE_AoIP_TLA(aoip_tla, 2342));
- ho_req := valueof(ts_BSSMAP_HandoverRequest(omit, tla));
+ ho_req := valueof(ts_BSSMAP_HandoverRequest(omit, tla, oldToNewBSSIEs := oldToNewBSSIEs));
} else {
var BSSMAP_IE_CircuitIdentityCode cic := valueof(ts_BSSMAP_IE_CIC(0,1));
- ho_req := valueof(ts_BSSMAP_HandoverRequest(cic, omit));
+ ho_req := valueof(ts_BSSMAP_HandoverRequest(cic, omit, oldToNewBSSIEs := oldToNewBSSIEs));
}
return ho_req;
}
@@ -5107,6 +5108,8 @@
* on the lchan even before we get a chance to evaluate the BSSMAP Handover Request ACK. So we
* need to assume that osmo-bsc will activate TS 1 and already set up this lchan's RSL emulation
* before we get started. */
+ var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit;
+ var template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE;
var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));
f_rslem_register(0, new_chan_nr);
g_chan_nr := new_chan_nr;
@@ -5116,8 +5119,14 @@
f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", FR_AMR);
activate(as_Media());
+ if (not istemplatekind(g_pars.last_used_eutran_plmn, "omit")) {
+ oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));
+ exp_rr_rel_tmpl := tr_RRM_RR_RELEASE_CellSelectInd;
+ }
+
BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_bsc, g_pars.sccp_addr_msc,
- f_gen_handover_req(aoip_tla := g_pars.host_aoip_tla)));
+ f_gen_handover_req(aoip_tla := g_pars.host_aoip_tla,
+ oldToNewBSSIEs := oldToNewBSSIEs)));
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */
@@ -5162,6 +5171,8 @@
enc_PDU_ML3_MS_NW(l3_tx)));
BSSAP.receive(tr_BSSMAP_HandoverComplete);
+
+ f_perform_clear(RSL, exp_rr_rel_tmpl);
setverdict(pass);
}
function f_tc_ho_into_this_bsc_main(TestHdlrParams pars) runs on test_CT {
@@ -5183,7 +5194,6 @@
f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");
f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:completed");
f_ctrs_bsc_and_bts_verify();
- f_shutdown_helper();
}
testcase TC_ho_into_this_bsc() runs on test_CT {
@@ -5199,6 +5209,18 @@
f_shutdown_helper();
}
+/* Similar to TC_ho_into_this_bsc, but when in SRVCC, HO Req contains "Old BSS
+ to New BSS Information" IE with "Last Used E-UTRAN PLMN Id", whihch, when the
+ channel is later released (RR CHannel Release), should trigger inclusion of
+ IE "Cell Selection Indicator after Release of all TCH and SDCCH" with E-UTRAN
+ neighbors. */
+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;
+ f_tc_ho_into_this_bsc_main(pars);
+ f_shutdown_helper();
+}
+
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);
@@ -6472,9 +6494,10 @@
template MobileIdentityLV ts_MI_TMSI_NRI_LV(integer nri_v, integer nri_bitlen := 10) :=
ts_MI_TMSI_LV(tmsi := f_gen_tmsi(suffix := 0, nri_v := nri_v, nri_bitlen := nri_bitlen));
-private function f_expect_lchan_rel(RSL_DCHAN_PT rsl) runs on MSC_ConnHdlr {
+private function f_expect_lchan_rel(RSL_DCHAN_PT rsl, template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE)
+runs on MSC_ConnHdlr {
interleave {
- [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_RR_RELEASE)) {
+ [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch exp_rr_rel_tmpl)) {
f_logp(BSCVTY, "Got RSL RR Release");
}
[] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {
@@ -6488,11 +6511,12 @@
}
}
-private function f_perform_clear(RSL_DCHAN_PT rsl) runs on MSC_ConnHdlr {
+private function f_perform_clear(RSL_DCHAN_PT rsl, template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE)
+runs on MSC_ConnHdlr {
f_logp(BSCVTY, "MSC instructs BSC to clear channel");
BSSAP.send(ts_BSSMAP_ClearCommand(0));
interleave {
- [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_RR_RELEASE)) {
+ [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch exp_rr_rel_tmpl)) {
f_logp(BSCVTY, "Got RSL RR Release");
}
[] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {
@@ -8645,6 +8669,7 @@
if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {
execute( TC_ho_into_this_bsc_tla_v6() );
}
+ execute( TC_srvcc_eutran_to_geran() );
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 5460e2c..245528f 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -587,7 +587,8 @@
boolean use_osmux,
charstring host_aoip_tla,
TestHdlrParamsMSCPool mscpool,
- boolean media_mgw_offer_ipv6
+ boolean media_mgw_offer_ipv6,
+ OCT3 last_used_eutran_plmn optional
};
/* Note: Do not use valueof() to get a value of this template, use
@@ -622,7 +623,8 @@
rsl_idx := 0,
l3_info := omit
},
- media_mgw_offer_ipv6 := true
+ media_mgw_offer_ipv6 := true,
+ last_used_eutran_plmn := omit
}
function f_create_chan_and_exp() runs on MSC_ConnHdlr {