aboutsummaryrefslogtreecommitdiffstats
path: root/src/libbsc
diff options
context:
space:
mode:
authorStefan Sperling <ssperling@sysmocom.de>2018-02-08 18:06:42 +0100
committerStefan Sperling <ssperling@sysmocom.de>2018-02-08 18:06:42 +0100
commitc862d2548105bb444e607f0378354c6897248ad2 (patch)
tree9142f825b8fe77592099e7cb629239b9ef0db2db /src/libbsc
parentea0e993bc464e4118ab7753855a65a01d91317ed (diff)
add VTY command to configure ramping step interval
Diffstat (limited to 'src/libbsc')
-rw-r--r--src/libbsc/acc_ramp.c7
-rw-r--r--src/libbsc/bsc_vty.c35
2 files changed, 40 insertions, 2 deletions
diff --git a/src/libbsc/acc_ramp.c b/src/libbsc/acc_ramp.c
index 73df4fe93..8825188a5 100644
--- a/src/libbsc/acc_ramp.c
+++ b/src/libbsc/acc_ramp.c
@@ -161,12 +161,13 @@ void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts)
allow_all_allowed_accs(acc_ramp);
}
-int acc_ramp_set_step_size(struct acc_ramp *acc_ramp, enum acc_ramp_step_size step_size)
+int acc_ramp_set_step_size(struct acc_ramp *acc_ramp, unsigned int step_size)
{
if (step_size < ACC_RAMP_STEP_SIZE_MIN || step_size > ACC_RAMP_STEP_SIZE_MAX)
return -ERANGE;
acc_ramp->step_size = step_size;
+ LOGP(DRLL, LOGL_DEBUG, "(bts=%d) ACC RAMP: ramping step size set to %u\n", acc_ramp->bts->nr, step_size);
return 0;
}
@@ -177,12 +178,16 @@ int acc_ramp_set_step_interval(struct acc_ramp *acc_ramp, unsigned int step_inte
acc_ramp->step_interval_sec = step_interval;
acc_ramp->step_interval_is_fixed = true;
+ LOGP(DRLL, LOGL_DEBUG, "(bts=%d) ACC RAMP: ramping step interval set to %u seconds\n",
+ acc_ramp->bts->nr, step_interval);
return 0;
}
void acc_ramp_set_step_interval_dynamic(struct acc_ramp *acc_ramp)
{
acc_ramp->step_interval_is_fixed = false;
+ LOGP(DRLL, LOGL_DEBUG, "(bts=%d) ACC RAMP: ramping step interval set to 'dynamic'\n",
+ acc_ramp->bts->nr);
}
void acc_ramp_start(struct acc_ramp *acc_ramp)
diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c
index b02ac2bbf..171d5a72a 100644
--- a/src/libbsc/bsc_vty.c
+++ b/src/libbsc/bsc_vty.c
@@ -1756,6 +1756,7 @@ DEFUN(cfg_bts,
/* allocate a new one */
bts = gsm_bts_alloc_register(gsmnet, GSM_BTS_TYPE_UNKNOWN,
HARDCODED_BSIC);
+ acc_ramp_init(&bts->acc_ramp, bts);
} else
bts = gsm_bts_num(gsmnet, bts_nr);
@@ -3111,7 +3112,7 @@ DEFUN(cfg_bts_pcu_sock, cfg_bts_pcu_sock_cmd,
DEFUN(cfg_bts_acc_ramping,
cfg_bts_acc_ramping_cmd,
"access-control-class-ramping enabled (0|1)",
- "Enable or disable Access Control Class ramping\n"
+ "Conigure Access Control Class ramping\n"
"Enable or disable Access Control Class ramping\n"
"Disable Access Control Class ramping\n" "Enable Access Control Class ramping\n")
{
@@ -3133,6 +3134,37 @@ DEFUN(cfg_bts_acc_ramping,
return CMD_SUCCESS;
}
+DEFUN(cfg_bts_acc_ramping_step_interval,
+ cfg_bts_acc_ramping_step_interval_cmd,
+ "access-control-class-ramping step-interval (<"
+ OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_INTERVAL_MIN) "-"
+ OSMO_STRINGIFY_VAL(ACC_RAMP_STEP_INTERVAL_MAX) ">|dynamic)",
+ "Conigure Access Control Class ramping\n"
+ "Configure Access Control Class ramping step interval\n"
+ "Set a fixed step interval (in seconds)\n"
+ "Use dynamic step interval based on BTS channel load (this is the default)\n")
+{
+ struct gsm_bts *bts = vty->index;
+ bool dynamic = (strcmp(argv[0], "dynamic") == 0);
+ int error;
+
+ if (dynamic) {
+ acc_ramp_set_step_interval_dynamic(&bts->acc_ramp);
+ return CMD_SUCCESS;
+ }
+
+ error = acc_ramp_set_step_interval(&bts->acc_ramp, atoi(argv[0]));
+ if (error != 0) {
+ if (error == -ERANGE)
+ vty_out(vty, "Unable to set ACC ramp step interval: value out of range%s", VTY_NEWLINE);
+ else
+ vty_out(vty, "Unable to set ACC ramp step interval: unknown error%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ return CMD_SUCCESS;
+}
+
#define EXCL_RFLOCK_STR "Exclude this BTS from the global RF Lock\n"
@@ -4466,6 +4498,7 @@ int bsc_vty_init(struct gsm_network *network)
install_element(BTS_NODE, &cfg_bts_amr_hr_start_mode_cmd);
install_element(BTS_NODE, &cfg_bts_pcu_sock_cmd);
install_element(BTS_NODE, &cfg_bts_acc_ramping_cmd);
+ install_element(BTS_NODE, &cfg_bts_acc_ramping_step_interval_cmd);
/* See also handover commands added on bts level from handover_vty.c */
install_element(BTS_NODE, &cfg_trx_cmd);