aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/bsc/acc_ramp.h8
-rw-r--r--include/osmocom/bsc/gsm_data_shared.h1
-rw-r--r--src/libbsc/acc_ramp.c4
-rw-r--r--src/libbsc/bsc_vty.c28
-rw-r--r--src/libcommon/gsm_data_shared.c4
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 <osmocom/bsc/handover_cfg.h>
#include <osmocom/bsc/handover_vty.h>
#include <osmocom/bsc/gsm_04_08_utils.h>
+#include <osmocom/bsc/acc_ramp.h>
#include <inttypes.h>
@@ -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;
}