aboutsummaryrefslogtreecommitdiffstats
path: root/src/libbsc/abis_nm.c
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2017-10-09 17:12:53 +0200
committerMax <msuraev@sysmocom.de>2017-10-09 18:42:15 +0200
commit3d049d27f5ab8d1b51bf02e752349df83774066c (patch)
treeecd4f4c64a1a699a4c7eb5c8e4148eb50c1e505e /src/libbsc/abis_nm.c
parent081cebaa6ddf3abebb93025c7eb430f0c9844016 (diff)
OML: consider RSL link state
OML link state is available via vty ("sh bts 0" command) and ctrl ("oml-connection-state" RO variable). When showing OML link state, take into consideration RSL link state as well: if OML is up but RSL is missing show it as degraded. That's implemented via BTS model-specific functions (currently Sysmo- and Nano- BTS only) Change-Id: I5952fc59e4d82e0aa627ad91d20f964d9559a4c4 Related: OS#2486
Diffstat (limited to 'src/libbsc/abis_nm.c')
-rw-r--r--src/libbsc/abis_nm.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libbsc/abis_nm.c b/src/libbsc/abis_nm.c
index 9567cfa3a..f0dfe9e79 100644
--- a/src/libbsc/abis_nm.c
+++ b/src/libbsc/abis_nm.c
@@ -683,6 +683,34 @@ static int abis_nm_rx_lmt_event(struct msgb *mb)
return 0;
}
+static inline bool all_trx_rsl_connected(const struct gsm_bts *bts)
+{
+ const struct gsm_bts_trx *trx;
+
+ llist_for_each_entry(trx, &bts->trx_list, list) {
+ if (!trx->rsl_link)
+ return false;
+ }
+
+ return true;
+}
+
+char *get_oml_status(const struct gsm_bts *bts)
+{
+ if (bts->oml_link)
+ return all_trx_rsl_connected(bts) ? "connected" : "degraded";
+
+ return "disconnected";
+}
+
+char *get_model_oml_status(const struct gsm_bts *bts)
+{
+ if (bts->model->oml_status)
+ return bts->model->oml_status(bts);
+
+ return "unknown";
+}
+
void abis_nm_queue_send_next(struct gsm_bts *bts)
{
int wait = 0;