BTS_Tests/SMSCB: improve SDCCH8+CBCH handling and configuration

Change-Id: I130a028df7dc476ab765733261a1f007f19f39a8
This commit is contained in:
Vadim Yanitskiy 2020-07-31 06:41:52 +07:00
parent 94528c7e58
commit ffcd128f10
1 changed files with 62 additions and 60 deletions

View File

@ -54,8 +54,8 @@ t_CbchPC(template (value) CbchTestMsgs msgs, template (omit) CbchTestMsg def :=
/* CBCH test parameters for most of our tests */
type record CbchTestPars {
/* should we execute on SDCCH4 (true) or SDCCH8 (false) ? */
boolean use_sdcch4,
/* Should we execute on SDCCH4 or SDCCH8? */
RslChannelNr chan_nr,
/* Parameters for BASIC CBCH */
CbchTestParsChan basic,
/* Parameters for EXTENDED CBCH */
@ -195,29 +195,51 @@ runs on test_CT {
}
}
private function f_vty_cbch_setup(boolean use_sdcch4 := true) runs on test_CT {
private function f_vty_cbch_setup(in RslChannelNr chan_nr) runs on test_CT {
if (use_sdcch4 == true) {
f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"},
if (match(chan_nr, t_RslChanNr_CBCH4(0))) {
f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0", "timeslot 0"},
"phys_chan_config CCCH+SDCCH4+CBCH");
f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"},
"phys_chan_config SDCCH8");
} else {
f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"},
/* (Re)configure timeslots 1..3 as TCH/F */
for (var integer tn := 1; tn <= 3; tn := tn + 1) {
f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0",
"timeslot " & int2str(tn) },
"phys_chan_config TCH/F");
}
} else if (match(chan_nr, t_RslChanNr_CBCH8(?))) {
f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0", "timeslot 0"},
"phys_chan_config CCCH+SDCCH4");
f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"},
f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0",
"timeslot " & int2str(chan_nr.tn) },
"phys_chan_config SDCCH8+CBCH");
/* (Re)configure timeslots 1..3 (excluding the given one) as TCH/F */
for (var integer tn := 1; tn <= 3; tn := tn + 1) {
if (tn == chan_nr.tn)
{ continue; }
f_vty_config2(BSCVTY, { "network", "bts 0", "trx 0",
"timeslot " & int2str(tn) },
"phys_chan_config TCH/F");
}
}
f_vty_transceive(BSCVTY, "drop bts connection 0 oml");
f_sleep(2.0);
}
private function f_smscb_setup(inout CbchTestPars pars) runs on test_CT {
/* Make sure we've got either SDCCH4+CBCH or SDCCH8+CBCH.
* SDCCH4+CBCH can only be allocated on TS0, SDCCH8+CBCH on TS0..3.
* On C0 the first timeslot shall always transmit BCCH, thus TS1..3.*/
if (not match(pars.chan_nr, (t_RslChanNr_CBCH4(0), t_RslChanNr_CBCH8(1),
t_RslChanNr_CBCH8(2), t_RslChanNr_CBCH8(3)))) {
setverdict(inconc, "Unhandled channel number: ", pars.chan_nr);
mtc.stop;
}
f_cbch_compute_exp_blocks(pars);
f_init_vty_bsc();
/* ensure that a CBCH is present in channel combination */
f_vty_cbch_setup(pars.use_sdcch4);
f_vty_cbch_setup(pars.chan_nr);
f_init();
f_init_l1ctl();
@ -231,14 +253,6 @@ private function f_smscb_setup(inout CbchTestPars pars) runs on test_CT {
}
}
private function f_smscb_cleanup() runs on test_CT {
/* reset timeslot 0 channel combination to default */
f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"},
"phys_chan_config CCCH+SDCCH4");
f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"},
"phys_chan_config SDCCH8");
}
/* construct a receive/match template for given block_nr in given msg */
private function f_get_block_template(CbchTestMsg msg, integer block_nr) return template CBCH_Block {
var template CBCH_Block tr;
@ -326,17 +340,8 @@ private function f_cbch_report(CbchTestParsChan pars_chan, charstring id)
}
}
private function t_cbch_chan_nr(CbchTestPars pars, template uint8_t tn) return template RslChannelNr {
if (pars.use_sdcch4) {
return t_RslChanNr_CBCH4(tn);
} else {
return t_RslChanNr_CBCH8(tn);
}
}
/* shared function doing the heavy lifting for most CBCH tests */
private function f_TC_smscb(CbchTestPars pars) runs on test_CT {
var template RslChannelNr t_chan_nr := t_cbch_chan_nr(pars, 0); /* FIXME: TS number */
var L1ctlDlMessage dl;
var integer msg_count;
timer T;
@ -358,7 +363,7 @@ private function f_TC_smscb(CbchTestPars pars) runs on test_CT {
T.start(5.0 + 3.0 * int2float(msg_count));
/* Expect this to show up exactly once on the basic CBCH (four blocks) */
alt {
[] L1CTL.receive(tr_L1CTL_DATA_IND(t_chan_nr)) -> value dl {
[] L1CTL.receive(tr_L1CTL_DATA_IND(pars.chan_nr)) -> value dl {
var integer tb := f_cbch_fn2tb(dl.dl_info.frame_nr);
var CBCH_Block cb := dec_CBCH_Block(dl.payload.data_ind.payload);
log("Tb=", tb, ", CBCH: ", dl, ", block: ", cb);
@ -386,12 +391,10 @@ private function f_TC_smscb(CbchTestPars pars) runs on test_CT {
}
}
f_smscb_cleanup();
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, pass);
}
private function f_TC_smscb_default_only(CbchTestPars pars) runs on test_CT {
var template RslChannelNr t_chan_nr := t_cbch_chan_nr(pars, 0); /* FIXME: TS number */
var L1ctlDlMessage dl;
timer T := 5.0;
@ -403,7 +406,7 @@ private function f_TC_smscb_default_only(CbchTestPars pars) runs on test_CT {
T.start;
alt {
[] L1CTL.receive(tr_L1CTL_DATA_IND(t_chan_nr)) -> value dl {
[] L1CTL.receive(tr_L1CTL_DATA_IND(pars.chan_nr)) -> value dl {
var integer tb := f_cbch_fn2tb(dl.dl_info.frame_nr);
log("CBCH: ", dl);
var CBCH_Block cb := dec_CBCH_Block(dl.payload.data_ind.payload);
@ -436,7 +439,6 @@ private function f_TC_smscb_default_only(CbchTestPars pars) runs on test_CT {
[] T.timeout {}
}
f_smscb_cleanup();
/* don't shut down; some tests still want to continue */
}
@ -505,7 +507,7 @@ private const CbchTestMsg msg_default := {
/* transmit single-block SMSCB COMMAND */
testcase TC_sms_cb_cmd_sdcch4_1block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_1b_norm)),
extended := omit
};
@ -513,7 +515,7 @@ testcase TC_sms_cb_cmd_sdcch4_1block() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_1block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := false,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC(msgs_1m_1b_norm)),
extended := omit
};
@ -523,7 +525,7 @@ testcase TC_sms_cb_cmd_sdcch8_1block() runs on test_CT {
/* transmit dual-block SMSCB COMMAND */
testcase TC_sms_cb_cmd_sdcch4_2block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_2b_norm)),
extended := omit
};
@ -531,7 +533,7 @@ testcase TC_sms_cb_cmd_sdcch4_2block() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_2block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := false,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC(msgs_1m_2b_norm)),
extended := omit
};
@ -541,7 +543,7 @@ testcase TC_sms_cb_cmd_sdcch8_2block() runs on test_CT {
/* transmit triple-block SMSCB COMMAND */
testcase TC_sms_cb_cmd_sdcch4_3block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_3b_norm)),
extended := omit
};
@ -549,7 +551,7 @@ testcase TC_sms_cb_cmd_sdcch4_3block() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_3block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := false,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC(msgs_1m_3b_norm)),
extended := omit
};
@ -559,7 +561,7 @@ testcase TC_sms_cb_cmd_sdcch8_3block() runs on test_CT {
/* transmit quad-block SMSCB COMMAND */
testcase TC_sms_cb_cmd_sdcch4_4block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_4b_norm)),
extended := omit
};
@ -567,7 +569,7 @@ testcase TC_sms_cb_cmd_sdcch4_4block() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_4block() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := false,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC(msgs_1m_4b_norm)),
extended := omit
};
@ -577,7 +579,7 @@ testcase TC_sms_cb_cmd_sdcch8_4block() runs on test_CT {
/* transmit multiple commands of each 4 blocks */
testcase TC_sms_cb_cmd_sdcch4_multi() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_3m_4b_norm)),
extended := omit
};
@ -585,7 +587,7 @@ testcase TC_sms_cb_cmd_sdcch4_multi() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_multi() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := false,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC(msgs_3m_4b_norm)),
extended := omit
};
@ -595,7 +597,7 @@ testcase TC_sms_cb_cmd_sdcch8_multi() runs on test_CT {
/* transmit multiple commands of each 4 blocks on CBCH EXTD */
testcase TC_sms_cb_cmd_sdcch4_extd_multi() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC({})),
extended := valueof(t_CbchPC(msgs_3m_4b_norm))
};
@ -603,7 +605,7 @@ testcase TC_sms_cb_cmd_sdcch4_extd_multi() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_extd_multi() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := false,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC({})),
extended := valueof(t_CbchPC(msgs_3m_4b_norm))
};
@ -613,7 +615,7 @@ testcase TC_sms_cb_cmd_sdcch8_extd_multi() runs on test_CT {
/* transmit SMSCB COMMAND with SCHEDULE payload */
testcase TC_sms_cb_cmd_sdcch4_schedule() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_4b_sched)),
extended := omit
};
@ -621,7 +623,7 @@ testcase TC_sms_cb_cmd_sdcch4_schedule() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_schedule() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := false,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC(msgs_1m_4b_sched)),
extended := omit
};
@ -631,7 +633,7 @@ testcase TC_sms_cb_cmd_sdcch8_schedule() runs on test_CT {
/* set a DEFAULT message; verify it gets transmitted all the time */
testcase TC_sms_cb_cmd_sdcch4_default_only() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_3b_default)),
extended := omit
};
@ -640,7 +642,7 @@ testcase TC_sms_cb_cmd_sdcch4_default_only() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_default_only() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_3b_default)),
extended := omit
};
@ -650,7 +652,7 @@ testcase TC_sms_cb_cmd_sdcch8_default_only() runs on test_CT {
testcase TC_sms_cb_cmd_sdcch4_default_and_normal() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_3b_norm, msg_default)),
extended := omit
};
@ -658,7 +660,7 @@ testcase TC_sms_cb_cmd_sdcch4_default_and_normal() runs on test_CT {
}
testcase TC_sms_cb_cmd_sdcch8_default_and_normal() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH8(2)),
basic := valueof(t_CbchPC(msgs_1m_3b_norm, msg_default)),
extended := omit
};
@ -668,7 +670,7 @@ testcase TC_sms_cb_cmd_sdcch8_default_and_normal() runs on test_CT {
/* first set a DEFAULT message, then disable it again */
testcase TC_sms_cb_cmd_sdcch4_default_then_null() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_3b_default)),
extended := omit
};
@ -772,17 +774,17 @@ function f_TC_cbc_load_idle() runs on test_CT {
}
}
}
f_smscb_cleanup();
Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
}
testcase TC_cbc_sdcch4_load_idle() runs on test_CT {
f_init_vty_bsc();
f_vty_cbch_setup(use_sdcch4 := true);
f_vty_cbch_setup(valueof(ts_RslChanNr_CBCH4(0)));
f_TC_cbc_load_idle();
}
testcase TC_cbc_sdcch8_load_idle() runs on test_CT {
f_init_vty_bsc();
f_vty_cbch_setup(use_sdcch4 := false);
f_vty_cbch_setup(valueof(ts_RslChanNr_CBCH8(2)));
f_TC_cbc_load_idle();
}
@ -853,29 +855,29 @@ function f_TC_cbc_load_overload(CbchTestPars pars) runs on test_CT {
}
}
}
f_smscb_cleanup();
Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
}
testcase TC_cbc_sdcch4_load_overload() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(0)),
basic := valueof(t_CbchPC(msgs_1m_3b_norm)),
extended := omit
};
f_init_vty_bsc();
f_vty_cbch_setup(use_sdcch4 := true);
f_vty_cbch_setup(pars.chan_nr);
f_TC_cbc_load_overload(pars);
}
testcase TC_cbc_sdcch8_load_overload() runs on test_CT {
var CbchTestPars pars := {
use_sdcch4 := true,
chan_nr := valueof(ts_RslChanNr_CBCH4(2)),
basic := valueof(t_CbchPC(msgs_1m_3b_norm)),
extended := omit
};
f_init_vty_bsc();
f_vty_cbch_setup(use_sdcch4 := true);
f_vty_cbch_setup(pars.chan_nr);
f_TC_cbc_load_overload(pars);
}