Review at https://gerrit.osmocom.org/7732
trigger acc ramping based on trx rf-locked state Make ACC ramping listen to network management signals and trigger or abort ACC ramping based on the RF locked state of TRX 0. This works as expected with a virtphy setup when RF lock state is changed via VTY. However, this change still needs to be tested with a nanobts. It's also not quite clear yet whether operational state changes, as opposed to administrative ones, should be taken into account as well. Change-Id: I4124f1da3dadec003de45c1da8435506ee8f0a34 Depends: Ia25bff85d9e5c277da76bffa11d31972e9fdc323 --- M src/libbsc/acc_ramp.c M src/libbsc/bsc_vty.c 2 files changed, 46 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/32/7732/1 diff --git a/src/libbsc/acc_ramp.c b/src/libbsc/acc_ramp.c index e60f638..c1edfe2 100644 --- a/src/libbsc/acc_ramp.c +++ b/src/libbsc/acc_ramp.c @@ -26,6 +26,7 @@ #include <osmocom/bsc/debug.h> #include <osmocom/bsc/acc_ramp.h> #include <osmocom/bsc/gsm_data.h> +#include <osmocom/bsc/signal.h> /* * Check if an ACC has been permanently barred for a BTS, @@ -153,6 +154,49 @@ osmo_timer_schedule(&acc_ramp->step_timer, get_next_step_interval(acc_ramp), 0); } +/* Implements osmo_signal_cbfn() -- trigger or abort ACC ramping upon changes RF lock state. */ +static int acc_ramp_nm_sig_cb(unsigned int subsys, unsigned int signal, void *handler_data, void *signal_data) +{ + struct nm_statechg_signal_data *nsd = signal_data; + uint8_t obj_class = nsd->obj_class; + struct gsm_nm_state *new_state = nsd->new_state; + struct acc_ramp *acc_ramp = handler_data; + struct gsm_bts_trx *trx = NULL; + + if (subsys != SS_NM) + return 0; + + if (signal != S_NM_STATECHG_ADM) + return 0; + + if (obj_class != NM_OC_RADIO_CARRIER) + return 0; + + trx = nsd->obj; + + /* We only care about state changes of the first TRX. */ + if (trx->nr != 0) + return 0; + + /* RSL must already be up. We cannot send RACH system information to the BTS otherwise. */ + if (trx->rsl_link == NULL) + return 0; + + /* Trigger or abort ACC ramping based on the new 'RF lock' state of this TRX. */ + switch (new_state->administrative) { + case NM_STATE_UNLOCKED: + acc_ramp_trigger(acc_ramp); + break; + case NM_STATE_LOCKED: + acc_ramp_abort(acc_ramp); + break; + default: + break; + } + + return 0; +} + /*! * Initialize an acc_ramp data structure. * Storage for this structure must be provided by the caller. @@ -171,6 +215,7 @@ acc_ramp->step_interval_is_fixed = false; allow_all_enabled_accs(acc_ramp); osmo_timer_setup(&acc_ramp->step_timer, do_acc_ramping_step, acc_ramp); + osmo_signal_register_handler(SS_NM, acc_ramp_nm_sig_cb, acc_ramp); } /*! diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c index 797358d..68a474a 100644 --- a/src/libbsc/bsc_vty.c +++ b/src/libbsc/bsc_vty.c @@ -3277,7 +3277,7 @@ acc_ramp_enable(&bts->acc_ramp); - /* ACC ramping takes effect when the BTS reconnects. */ + /* ACC ramping takes effect when the BTS reconnects or RF administrative state changes to 'unlocked'. */ return CMD_SUCCESS; } -- To view, visit https://gerrit.osmocom.org/7732 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4124f1da3dadec003de45c1da8435506ee8f0a34 Gerrit-PatchSet: 1 Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Owner: Stefan Sperling <ssperl...@sysmocom.de>