From 8b8121dcc9e11c099f7558b25c5f384eaeb8e91a Mon Sep 17 00:00:00 2001 From: Stefan Sperling Date: Tue, 6 Feb 2018 19:28:45 +0100 Subject: add a VTY option to enable/disable acc ramding Change-Id: I1cb10ccf56eed5daf8bd224011491061e15dad8f --- include/osmocom/bsc/acc_ramp.h | 8 ++++---- include/osmocom/bsc/gsm_data_shared.h | 1 + src/libbsc/acc_ramp.c | 4 ++-- src/libbsc/bsc_vty.c | 28 ++++++++++++++++++++++++++++ src/libcommon/gsm_data_shared.c | 4 ++-- 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/include/osmocom/bsc/acc_ramp.h b/include/osmocom/bsc/acc_ramp.h index 46a14c869..a02db15b7 100644 --- a/include/osmocom/bsc/acc_ramp.h +++ b/include/osmocom/bsc/acc_ramp.h @@ -82,13 +82,13 @@ struct acc_ramp { * * The BTS which uses this ACC ramp must be provided as well. * - * If 'ramping_enabled' is true, all ACCs are denied by default. + * If 'bts->acc_ramping_enabled' is true, all ACCs are denied by default. * A subsequent call to acc_ramp_start() will begin the ramping process. * - * If 'ramping_enabled' is false, all ACCs will be allowed by default, and - * there is no need to do anything else. + * If 'bts->acc_ramping_enabled' is false, all ACCs will be allowed by default, + * and there is no need to do anything else. */ -void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts, bool ramping_enabled); +void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts); /* Change the ramping step size. Returns negative on error (step_size out of range), else zero. */ int acc_ramp_set_step_size(struct acc_ramp *acc_ramp, enum acc_ramp_step_size step_size); diff --git a/include/osmocom/bsc/gsm_data_shared.h b/include/osmocom/bsc/gsm_data_shared.h index 9fa6d8318..6af397d5f 100644 --- a/include/osmocom/bsc/gsm_data_shared.h +++ b/include/osmocom/bsc/gsm_data_shared.h @@ -790,6 +790,7 @@ struct gsm_bts { /* access control class ramping */ struct acc_ramp acc_ramp; + bool acc_ramping_enabled; /* exclude the BTS from the global RF Lock handling */ int excl_from_rf_lock; diff --git a/src/libbsc/acc_ramp.c b/src/libbsc/acc_ramp.c index a84b704f1..27103bcda 100644 --- a/src/libbsc/acc_ramp.c +++ b/src/libbsc/acc_ramp.c @@ -131,7 +131,7 @@ static void do_ramping_step(void *data) osmo_timer_schedule(&acc_ramp->step_timer, get_next_step_interval(acc_ramp), 0); } -void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts, bool ramping_enabled) +void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts) { acc_ramp->bts = bts; acc_ramp->step_size = ACC_RAMP_STEP_SIZE_DEFAULT; @@ -139,7 +139,7 @@ void acc_ramp_init(struct acc_ramp *acc_ramp, struct gsm_bts *bts, bool ramping_ acc_ramp->step_interval_is_fixed = false; osmo_timer_setup(&acc_ramp->step_timer, do_ramping_step, acc_ramp); - if (ramping_enabled) + if (bts->acc_ramping_enabled) deny_all_accs(acc_ramp); else allow_all_accs(acc_ramp); diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c index 3da474594..133c89ff4 100644 --- a/src/libbsc/bsc_vty.c +++ b/src/libbsc/bsc_vty.c @@ -61,6 +61,7 @@ #include #include #include +#include #include @@ -3105,6 +3106,32 @@ DEFUN(cfg_bts_pcu_sock, cfg_bts_pcu_sock_cmd, return CMD_SUCCESS; } +DEFUN(cfg_bts_acc_ramping, + cfg_bts_acc_ramping_cmd, + "acc-ramping enabled (0|1)", + "Enable or disable Access Control Class ramping\n" + "Disable Access Control Class ramping\n" + "Enable Access Control Class ramping\n") +{ + struct gsm_bts *bts = vty->index; + bool was_enabled = bts->acc_ramping_enabled; + bool enable = atoi(argv[0]); + + bts->acc_ramping_enabled = enable ? true : false; + if (was_enabled && !bts->acc_ramping_enabled) { + struct gsm_bts_trx *trx; + acc_ramp_abort(&bts->acc_ramp); + acc_ramp_init(&bts->acc_ramp, bts); + llist_for_each_entry_reverse(trx, &bts->trx_list, list) + gsm_bts_trx_set_system_infos(trx); + } + + /* If ramping is now enabled, it only takes effect when the BTS reconnects. */ + + return CMD_SUCCESS; +} + + #define EXCL_RFLOCK_STR "Exclude this BTS from the global RF Lock\n" DEFUN(cfg_bts_excl_rf_lock, @@ -4436,6 +4463,7 @@ int bsc_vty_init(struct gsm_network *network) install_element(BTS_NODE, &cfg_bts_amr_hr_hyst3_cmd); 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); /* See also handover commands added on bts level from handover_vty.c */ install_element(BTS_NODE, &cfg_trx_cmd); diff --git a/src/libcommon/gsm_data_shared.c b/src/libcommon/gsm_data_shared.c index 246e7d79e..54f97cb14 100644 --- a/src/libcommon/gsm_data_shared.c +++ b/src/libcommon/gsm_data_shared.c @@ -390,14 +390,14 @@ struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, uint8_t bts_num) /* si handling */ bts->bcch_change_mark = 1; + bts->acc_ramping_enabled = false; + bts->chan_load_avg = 0; bts->ho = ho_cfg_init(bts, net->ho); /* timer overrides */ bts->T3122 = 0; /* not overriden by default */ - bts->chan_load_avg = 0; - return bts; } -- cgit v1.2.3