aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2017-11-29 12:18:02 +0100
committerMax <msuraev@sysmocom.de>2017-11-29 12:18:02 +0100
commitaa954cd10fc5235f334b389cdeeec93e8e0452de (patch)
tree99c9fe63168e6df5d88aebf59b7721a00ebdc97d
parente8dda5f296106ff6b79875cc24f25cf23e928c6b (diff)
OML: consider administrative state when reporting
Report state as degraded if BTS or any of its TRX are administratively locked. Change-Id: Ic9ee998d972ca870ce5d039c3ed95edb6ba8b36f Related: OS#2486
-rw-r--r--include/osmocom/bsc/abis_nm.h2
-rw-r--r--src/libbsc/abis_nm.c7
-rw-r--r--src/libbsc/bts_ipaccess_nanobts.c2
3 files changed, 8 insertions, 3 deletions
diff --git a/include/osmocom/bsc/abis_nm.h b/include/osmocom/bsc/abis_nm.h
index e25cb4fdf..b0cb16669 100644
--- a/include/osmocom/bsc/abis_nm.h
+++ b/include/osmocom/bsc/abis_nm.h
@@ -162,7 +162,7 @@ int ipac_parse_bcch_info(struct ipac_bcch_info *binf, uint8_t *buf);
const char *ipacc_testres_name(uint8_t res);
/* Functions calling into other code parts */
-bool all_trx_rsl_connected(const struct gsm_bts *bts);
+bool all_trx_rsl_connected_unlocked(const struct gsm_bts *bts);
int nm_is_running(struct gsm_nm_state *s);
int abis_nm_vty_init(void);
diff --git a/src/libbsc/abis_nm.c b/src/libbsc/abis_nm.c
index b7391a168..295cefde2 100644
--- a/src/libbsc/abis_nm.c
+++ b/src/libbsc/abis_nm.c
@@ -683,13 +683,18 @@ static int abis_nm_rx_lmt_event(struct msgb *mb)
return 0;
}
-bool all_trx_rsl_connected(const struct gsm_bts *bts)
+bool all_trx_rsl_connected_unlocked(const struct gsm_bts *bts)
{
const struct gsm_bts_trx *trx;
+ if (bts->mo.nm_state.administrative == NM_STATE_LOCKED)
+ return false;
+
llist_for_each_entry(trx, &bts->trx_list, list) {
if (!trx->rsl_link)
return false;
+ if (trx->mo.nm_state.administrative == NM_STATE_LOCKED)
+ return false;
}
return true;
diff --git a/src/libbsc/bts_ipaccess_nanobts.c b/src/libbsc/bts_ipaccess_nanobts.c
index 9e273f5f2..03bb7084f 100644
--- a/src/libbsc/bts_ipaccess_nanobts.c
+++ b/src/libbsc/bts_ipaccess_nanobts.c
@@ -50,7 +50,7 @@ static void bts_model_nanobts_e1line_bind_ops(struct e1inp_line *line);
static char *get_oml_status(const struct gsm_bts *bts)
{
if (bts->oml_link)
- return all_trx_rsl_connected(bts) ? "connected" : "degraded";
+ return all_trx_rsl_connected_unlocked(bts) ? "connected" : "degraded";
return "disconnected";
}