bsc: Update and add tests checking Last Used EUTRAN PLMN Id

CSFB indicator shouldn't be used as stated in the specs. Rather, BSC
should act based on "Last Used E-UTRAN PLMN Id" found in messages such
as Common Id, or Handover Request/Required.

Related: SYS#5337
Related: osmo-bsc.git Change-Id I5d290ac55eca5adde1c33396422f4c10b83c03d5
Change-Id: I7b2e5a3ad24c10e279a7f1c447804100168203ba
This commit is contained in:
Pau Espin 2021-04-15 16:42:52 +02:00
parent ee8cec808a
commit 841b90daf2
1 changed files with 62 additions and 7 deletions

View File

@ -1747,7 +1747,6 @@ function f_expect_chan_rel(integer bts_nr, RslChannelNr rsl_chan_nr,
boolean expect_rr_chan_rel := true,
boolean expect_rll_rel_req := true,
boolean handle_rll_rel := true,
boolean is_csfb := false,
template CellSelIndValue expect_cells := omit,
template RR_Cause expect_rr_cause := ?
) runs on test_CT {
@ -1767,7 +1766,7 @@ function f_expect_chan_rel(integer bts_nr, RslChannelNr rsl_chan_nr,
got_deact_sacch := true;
repeat;
}
[is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE_CellSelectInd))) -> value ud {
[not istemplatekind(expect_cells, "omit")] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE_CellSelectInd))) -> value ud {
got_rr_chan_rel := true;
if (f_rsl_find_ie(ud.rsl, RSL_IE_L3_INFO, l3_ie) == false) {
@ -1801,7 +1800,7 @@ function f_expect_chan_rel(integer bts_nr, RslChannelNr rsl_chan_nr,
}
repeat;
}
[not is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE))) -> value ud {
[istemplatekind(expect_cells, "omit")] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE))) -> value ud {
got_rr_chan_rel := true;
if (not istemplatekind(expect_rr_cause, "omit")) {
@ -1877,7 +1876,62 @@ testcase TC_chan_rel_hard_clear() runs on test_CT {
f_shutdown_helper();
}
/* Test behavior of channel release after Clear Command with CSFB indicator from MSC */
function f_TC_chan_rel_last_eutran_plmn_hard_clear(boolean tx_csfb_ind) runs on test_CT {
var BSSAP_N_DATA_ind rx_di;
var DchanTuple dt;
f_init(1);
dt := f_est_dchan('23'O, 23, '00010203040506'O);
/* Send CommonID with some random PLMN (BSC doesn't take it into account
/* yet when generating the EUTRAN neigh list in RR CHannel Release) */
BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_CommonId('001019876543210'H, '323454'O)));
/* Instruct BSC to clear channel */
var BssmapCause cause := 0;
if (tx_csfb_ind) {
BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommandCSFB(cause)));
} else {
BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(cause)));
}
/* expect Clear Complete from BSC on A */
BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete)) {
/* release the SCCP connection */
BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
}
/* 1 neighbor is added by default in osmo-bts.cfg and
SystemInformationConfig_default, use that: */
var template CellSelIndValue exp_cells := f_tr_rr_chan_rel_earfcns(1);
f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, expect_cells := exp_cells);
f_shutdown_helper();
}
/* Test behavior of RR Channel rRelease after Clear Command without CSFB indicator
from MSC, previously receiving any CommonID containing the "Last Used E-UTRAN
PLMN Id". According to spec (3GPP TS 48.008 sec 3.1.30) that's the bit requesting
EUTRAN neighbor list sent later on by BSC in RR Channel, so receiving CSFB
Indicator or not shouldn't matter at all. */
testcase TC_chan_rel_last_eutran_plmn_hard_clear_no_csfb() runs on test_CT {
f_TC_chan_rel_last_eutran_plmn_hard_clear(false);
}
/* Test behavior of RR Channel rRelease after Clear Command with CSFB indicator from
MSC, previously receiving any CommonID containing the "Last Used E-UTRAN PLMN
Id". According to spec (3GPP TS 48.008 sec 3.1.30) that's the bit requesting
EUTRAN neighbor list sent later on by BSC in RR Channel. */
testcase TC_chan_rel_last_eutran_plmn_hard_clear_csfb() runs on test_CT {
f_TC_chan_rel_last_eutran_plmn_hard_clear(true);
}
/* Test behavior of RR Channel Release after Clear Command with CSFB indicator from
MSC, without receiving any CommonID containing the "Last Used E-UTRAN PLMN
Id". According to spec (TS 48.008 version 16.0.0 Release 16 "3.2.1.21") the
CSFB Indicator should not be used anymore, and hence, there should be no
EUTRAN neighbor list sent by BSC in RR Channel release since no CommonId with
Last Used E-UTRAN PLMN Id" IE was sent for this conn. */
testcase TC_chan_rel_hard_clear_csfb() runs on test_CT {
var BSSAP_N_DATA_ind rx_di;
var DchanTuple dt;
@ -1896,7 +1950,7 @@ testcase TC_chan_rel_hard_clear_csfb() runs on test_CT {
BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
}
f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, is_csfb := true);
f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false);
f_shutdown_helper();
}
@ -2322,8 +2376,7 @@ function f_test_si2quater(integer total_earfcns, template SystemInformationConfi
BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
}
f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, is_csfb := true,
expect_cells := expect_cells);
f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, expect_cells := expect_cells);
}
for (var integer i := 1; i < total_earfcns; i := i + 1) {
@ -8453,6 +8506,8 @@ control {
execute( TC_chan_rel_rll_rel_ind() );
execute( TC_chan_rel_conn_fail() );
execute( TC_chan_rel_hard_clear() );
execute( TC_chan_rel_last_eutran_plmn_hard_clear_no_csfb() );
execute( TC_chan_rel_last_eutran_plmn_hard_clear_csfb() );
execute( TC_chan_rel_hard_clear_csfb() );
execute( TC_chan_rel_hard_rlsd() );
execute( TC_chan_rel_hard_rlsd_ms_dead() );