bts: Add TC_sacch_info_mod and TC_sacch_filling

Change-Id: I38b3e302eddb699b2dbdae06fc929dd59de7b2dc
This commit is contained in:
Harald Welte 2018-03-11 22:29:31 +01:00
parent 21240e63f9
commit ea17b91e78
2 changed files with 118 additions and 0 deletions

View File

@ -636,8 +636,111 @@ testcase TC_deact_sacch() runs on test_CT {
f_shutdown();
}
private function f_sacch_present(template octetstring l3_exp) runs on ConnHdlr {
var L1ctlDlMessage dl;
/* check that the specified SI5 value is actually sent */
timer T_sacch := 3.0;
L1CTL.clear;
T_sacch.start;
alt {
[] L1CTL.receive(tr_L1CTL_DATA_IND(g_chan_nr, tr_RslLinkID_SACCH(0))) -> value dl {
var octetstring l3 := substr(dl.payload.data_ind.payload, 4, 19);
if (match(l3, l3_exp)) {
setverdict(pass);
} else {
repeat;
}
}
[] L1CTL.receive { repeat; }
[] T_sacch.timeout {
setverdict(fail, "Timeout waiting for SACCH ", l3_exp);
self.stop;
}
}
}
/* Test for default SACCH FILL transmitted in DL SACCH (all channel types) */
private function f_TC_sacch_filling(charstring id) runs on ConnHdlr {
/* Set a known default SACCH filling for SI5 */
var octetstring si5 := f_rnd_octstring(19);
RSL.send(ts_RSL_SACCH_FILL(RSL_SYSTEM_INFO_5, si5));
f_l1_tune(L1CTL);
RSL.clear;
/* activate the logical channel */
f_est_dchan();
/* check that the specified SI5 value is actually sent */
f_sacch_present(si5);
/* release the channel */
RSL.clear;
f_rsl_chan_deact();
f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);
}
testcase TC_sacch_filling() runs on test_CT {
var ConnHdlr vc_conn;
var ConnHdlrPars pars;
f_init();
for (var integer i := 0; i < sizeof(g_AllChannels); i := i+1) {
pars := valueof(t_Pars(g_AllChannels[i], ts_RSL_ChanMode_SIGN));
log(testcasename(), ": Starting for ", g_AllChannels[i]);
vc_conn := f_start_handler(refers(f_TC_sacch_filling), pars);
vc_conn.done;
}
/* TODO: do the above in parallel, rather than sequentially? */
f_shutdown();
}
/* Test for lchan-specific SACCH INFO MODIFY (TS 48.058 4.12) */
private function f_TC_sacch_info_mod(charstring id) runs on ConnHdlr {
/* Set a known default SACCH filling for SI5 */
var octetstring si5 := f_rnd_octstring(19);
var octetstring si5_diff := f_rnd_octstring(19);
RSL.send(ts_RSL_SACCH_FILL(RSL_SYSTEM_INFO_5, si5));
f_l1_tune(L1CTL);
RSL.clear;
log("Activating channel, expecting standard SI5");
/* activate the logical channel */
f_est_dchan();
/* check that the specified SI5 value is actually sent */
f_sacch_present(si5);
/* set channel-specific different SI5 */
log("Setting channel specific SACCH INFO, expecting it");
RSL.send(ts_RSL_SACCH_INF_MOD(g_chan_nr, RSL_SYSTEM_INFO_5, si5_diff))
/* check that the specified lchan-specific value is now used */
f_sacch_present(si5_diff);
/* deactivate the channel and re-activate it, this should result in default SI5 */
log("De-activating and re-activating channel, expecting standard SI5");
f_rsl_chan_deact();
f_rsl_chan_act(valueof(ts_RSL_ChanMode_SIGN));
/* Verify that the TRX-wide default SACCH filling is present again */
f_sacch_present(si5);
/* release the channel */
RSL.clear;
f_rsl_chan_deact();
f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);
}
testcase TC_sacch_info_mod() runs on test_CT {
var ConnHdlr vc_conn;
var ConnHdlrPars pars;
f_init();
for (var integer i := 0; i < sizeof(g_AllChannels); i := i+1) {
pars := valueof(t_Pars(g_AllChannels[i], ts_RSL_ChanMode_SIGN));
log(testcasename(), ": Starting for ", g_AllChannels[i]);
vc_conn := f_start_handler(refers(f_TC_sacch_info_mod), pars);
vc_conn.done;
}
/* TODO: do the above in parallel, rather than sequentially? */
f_shutdown();
}
/* Test for SACCH transmission rules in the context of special CHAN ACT (HO) */
@ -2427,6 +2530,8 @@ control {
execute( TC_chan_deact_not_active() );
execute( TC_chan_act_wrong_nr() );
execute( TC_deact_sacch() );
execute( TC_sacch_filling() );
execute( TC_sacch_info_mod() );
execute( TC_rach_content() );
execute( TC_rach_count() );
execute( TC_rach_max_ta() );

View File

@ -1140,6 +1140,19 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
/* 8.6.20 BTS <- BSC */
template RSL_Message ts_RSL_SACCH_INF_MOD(RslChannelNr chan_nr, RSL_IE_SysinfoType si_type,
octetstring l3_info) := {
msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
msg_type := RSL_MT_SACCH_INFO_MODIFY,
ies := {
t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
t_RSL_IE(RSL_IE_SYSINFO_TYPE, RSL_IE_Body:{sysinfo_type := si_type}),
t_RSL_IE(RSL_IE_L3_INFO, RSL_IE_Body:{l3_info := ts_RSL_L16V(l3_info)})
}
}
/* COMMON CHANNEL MANAGEMENT MESSAGES */
/* 8.5.1 BTS <- BSC */