bsc: Introduce TC_srvcc_eutran_to_geran
Related: SYS#5337 Change-Id: If26cc9241b1b0eb4112f1227427008ece242bb41
This commit is contained in:
parent
841b90daf2
commit
c08d552544
|
@ -1501,15 +1501,16 @@ function f_gen_ass_req(boolean osmux_enabled := false, integer bssap_idx := 0, c
|
||||||
return ass_cmd;
|
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;
|
var PDU_BSSAP ho_req;
|
||||||
if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {
|
if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {
|
||||||
var BSSMAP_IE_AoIP_TransportLayerAddress tla :=
|
var BSSMAP_IE_AoIP_TransportLayerAddress tla :=
|
||||||
valueof(f_ts_BSSMAP_IE_AoIP_TLA(aoip_tla, 2342));
|
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 {
|
} else {
|
||||||
var BSSMAP_IE_CircuitIdentityCode cic := valueof(ts_BSSMAP_IE_CIC(0,1));
|
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;
|
return ho_req;
|
||||||
}
|
}
|
||||||
|
@ -5107,6 +5108,8 @@ private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
|
||||||
* on the lchan even before we get a chance to evaluate the BSSMAP Handover Request ACK. So we
|
* 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
|
* need to assume that osmo-bsc will activate TS 1 and already set up this lchan's RSL emulation
|
||||||
* before we get started. */
|
* 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));
|
var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));
|
||||||
f_rslem_register(0, new_chan_nr);
|
f_rslem_register(0, new_chan_nr);
|
||||||
g_chan_nr := new_chan_nr;
|
g_chan_nr := new_chan_nr;
|
||||||
|
@ -5116,8 +5119,14 @@ private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
|
||||||
f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", FR_AMR);
|
f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", FR_AMR);
|
||||||
activate(as_Media());
|
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,
|
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);
|
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
|
||||||
|
|
||||||
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */
|
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */
|
||||||
|
@ -5162,6 +5171,8 @@ private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
|
||||||
enc_PDU_ML3_MS_NW(l3_tx)));
|
enc_PDU_ML3_MS_NW(l3_tx)));
|
||||||
|
|
||||||
BSSAP.receive(tr_BSSMAP_HandoverComplete);
|
BSSAP.receive(tr_BSSMAP_HandoverComplete);
|
||||||
|
|
||||||
|
f_perform_clear(RSL, exp_rr_rel_tmpl);
|
||||||
setverdict(pass);
|
setverdict(pass);
|
||||||
}
|
}
|
||||||
function f_tc_ho_into_this_bsc_main(TestHdlrParams pars) runs on test_CT {
|
function f_tc_ho_into_this_bsc_main(TestHdlrParams pars) runs on test_CT {
|
||||||
|
@ -5183,7 +5194,6 @@ function f_tc_ho_into_this_bsc_main(TestHdlrParams pars) runs on test_CT {
|
||||||
f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");
|
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_add(0, "interbsc_ho_in:completed");
|
||||||
f_ctrs_bsc_and_bts_verify();
|
f_ctrs_bsc_and_bts_verify();
|
||||||
f_shutdown_helper();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
testcase TC_ho_into_this_bsc() runs on test_CT {
|
testcase TC_ho_into_this_bsc() runs on test_CT {
|
||||||
|
@ -5199,6 +5209,18 @@ testcase TC_ho_into_this_bsc_tla_v6() runs on test_CT {
|
||||||
f_shutdown_helper();
|
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 {
|
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));
|
var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));
|
||||||
f_rslem_register(0, new_chan_nr);
|
f_rslem_register(0, new_chan_nr);
|
||||||
|
@ -6472,9 +6494,10 @@ testcase TC_assignment_verify_ms_power_params_ie() runs on test_CT {
|
||||||
template MobileIdentityLV ts_MI_TMSI_NRI_LV(integer nri_v, integer nri_bitlen := 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));
|
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 {
|
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");
|
f_logp(BSCVTY, "Got RSL RR Release");
|
||||||
}
|
}
|
||||||
[] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {
|
[] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {
|
||||||
|
@ -6488,11 +6511,12 @@ private function f_expect_lchan_rel(RSL_DCHAN_PT rsl) runs on MSC_ConnHdlr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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");
|
f_logp(BSCVTY, "MSC instructs BSC to clear channel");
|
||||||
BSSAP.send(ts_BSSMAP_ClearCommand(0));
|
BSSAP.send(ts_BSSMAP_ClearCommand(0));
|
||||||
interleave {
|
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");
|
f_logp(BSCVTY, "Got RSL RR Release");
|
||||||
}
|
}
|
||||||
[] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {
|
[] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {
|
||||||
|
@ -8645,6 +8669,7 @@ control {
|
||||||
if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {
|
if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {
|
||||||
execute( TC_ho_into_this_bsc_tla_v6() );
|
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() );
|
||||||
execute( TC_ho_in_fail_msc_clears_after_ho_detect() );
|
execute( TC_ho_in_fail_msc_clears_after_ho_detect() );
|
||||||
execute( TC_ho_in_fail_no_detect() );
|
execute( TC_ho_in_fail_no_detect() );
|
||||||
|
|
|
@ -587,7 +587,8 @@ type record TestHdlrParams {
|
||||||
boolean use_osmux,
|
boolean use_osmux,
|
||||||
charstring host_aoip_tla,
|
charstring host_aoip_tla,
|
||||||
TestHdlrParamsMSCPool mscpool,
|
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
|
/* Note: Do not use valueof() to get a value of this template, use
|
||||||
|
@ -622,7 +623,8 @@ template (value) TestHdlrParams t_def_TestHdlrPars := {
|
||||||
rsl_idx := 0,
|
rsl_idx := 0,
|
||||||
l3_info := omit
|
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 {
|
function f_create_chan_and_exp() runs on MSC_ConnHdlr {
|
||||||
|
|
|
@ -23,7 +23,16 @@ type integer BssmapCause;
|
||||||
type integer SpeechVersion;
|
type integer SpeechVersion;
|
||||||
type integer Channel;
|
type integer Channel;
|
||||||
type integer ChannelMode;
|
type integer ChannelMode;
|
||||||
type octetstring oldToNewBSSIEs;
|
//type octetstring BSSMAP_oldToNewBSSIEs;
|
||||||
|
|
||||||
|
// Old BSS to New BSS Information - 48.008 subclause 3.2.2.58
|
||||||
|
type record BSSMAP_oldToNewBSSIEs
|
||||||
|
{
|
||||||
|
BSSAMAP_IE_LastUsedEUTRANPLMNId LastUsedEUTRANPLMNId optional
|
||||||
|
/* TODO: add other FIELDS here from specs */
|
||||||
|
}
|
||||||
|
external function enc_BSSMAP_oldToNewBSSIEs(in BSSMAP_oldToNewBSSIEs val) return octetstring
|
||||||
|
with { extension "prototype(convert) encode(RAW)" };
|
||||||
|
|
||||||
/* 48.008 3.2.2.5 - this actually belongs to BSSAP_Types.ttcn */
|
/* 48.008 3.2.2.5 - this actually belongs to BSSAP_Types.ttcn */
|
||||||
type enumerated myBSSMAP_Cause {
|
type enumerated myBSSMAP_Cause {
|
||||||
|
@ -198,10 +207,29 @@ template (value) BSSMAP_IE_CurrentChannelType1 ts_BSSMAP_IE_CurrentChannelType1(
|
||||||
channelMode := int2bit(cm, 4)
|
channelMode := int2bit(cm, 4)
|
||||||
}
|
}
|
||||||
|
|
||||||
template (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs val) := {
|
template (value) BSSMAP_oldToNewBSSIEs ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn) := {
|
||||||
|
LastUsedEUTRANPLMNId := last_used_eutran_plmn
|
||||||
|
}
|
||||||
|
function f_ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn)
|
||||||
|
return template (omit) BSSMAP_oldToNewBSSIEs {
|
||||||
|
if (istemplatekind(last_used_eutran_plmn, "omit")) {
|
||||||
|
return omit;
|
||||||
|
} else {
|
||||||
|
return ts_BSSMAP_oldToNewBSSIEs(last_used_eutran_plmn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
template (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(template (value) BSSMAP_oldToNewBSSIEs val) := {
|
||||||
elementIdentifier := '3A'O,
|
elementIdentifier := '3A'O,
|
||||||
lengthIndicator := 0, /* overwritten by codec */
|
lengthIndicator := 0, /* overwritten by codec */
|
||||||
oldToNewBSSIEs := val
|
oldToNewBSSIEs := enc_BSSMAP_oldToNewBSSIEs(valueof(val))
|
||||||
|
}
|
||||||
|
function f_ts_BSSMAP_IE_OldToNewBSSInfo(template (omit) BSSMAP_oldToNewBSSIEs val)
|
||||||
|
return template (omit) BSSMAP_IE_OldToNewBSSInfo {
|
||||||
|
if (istemplatekind(val, "omit")) {
|
||||||
|
return omit;
|
||||||
|
} else {
|
||||||
|
return ts_BSSMAP_IE_OldToNewBSSInfo(val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template (value) BSSMAP_IE_Osmo_OsmuxSupport tr_BSSMAP_IE_Osmo_OsmuxSupport := {
|
template (value) BSSMAP_IE_Osmo_OsmuxSupport tr_BSSMAP_IE_Osmo_OsmuxSupport := {
|
||||||
|
@ -907,7 +935,8 @@ template PDU_BSSAP ts_BSSMAP_HandoverRequest(
|
||||||
template BSSMAP_IE_CircuitIdentityCode cic := omit,
|
template BSSMAP_IE_CircuitIdentityCode cic := omit,
|
||||||
template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit,
|
template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit,
|
||||||
template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0),
|
template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0),
|
||||||
template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1)
|
template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1),
|
||||||
|
template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit
|
||||||
)
|
)
|
||||||
modifies ts_BSSAP_BSSMAP := {
|
modifies ts_BSSAP_BSSMAP := {
|
||||||
pdu := {
|
pdu := {
|
||||||
|
@ -941,7 +970,7 @@ modifies ts_BSSAP_BSSMAP := {
|
||||||
talkerFlag := omit,
|
talkerFlag := omit,
|
||||||
configurationEvolutionIndication := omit,
|
configurationEvolutionIndication := omit,
|
||||||
chosenEncryptionAlgorithm := omit,
|
chosenEncryptionAlgorithm := omit,
|
||||||
oldToNewBSSInfo := omit,
|
oldToNewBSSInfo := f_ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs),
|
||||||
lSAInformation := omit,
|
lSAInformation := omit,
|
||||||
lSAAccessControlSuppression := omit,
|
lSAAccessControlSuppression := omit,
|
||||||
serviceHandover := omit,
|
serviceHandover := omit,
|
||||||
|
|
Loading…
Reference in New Issue