[PATCH] osmo-bsc[master]: separate reporting of RSL link status and OML link status

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Stefan Sperling gerrit-no-reply at lists.osmocom.org
Thu Mar 29 11:43:03 UTC 2018


Review at  https://gerrit.osmocom.org/7574

separate reporting of RSL link status and OML link status

There is currently no way to observe OML and RSL link
status of a BTS in isolation via VTY or control interface.
We will need this distinction in order to write a test for
issue OS#2719. Provide separate indication of OML and RSL
link status in VTY and control interfaces.

Also, take the OML_UP/RSL_UP flags into consideration when
reporting link status. Previously, these flags were only
used to avoid sending more than one S_L_INP_TEI_UP signal.

Change-Id: I4bd0821503fc4407dbee8cb489675c19384de5cb
Related: OS#2719
---
M include/osmocom/bsc/gsm_data.h
M src/libbsc/abis_nm.c
M src/libbsc/bsc_ctrl_commands.c
M src/libbsc/bsc_vty.c
M src/libbsc/bts_ipaccess_nanobts.c
5 files changed, 47 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/74/7574/1

diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 8caedff..a11ca64 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -612,6 +612,7 @@
 	int (*start)(struct gsm_network *net);
 	int (*oml_rcvmsg)(struct msgb *msg);
 	char * (*oml_status)(const struct gsm_bts *bts);
+	char * (*rsl_status)(const struct gsm_bts *bts);
 
 	void (*e1line_bind_ops)(struct e1inp_line *line);
 
@@ -1377,6 +1378,7 @@
 extern const struct value_string bts_type_descs[_NUM_GSM_BTS_TYPE+1];
 
 char *get_model_oml_status(const struct gsm_bts *bts);
+char *get_model_rsl_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 2ee2e24..a4e8300 100644
--- a/src/libbsc/abis_nm.c
+++ b/src/libbsc/abis_nm.c
@@ -719,6 +719,14 @@
 	return "unknown";
 }
 
+char *get_model_rsl_status(const struct gsm_bts *bts)
+{
+	if (bts->model->rsl_status)
+		return bts->model->rsl_status(bts);
+
+	return "unknown";
+}
+
 void abis_nm_queue_send_next(struct gsm_bts *bts)
 {
 	int wait = 0;
diff --git a/src/libbsc/bsc_ctrl_commands.c b/src/libbsc/bsc_ctrl_commands.c
index 64f4589..1c1e285 100644
--- a/src/libbsc/bsc_ctrl_commands.c
+++ b/src/libbsc/bsc_ctrl_commands.c
@@ -264,6 +264,17 @@
 
 CTRL_CMD_DEFINE_RO(bts_oml_conn, "oml-connection-state");
 
+static int get_bts_rsl_conn(struct ctrl_cmd *cmd, void *data)
+{
+	const struct gsm_bts *bts = cmd->node;
+
+	cmd->reply = get_model_rsl_status(bts);
+
+	return CTRL_CMD_REPLY;
+}
+
+CTRL_CMD_DEFINE_RO(bts_rsl_conn, "rsl-connection-state");
+
 static int get_bts_oml_up(struct ctrl_cmd *cmd, void *data)
 {
 	const struct gsm_bts *bts = cmd->node;
@@ -487,6 +498,7 @@
 	rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_si);
 	rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_chan_load);
 	rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_oml_conn);
+	rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_rsl_conn);
 	rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_oml_up);
 	rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_gprs_mode);
 	rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_rf_state);
diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c
index 6daeb98..e66a126 100644
--- a/src/libbsc/bsc_vty.c
+++ b/src/libbsc/bsc_vty.c
@@ -441,6 +441,7 @@
 			vty_out(vty, " %llu days %llu hours %llu min. %llu sec.",
 				OSMO_SEC2DAY(sec), OSMO_SEC2HRS(sec), OSMO_SEC2MIN(sec), sec % 60);
 		vty_out(vty, "%s", VTY_NEWLINE);
+		vty_out(vty, "  RSL Link state: %s%s", get_model_rsl_status(bts), VTY_NEWLINE);
 	} else {
 		vty_out(vty, "  E1 Signalling Link:%s", VTY_NEWLINE);
 		e1isl_dump_vty(vty, bts->oml_link);
diff --git a/src/libbsc/bts_ipaccess_nanobts.c b/src/libbsc/bts_ipaccess_nanobts.c
index a3f7919..1a4dfa0 100644
--- a/src/libbsc/bts_ipaccess_nanobts.c
+++ b/src/libbsc/bts_ipaccess_nanobts.c
@@ -47,12 +47,32 @@
 static int bts_model_nanobts_start(struct gsm_network *net);
 static void bts_model_nanobts_e1line_bind_ops(struct e1inp_line *line);
 
+#define OML_UP         0x0001
+#define RSL_UP         0x0002
+
 static char *get_oml_status(const struct gsm_bts *bts)
 {
-	if (bts->oml_link)
-		return all_trx_rsl_connected_unlocked(bts) ? "connected" : "degraded";
+	if (bts->oml_link == NULL || (bts->ip_access.flags & OML_UP) == 0)
+		return "disconnected";
 
-	return "disconnected";
+	return "connected";
+}
+
+static char *get_rsl_status(const struct gsm_bts *bts)
+{
+	struct gsm_bts_trx *trx;
+	int ntrx_up = 0;
+
+	llist_for_each_entry(trx, &bts->trx_list, list) {
+		if (bts->ip_access.flags & (RSL_UP << trx->nr))
+			ntrx_up++;
+	}
+	if (ntrx_up == 0)
+		return "disconnected";
+	else if (ntrx_up < bts->num_trx)
+		return "degraded";
+
+	return all_trx_rsl_connected_unlocked(bts) ? "connected" : "degraded";
 }
 
 struct gsm_bts_model bts_model_nanobts = {
@@ -61,6 +81,7 @@
 	.start = bts_model_nanobts_start,
 	.oml_rcvmsg = &abis_nm_rcvmsg,
 	.oml_status = &get_oml_status,
+	.rsl_status = &get_rsl_status,
 	.e1line_bind_ops = bts_model_nanobts_e1line_bind_ops, 
 	.nm_att_tlvdef = {
 		.def = {
@@ -334,9 +355,6 @@
 
 	return gsm_bts_model_register(&bts_model_nanobts);
 }
-
-#define OML_UP         0x0001
-#define RSL_UP         0x0002
 
 static struct gsm_bts *
 find_bts_by_unitid(struct gsm_network *net, uint16_t site_id, uint16_t bts_id)

-- 
To view, visit https://gerrit.osmocom.org/7574
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4bd0821503fc4407dbee8cb489675c19384de5cb
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de>



More information about the gerrit-log mailing list