Fix configuration of initial_(m)cs
Properly clip initial_(m)cs values to be lower-equal than maximum configured. Regarding initial_mcs, use values provided by BTS, which were not used before. Change-Id: Ifc6bc7c2734d1ae404adc2497afec5366e4f9e50
This commit is contained in:
parent
87eec1fd74
commit
b47b137c66
|
@ -115,10 +115,11 @@ struct gprs_rlcmac_bts {
|
|||
uint8_t initial_cs_dl, initial_cs_ul;
|
||||
uint8_t initial_mcs_dl, initial_mcs_ul;
|
||||
struct { /* Config Values set by VTY */
|
||||
bool force_initial_cs; /* false=use from BTS true=use from VTY */
|
||||
bool force_initial_mcs; /* false=use from BTS true=use from VTY */
|
||||
uint8_t max_cs_dl, max_cs_ul;
|
||||
uint8_t max_mcs_dl, max_mcs_ul;
|
||||
} vty;
|
||||
uint8_t force_cs; /* 0=use from BTS 1=use from VTY */
|
||||
uint16_t force_llc_lifetime; /* overrides lifetime from SGSN */
|
||||
uint32_t llc_discard_csec;
|
||||
uint32_t llc_idle_ack_csec;
|
||||
|
|
|
@ -633,14 +633,38 @@ bssgp_failed:
|
|||
}
|
||||
bts_set_max_mcs(bts, bts->vty.max_mcs_dl, bts->vty.max_mcs_ul); /* recalc max MCS values */
|
||||
|
||||
LOGP(DL1IF, LOGL_DEBUG, " initial_cs=%d\n", info_ind->initial_cs);
|
||||
LOGP(DL1IF, LOGL_DEBUG, " initial_mcs=%d\n", info_ind->initial_mcs);
|
||||
if (!bts->force_cs) {
|
||||
if (info_ind->initial_cs < 1 || info_ind->initial_cs > 4)
|
||||
bts->initial_cs_dl = 1;
|
||||
else
|
||||
bts->initial_cs_dl = info_ind->initial_cs;
|
||||
bts->initial_cs_ul = bts->initial_cs_dl;
|
||||
LOGP(DL1IF, LOGL_DEBUG, " initial_cs=%u%s\n", info_ind->initial_cs,
|
||||
bts->vty.force_initial_cs ? " (VTY forced, ignoring)" : "");
|
||||
if (!bts->vty.force_initial_cs) {
|
||||
if (info_ind->initial_cs > bts->bts->max_cs_dl()) {
|
||||
LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_cs_dl to %d\n", bts->bts->max_cs_dl());
|
||||
bts->initial_cs_dl = bts->bts->max_cs_dl();
|
||||
} else {
|
||||
bts->initial_cs_dl = info_ind->initial_cs;
|
||||
}
|
||||
if (info_ind->initial_cs > bts->bts->max_cs_ul()) {
|
||||
LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_cs_ul to %d\n", bts->bts->max_cs_ul());
|
||||
bts->initial_cs_ul = bts->bts->max_cs_ul();
|
||||
} else {
|
||||
bts->initial_cs_ul = info_ind->initial_cs;
|
||||
}
|
||||
}
|
||||
|
||||
LOGP(DL1IF, LOGL_DEBUG, " initial_mcs=%u%s\n", info_ind->initial_mcs,
|
||||
bts->vty.force_initial_mcs ? " (VTY forced, ignoring)" : "");
|
||||
if (!bts->vty.force_initial_mcs) {
|
||||
if (info_ind->initial_mcs > bts->bts->max_mcs_dl()) {
|
||||
LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_mcs_dl to %d\n", bts->bts->max_mcs_dl());
|
||||
bts->initial_mcs_dl = bts->bts->max_mcs_dl();
|
||||
} else {
|
||||
bts->initial_mcs_dl = info_ind->initial_mcs;
|
||||
}
|
||||
if (info_ind->initial_mcs > bts->bts->max_mcs_ul()) {
|
||||
LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_mcs_ul to %d\n", bts->bts->max_mcs_ul());
|
||||
bts->initial_mcs_ul = bts->bts->max_mcs_ul();
|
||||
} else {
|
||||
bts->initial_mcs_ul = info_ind->initial_mcs;
|
||||
}
|
||||
}
|
||||
|
||||
pcu = gprs_bssgp_init(
|
||||
|
|
|
@ -122,7 +122,7 @@ static int config_write_pcu(struct vty *vty)
|
|||
if (bts->fc_ms_leak_rate)
|
||||
vty_out(vty, " flow-control force-ms-leak-rate %d%s",
|
||||
bts->fc_ms_leak_rate, VTY_NEWLINE);
|
||||
if (bts->force_cs) {
|
||||
if (bts->vty.force_initial_cs) {
|
||||
if (bts->initial_cs_ul == bts->initial_cs_dl)
|
||||
vty_out(vty, " cs %d%s", bts->initial_cs_dl,
|
||||
VTY_NEWLINE);
|
||||
|
@ -179,7 +179,7 @@ static int config_write_pcu(struct vty *vty)
|
|||
bts->mcs_lqual_ranges[8].low,
|
||||
VTY_NEWLINE);
|
||||
|
||||
if (bts->initial_mcs_dl != 1 && bts->initial_mcs_ul != 1) {
|
||||
if (bts->vty.force_initial_mcs) {
|
||||
if (bts->initial_mcs_ul == bts->initial_mcs_dl)
|
||||
vty_out(vty, " mcs %d%s", bts->initial_mcs_dl,
|
||||
VTY_NEWLINE);
|
||||
|
@ -449,7 +449,7 @@ DEFUN_ATTR(cfg_pcu_cs,
|
|||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
uint8_t cs = atoi(argv[0]);
|
||||
|
||||
bts->force_cs = 1;
|
||||
bts->vty.force_initial_cs = true;
|
||||
bts->initial_cs_dl = cs;
|
||||
if (argc > 1)
|
||||
bts->initial_cs_ul = atoi(argv[1]);
|
||||
|
@ -467,7 +467,7 @@ DEFUN_ATTR(cfg_pcu_no_cs,
|
|||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->force_cs = 0;
|
||||
bts->vty.force_initial_cs = false;
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -517,13 +517,14 @@ DEFUN_ATTR(cfg_pcu_mcs,
|
|||
CMD_ATTR_IMMEDIATE)
|
||||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
uint8_t cs = atoi(argv[0]);
|
||||
uint8_t mcs = atoi(argv[0]);
|
||||
|
||||
bts->initial_mcs_dl = cs;
|
||||
bts->vty.force_initial_mcs = true;
|
||||
bts->initial_mcs_dl = mcs;
|
||||
if (argc > 1)
|
||||
bts->initial_mcs_ul = atoi(argv[1]);
|
||||
else
|
||||
bts->initial_mcs_ul = cs;
|
||||
bts->initial_mcs_ul = mcs;
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -536,8 +537,7 @@ DEFUN_ATTR(cfg_pcu_no_mcs,
|
|||
{
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->initial_mcs_dl = 1;
|
||||
bts->initial_mcs_ul = 1;
|
||||
bts->vty.force_initial_mcs = false;
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue