[PATCH] osmo-bsc[master]: ctrl: add oml-uptime command

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/.

Max gerrit-no-reply at lists.osmocom.org
Tue Oct 10 13:22:58 UTC 2017


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

ctrl: add oml-uptime command

Expose OML link uptime available via vts's "sh bts 0" command with the
new "bts.0.oml-uptime" ctrl command. To avoid code duplication, move
uptime computation into separate function and use it for both.

Change-Id: Iec405aa949d6a38a9c8e64cd7ee4b49fd416835d
Related: OS#2486
---
M include/osmocom/bsc/gsm_data.h
M src/libbsc/bsc_ctrl_commands.c
M src/libbsc/bsc_init.c
M src/libbsc/bsc_vty.c
4 files changed, 43 insertions(+), 13 deletions(-)


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

diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 429526d..51b2c98 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -657,6 +657,8 @@
 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);
+
 /* control interface handling */
 int bsc_base_ctrl_cmds_install(void);
 
diff --git a/src/libbsc/bsc_ctrl_commands.c b/src/libbsc/bsc_ctrl_commands.c
index d925e67..2d6fcb6 100644
--- a/src/libbsc/bsc_ctrl_commands.c
+++ b/src/libbsc/bsc_ctrl_commands.c
@@ -240,6 +240,21 @@
 
 CTRL_CMD_DEFINE_RO(bts_oml_conn, "oml-connection-state");
 
+static int get_bts_oml_up(struct ctrl_cmd *cmd, void *data)
+{
+	const struct gsm_bts *bts = cmd->node;
+
+	cmd->reply = talloc_asprintf(cmd, "%llu", bts_uptime(bts));
+	if (!cmd->reply) {
+		cmd->reply = "OOM";
+		return CTRL_CMD_ERROR;
+	}
+
+	return CTRL_CMD_REPLY;
+}
+
+CTRL_CMD_DEFINE_RO(bts_oml_up, "oml-uptime");
+
 static int verify_bts_gprs_mode(struct ctrl_cmd *cmd, const char *value, void *_data)
 {
 	int valid;
@@ -450,6 +465,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_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_init.c b/src/libbsc/bsc_init.c
index f5f265f..674813c 100644
--- a/src/libbsc/bsc_init.c
+++ b/src/libbsc/bsc_init.c
@@ -37,6 +37,8 @@
 #include <osmocom/bsc/e1_config.h>
 #include <osmocom/bsc/common_bsc.h>
 #include <osmocom/bsc/pcu_if.h>
+
+#include <time.h>
 #include <limits.h>
 #include <stdbool.h>
 
@@ -98,6 +100,24 @@
 	return 0;
 }
 
+unsigned long long bts_uptime(const struct gsm_bts *bts)
+{
+	struct timespec tp;
+
+	if (!bts->uptime || !bts->oml_link) {
+		LOGP(DNM, LOGL_ERROR, "BTS %u OML link uptime unavailable\n", bts->nr);
+		return 0;
+	}
+
+	if (clock_gettime(CLOCK_MONOTONIC, &tp) != 0) {
+		LOGP(DNM, LOGL_ERROR, "BTS %u uptime computation failure: %s\n", bts->nr, strerror(errno));
+		return 0;
+	}
+
+	/* monotonic clock helps to ensure that the conversion is valid */
+	return difftime(tp.tv_sec, bts->uptime);
+}
+
 static int rsl_si(struct gsm_bts_trx *trx, enum osmo_sysinfo_type i, int si_len)
 {
 	struct gsm_bts *bts = trx->bts;
diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c
index 43cb282..ca29b4c 100644
--- a/src/libbsc/bsc_vty.c
+++ b/src/libbsc/bsc_vty.c
@@ -236,8 +236,6 @@
 {
 	struct pchan_load pl;
 	unsigned long long sec;
-	struct timespec tp;
-	int rc;
 
 	vty_out(vty, "BTS %u is of %s type in band %s, has CI %u LAC %u, "
 		"BSIC %u (NCC=%u, BCC=%u) and %u TRX%s",
@@ -309,17 +307,11 @@
 		bts->paging.available_slots, VTY_NEWLINE);
 	if (is_ipaccess_bts(bts)) {
 		vty_out(vty, "  OML Link state: %s", get_model_oml_status(bts));
-		if (bts->oml_link) {
-			if (bts->uptime) {
-				rc = clock_gettime(CLOCK_MONOTONIC, &tp);
-				if (rc == 0) { /* monotonic clock helps to ensure that conversion below is valid */
-					sec = (unsigned long long)difftime(tp.tv_sec, bts->uptime);
-					vty_out(vty, " %llu days %llu hours %llu min. %llu sec.%s",
-						OSMO_SEC2DAY(sec), OSMO_SEC2HRS(sec), OSMO_SEC2MIN(sec),
-						sec % 60, VTY_NEWLINE);
-				}
-			}
-		}
+		sec = bts_uptime(bts);
+		if (sec)
+			vty_out(vty, " %llu days %llu hours %llu min. %llu sec.%s",
+				OSMO_SEC2DAY(sec), OSMO_SEC2HRS(sec), OSMO_SEC2MIN(sec), sec % 60,
+				VTY_NEWLINE);
 	} else {
 		vty_out(vty, "  E1 Signalling Link:%s", VTY_NEWLINE);
 		e1isl_dump_vty(vty, bts->oml_link);

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iec405aa949d6a38a9c8e64cd7ee4b49fd416835d
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>



More information about the gerrit-log mailing list