BSC: add TC_ho_meas_rep_multi_band
Related: OS#5717 Related: osmo-bsc Ic5e4f0531e08685460948b102367825588d839ba Change-Id: I4fe6bb9e4b5a69ea6204585ebdf1f157a68a8286
This commit is contained in:
parent
39f530751f
commit
c9a5f53ede
|
@ -5871,16 +5871,19 @@ private function f_expect_dlcx_conns() runs on MSC_ConnHdlr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function f_ho_out_of_this_bsc(template (omit) BSSMAP_oldToNewBSSIEs exp_oldToNewBSSIEs := omit) runs on MSC_ConnHdlr {
|
private function f_ho_out_of_this_bsc(template (omit) BSSMAP_oldToNewBSSIEs exp_oldToNewBSSIEs := omit,
|
||||||
|
boolean skip_meas_rep := false) runs on MSC_ConnHdlr {
|
||||||
|
|
||||||
var NcellReports neighbor_rep := {
|
if (not skip_meas_rep) {
|
||||||
{ rxlev := 20, bcch_freq := 0, bsic := 11 }
|
var NcellReports neighbor_rep := {
|
||||||
};
|
{ rxlev := 20, bcch_freq := 0, bsic := 11 }
|
||||||
var octetstring l3_mr := enc_GsmRrL3Message(valueof(ts_MEAS_REP(true, 8, 8, reps := neighbor_rep)));
|
};
|
||||||
RSL.send(ts_RSL_MEAS_RES(g_chan_nr, 0, ts_RSL_IE_UplinkMeas, ts_RSL_IE_BS_Power(0), ts_RSL_IE_L1Info,
|
var octetstring l3_mr := enc_GsmRrL3Message(valueof(ts_MEAS_REP(true, 8, 8, reps := neighbor_rep)));
|
||||||
l3_mr, 0));
|
RSL.send(ts_RSL_MEAS_RES(g_chan_nr, 0, ts_RSL_IE_UplinkMeas, ts_RSL_IE_BS_Power(0), ts_RSL_IE_L1Info,
|
||||||
|
l3_mr, 0));
|
||||||
|
|
||||||
BSSAP.receive(tr_BSSMAP_HandoverRequired(exp_oldToNewBSSIEs));
|
BSSAP.receive(tr_BSSMAP_HandoverRequired(exp_oldToNewBSSIEs));
|
||||||
|
}
|
||||||
|
|
||||||
f_sleep(0.5);
|
f_sleep(0.5);
|
||||||
/* The MSC negotiates Handover Request and Handover Request Ack with
|
/* The MSC negotiates Handover Request and Handover Request Ack with
|
||||||
|
@ -11971,6 +11974,84 @@ testcase TC_mgwpool_pin_bts() runs on test_CT {
|
||||||
f_shutdown_helper();
|
f_shutdown_helper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function f_tc_ho_meas_rep_multi_band(charstring id) runs on MSC_ConnHdlr {
|
||||||
|
g_pars := f_gen_test_hdlr_pars();
|
||||||
|
var PDU_BSSAP ass_req := f_gen_ass_req();
|
||||||
|
ass_req.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
|
||||||
|
ass_req.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
|
||||||
|
var template PDU_BSSAP exp_compl := f_gen_exp_compl();
|
||||||
|
f_establish_fully(ass_req, exp_compl);
|
||||||
|
|
||||||
|
/* Send a measurement report with bad rxlev except on 3rd entry. The
|
||||||
|
* measurement report is divided into two sub lists, as described in
|
||||||
|
* 3GPP TS 04.08 § 10.5.2.20. */
|
||||||
|
var NcellReports neighbor_rep := {
|
||||||
|
/* Sub list 1: same band */
|
||||||
|
{ rxlev := 0, bcch_freq := 0, bsic := 11 }, /* ARFCN 700, band 1800, LAC 96 */
|
||||||
|
{ rxlev := 0, bcch_freq := 1, bsic := 12 }, /* ARFCN 800, band 1800, LAC 98 */
|
||||||
|
/* Sub list 2: different band */
|
||||||
|
{ rxlev := 40, bcch_freq := 2, bsic := 13 }, /* ARFCN 200, band 850, LAC 97 */
|
||||||
|
{ rxlev := 0, bcch_freq := 3, bsic := 14 } /* ARFCN 1000, band 900, LAC 99 */
|
||||||
|
};
|
||||||
|
var octetstring l3_mr := enc_GsmRrL3Message(valueof(ts_MEAS_REP(true, 8, 8, reps := neighbor_rep)));
|
||||||
|
RSL.send(ts_RSL_MEAS_RES(g_chan_nr, 0, ts_RSL_IE_UplinkMeas, ts_RSL_IE_BS_Power(0), ts_RSL_IE_L1Info,
|
||||||
|
l3_mr, 0));
|
||||||
|
|
||||||
|
/* Expect a handover to the third entry. If the BSC parsed the report
|
||||||
|
* correctly, the third entry has LAC 97. */
|
||||||
|
var template BSSMAP_FIELD_CellIdentificationList cid_list := {
|
||||||
|
cIl_LAC := { ts_BSSMAP_CI_LAC(97) }
|
||||||
|
};
|
||||||
|
alt {
|
||||||
|
[] BSSAP.receive(tr_BSSMAP_HandoverRequired(cid_list := cid_list)) {
|
||||||
|
setverdict(pass);
|
||||||
|
}
|
||||||
|
[] BSSAP.receive(tr_BSSMAP_HandoverRequired()) {
|
||||||
|
setverdict(fail, "Handover has unexpected LAC in Cell Identification List. The BSC probably"
|
||||||
|
& " didn't parse the multi-band measurement report correctly.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f_ho_out_of_this_bsc(skip_meas_rep := true);
|
||||||
|
}
|
||||||
|
testcase TC_ho_meas_rep_multi_band() runs on test_CT {
|
||||||
|
/* Verify that the BSC parses the measurement report correctly when
|
||||||
|
* neighbors in multiple bands are configured (OS#5717). See
|
||||||
|
* gsm_arfcn2band_rc() in libosmocore src/gsm/gsm_utils.c for the
|
||||||
|
* ARFCN -> band mapping. The MS is connected to band 1800. */
|
||||||
|
var MSC_ConnHdlr vc_conn;
|
||||||
|
|
||||||
|
f_init_vty();
|
||||||
|
f_bts_0_cfg(BSCVTY,
|
||||||
|
{"neighbor-list mode automatic",
|
||||||
|
"handover 1",
|
||||||
|
"handover algorithm 2",
|
||||||
|
"handover2 window rxlev averaging 1",
|
||||||
|
"no neighbors",
|
||||||
|
"neighbor lac 99 arfcn 1000 bsic any", /* band 900 */
|
||||||
|
"neighbor lac 98 arfcn 800 bsic any", /* band 1800 */
|
||||||
|
"neighbor lac 97 arfcn 200 bsic any", /* band 850 */
|
||||||
|
"neighbor lac 96 arfcn 700 bsic any"}); /* band 1800 */
|
||||||
|
f_vty_transceive(BSCVTY, "drop bts connection 0 oml");
|
||||||
|
|
||||||
|
f_init(1, true);
|
||||||
|
f_sleep(1.0);
|
||||||
|
|
||||||
|
f_ctrs_bsc_and_bts_handover_init();
|
||||||
|
|
||||||
|
vc_conn := f_start_handler(refers(f_tc_ho_meas_rep_multi_band));
|
||||||
|
vc_conn.done;
|
||||||
|
|
||||||
|
f_ctrs_bsc_and_bts_add(0, "assignment:attempted");
|
||||||
|
f_ctrs_bsc_and_bts_add(0, "assignment:completed");
|
||||||
|
f_ctrs_bsc_and_bts_add(0, "handover:attempted");
|
||||||
|
f_ctrs_bsc_and_bts_add(0, "handover:completed");
|
||||||
|
f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted");
|
||||||
|
f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed");
|
||||||
|
f_ctrs_bsc_and_bts_verify();
|
||||||
|
f_shutdown_helper(ho := true);
|
||||||
|
}
|
||||||
|
|
||||||
control {
|
control {
|
||||||
/* CTRL interface testing */
|
/* CTRL interface testing */
|
||||||
execute( TC_ctrl_msc_connection_status() );
|
execute( TC_ctrl_msc_connection_status() );
|
||||||
|
@ -12313,6 +12394,8 @@ control {
|
||||||
execute( TC_mgwpool_pin_bts() );
|
execute( TC_mgwpool_pin_bts() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
execute( TC_ho_meas_rep_multi_band() );
|
||||||
|
|
||||||
/* Run TC_ho_out_of_this_bsc last, because it may trigger a segfault before osmo-bsc's patch
|
/* Run TC_ho_out_of_this_bsc last, because it may trigger a segfault before osmo-bsc's patch
|
||||||
* with change-id I5a3345ab0005a73597f5c27207480912a2f5aae6 */
|
* with change-id I5a3345ab0005a73597f5c27207480912a2f5aae6 */
|
||||||
execute( TC_ho_out_of_this_bsc() );
|
execute( TC_ho_out_of_this_bsc() );
|
||||||
|
|
|
@ -894,11 +894,16 @@ modifies ts_BSSAP_BSSMAP := {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template PDU_BSSAP tr_BSSMAP_HandoverRequired(template BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := *) modifies tr_BSSAP_BSSMAP := {
|
template PDU_BSSAP tr_BSSMAP_HandoverRequired(template BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := *,
|
||||||
|
template (present) BSSMAP_FIELD_CellIdentificationList cid_list := ?)
|
||||||
|
modifies tr_BSSAP_BSSMAP := {
|
||||||
pdu := {
|
pdu := {
|
||||||
bssmap := {
|
bssmap := {
|
||||||
handoverRequired := {
|
handoverRequired := {
|
||||||
messageType := '11'O,
|
messageType := '11'O,
|
||||||
|
cellIdentifierList := {
|
||||||
|
cellIdentificationList := cid_list
|
||||||
|
},
|
||||||
oldToNewBSSInfo := f_tr_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs)
|
oldToNewBSSInfo := f_tr_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue