[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 13:51:15 UTC 2018


Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/7574

to look at the new patch set (#2).

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.

Keep the semantics of the 'oml-connection-status' control
interface command intact, i.e. report OML status "degraded"
if the OML link is UP but RSL link status is not "connected".
There are TTCN3 tests which depend on this behaviour.

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, 48 insertions(+), 6 deletions(-)


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

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..d79ba14 100644
--- a/src/libbsc/bts_ipaccess_nanobts.c
+++ b/src/libbsc/bts_ipaccess_nanobts.c
@@ -47,12 +47,33 @@
 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_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";
+}
+
 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";
+	/* Control interface users expect to see "degraded" if OML is UP but RSL is (partly) down. */
+	return get_rsl_status(bts);
 }
 
 struct gsm_bts_model bts_model_nanobts = {
@@ -61,6 +82,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 +356,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: newpatchset
Gerrit-Change-Id: I4bd0821503fc4407dbee8cb489675c19384de5cb
Gerrit-PatchSet: 2
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list