Check OML state per-BTS

To properly decide if a given OML link is degraded we have to use
BTS-specific information about MO state.

* move check function into BTS-specific part
* add generic wrapper

Related: OS#2486
Change-Id: Iddc7a4d20fbb95a6566eed1487a12733e5adb9e2
diff --git a/include/osmocom/bsc/abis_nm.h b/include/osmocom/bsc/abis_nm.h
index 34f16a9..e25cb4f 100644
--- a/include/osmocom/bsc/abis_nm.h
+++ b/include/osmocom/bsc/abis_nm.h
@@ -162,6 +162,7 @@
 const char *ipacc_testres_name(uint8_t res);
 
 /* Functions calling into other code parts */
+bool all_trx_rsl_connected(const struct gsm_bts *bts);
 int nm_is_running(struct gsm_nm_state *s);
 
 int abis_nm_vty_init(void);
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 51b2c98..74298b8 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -654,7 +654,6 @@
 extern const struct value_string bts_type_names[_NUM_GSM_BTS_TYPE+1];
 extern const struct value_string bts_type_descs[_NUM_GSM_BTS_TYPE+1];
 
-char *get_oml_status(const struct gsm_bts *bts);
 char *get_model_oml_status(const struct gsm_bts *bts);
 
 unsigned long long bts_uptime(const struct gsm_bts *bts);
diff --git a/src/libbsc/abis_nm.c b/src/libbsc/abis_nm.c
index f0dfe9e..b7391a1 100644
--- a/src/libbsc/abis_nm.c
+++ b/src/libbsc/abis_nm.c
@@ -683,7 +683,7 @@
 	return 0;
 }
 
-static inline bool all_trx_rsl_connected(const struct gsm_bts *bts)
+bool all_trx_rsl_connected(const struct gsm_bts *bts)
 {
 	const struct gsm_bts_trx *trx;
 
@@ -695,14 +695,6 @@
 	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)
diff --git a/src/libbsc/bts_ipaccess_nanobts.c b/src/libbsc/bts_ipaccess_nanobts.c
index dbb0e4f..9e273f5 100644
--- a/src/libbsc/bts_ipaccess_nanobts.c
+++ b/src/libbsc/bts_ipaccess_nanobts.c
@@ -47,6 +47,14 @@
 static int bts_model_nanobts_start(struct gsm_network *net);
 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 "disconnected";
+}
+
 struct gsm_bts_model bts_model_nanobts = {
 	.type = GSM_BTS_TYPE_NANOBTS,
 	.name = "nanobts",