Implement VTY configuration to control Early Classmark Sending

The SI3 rest octests contain a flag that indicates if early classmark
sending is allowed in this cell or not.  So far we always set this to
one, now it is configurable using the 'early-classmark-sending' command
at the VTY node.

Change-Id: Ia0b1cc5ab45673f3da70c59ae8917eba343f9862
This commit is contained in:
Harald Welte 2017-01-13 00:10:32 +01:00
parent 6c4382b998
commit 42def7205b
3 changed files with 27 additions and 0 deletions

View File

@ -803,6 +803,7 @@ struct gsm_bts {
uint16_t scramble_list[MAX_EARFCN_LIST];
} data;
} si_common;
bool early_classmark_allowed;
/* do we use static (user-defined) system information messages? (bitmask) */
uint32_t si_mode_static;

View File

@ -274,6 +274,9 @@ static void bts_dump_vty(struct vty *vty, struct gsm_bts *bts)
bts->si_common.chan_desc.bs_ag_blks_res, VTY_NEWLINE);
vty_out(vty, "System Information present: 0x%08x, static: 0x%08x%s",
bts->si_valid, bts->si_mode_static, VTY_NEWLINE);
vty_out(vty, "Early Classmark Sending: %s%s",
bts->early_classmark_allowed ? "allowed" : "forbidden",
VTY_NEWLINE);
if (is_ipaccess_bts(bts))
vty_out(vty, " Unit ID: %u/%u/0, OML Stream ID 0x%02x%s",
bts->ip_access.site_id, bts->ip_access.bts_id,
@ -641,6 +644,8 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
VTY_NEWLINE);
}
}
vty_out(vty, " early-classmark-sending %s%s",
bts->early_classmark_allowed ? "allowed" : "forbidden", VTY_NEWLINE);
switch (bts->type) {
case GSM_BTS_TYPE_NANOBTS:
case GSM_BTS_TYPE_OSMO_SYSMO:
@ -2674,6 +2679,23 @@ DEFUN(cfg_bts_si_static, cfg_bts_si_static_cmd,
return CMD_SUCCESS;
}
DEFUN(cfg_bts_early_cm, cfg_bts_early_cm_cmd,
"early-classmark-sending (allowed|forbidden)",
"Early Classmark Sending\n"
"Early Classmark Sending is allowed\n"
"Early Classmark Sending is forbidden\n")
{
struct gsm_bts *bts = vty->index;
int rc, type;
if (!strcmp(argv[0], "allowed"))
bts->early_classmark_allowed = true;
else
bts->early_classmark_allowed = false;
return CMD_SUCCESS;
}
DEFUN(cfg_bts_neigh_mode, cfg_bts_neigh_mode_cmd,
"neighbor-list mode (automatic|manual|manual-si5)",
"Neighbor List\n" "Mode of Neighbor List generation\n"
@ -3955,6 +3977,7 @@ int bsc_vty_init(const struct log_info *cat, struct gsm_network *network)
install_element(BTS_NODE, &cfg_bts_pag_free_cmd);
install_element(BTS_NODE, &cfg_bts_si_mode_cmd);
install_element(BTS_NODE, &cfg_bts_si_static_cmd);
install_element(BTS_NODE, &cfg_bts_early_cm_cmd);
install_element(BTS_NODE, &cfg_bts_neigh_mode_cmd);
install_element(BTS_NODE, &cfg_bts_neigh_cmd);
install_element(BTS_NODE, &cfg_bts_si5_neigh_cmd);
@ -4029,6 +4052,7 @@ int bsc_vty_init(const struct log_info *cat, struct gsm_network *network)
abis_nm_vty_init();
abis_om2k_vty_init();
e1inp_vty_init();
osmo_fsm_vty_add_cmds();
bsc_vty_init_extra();

View File

@ -764,6 +764,8 @@ static int generate_si3(uint8_t *output, struct gsm_bts *bts)
} else {
si_info.si2quater_indicator = 0;
}
si_info.early_cm_ctrl = bts->early_classmark_allowed;
/* SI3 Rest Octets (10.5.2.34), containing
CBQ, CELL_RESELECT_OFFSET, TEMPORARY_OFFSET, PENALTY_TIME
Power Offset, 2ter Indicator, Early Classmark Sending,