aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libbsc/bsc_rf_ctrl.c
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2012-07-20 10:27:31 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2013-01-28 15:41:26 +0100
commite30d40de0e0b9b55c551d87015a791d4a9bc418b (patch)
tree6c377ffc41bc26eec21d52a16fbecea061172c02 /openbsc/src/libbsc/bsc_rf_ctrl.c
parente7ea08379e1b8aa13e6db52558fbdd17002d0e3e (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.c28
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);
}