diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2012-07-20 10:27:31 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2013-01-28 15:41:26 +0100 |
commit | e30d40de0e0b9b55c551d87015a791d4a9bc418b (patch) | |
tree | 6c377ffc41bc26eec21d52a16fbecea061172c02 /openbsc/src/libbsc/bsc_rf_ctrl.c | |
parent | e7ea08379e1b8aa13e6db52558fbdd17002d0e3e (diff) |
bts: Allow to exclude a BTS from the global RF lock handling
Some BTS might be in locations where they can run all the time,
allow to exclude them from the global lock handling.
Diffstat (limited to 'openbsc/src/libbsc/bsc_rf_ctrl.c')
-rw-r--r-- | openbsc/src/libbsc/bsc_rf_ctrl.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/openbsc/src/libbsc/bsc_rf_ctrl.c b/openbsc/src/libbsc/bsc_rf_ctrl.c index 87bf39de5..bd36e1884 100644 --- a/openbsc/src/libbsc/bsc_rf_ctrl.c +++ b/openbsc/src/libbsc/bsc_rf_ctrl.c @@ -1,8 +1,8 @@ /* RF Ctl handling socket */ /* (C) 2010 by Harald Welte <laforge@gnumonks.org> - * (C) 2010 by Holger Hans Peter Freyther <zecke@selfish.org> - * (C) 2010 by On-Waves + * (C) 2010-2012 by Holger Hans Peter Freyther <zecke@selfish.org> + * (C) 2010-2012 by On-Waves * All Rights Reserved * * This program is free software; you can redistribute it and/or modify @@ -129,6 +129,14 @@ static int lock_each_trx(struct gsm_network *net, int lock) llist_for_each_entry(bts, &net->bts_list, list) { struct gsm_bts_trx *trx; + + /* Exclude the BTS from the global lock */ + if (bts->excl_from_rf_lock) { + LOGP(DLINP, LOGL_DEBUG, + "Excluding BTS(%d) from trx lock.\n", bts->nr); + continue; + } + llist_for_each_entry(trx, &bts->trx_list, list) { gsm_trx_lock_rf(trx, lock); } @@ -176,6 +184,13 @@ static void handle_query(struct osmo_bsc_rf_conn *conn) llist_for_each_entry(bts, &conn->rf->gsm_network->bts_list, list) { struct gsm_bts_trx *trx; + + /* Exclude the BTS from the global lock */ + if (bts->excl_from_rf_lock) { + LOGP(DLINP, LOGL_DEBUG, + "Excluding BTS(%d) from query.\n", bts->nr); + continue; + } llist_for_each_entry(trx, &bts->trx_list, list) { if (trx->mo.nm_state.availability == NM_AVSTATE_OK && trx->mo.nm_state.operational != NM_OPSTATE_DISABLED) { @@ -200,6 +215,13 @@ static void rf_check_cb(void *_data) if (!bts->oml_link || !is_ipaccess_bts(bts)) continue; + /* Exclude the BTS from the global lock */ + if (bts->excl_from_rf_lock) { + LOGP(DLINP, LOGL_DEBUG, + "Excluding BTS(%d) from query.\n", bts->nr); + continue; + } + llist_for_each_entry(trx, &bts->trx_list, list) { if (trx->mo.nm_state.availability != NM_AVSTATE_OK || trx->mo.nm_state.operational != NM_OPSTATE_ENABLED || @@ -233,7 +255,7 @@ static void grace_timeout(void *_data) { struct osmo_bsc_rf *rf = (struct osmo_bsc_rf *) _data; - LOGP(DLINP, LOGL_NOTICE, "Grace timeout. Disabling the TRX.\n"); + LOGP(DLINP, LOGL_NOTICE, "Grace timeout. Going to disable all BTS/TRX.\n"); switch_rf_off(rf); } |