[MERGED] osmo-bsc[master]: Show OML link uptime in vty

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
Wed Sep 27 10:53:28 UTC 2017


Max has submitted this change and it was merged.

Change subject: Show OML link uptime in vty
......................................................................


Show OML link uptime in vty

Save the time when OML link to BTS was established and show it in
vty. That's useful when troubleshooting issues like periodic/sporadic
BTS restart.

Related: SYS#3889
Change-Id: I9e4e8504afe8ca467b68d41826f61654e24d9600
---
M include/osmocom/bsc/gsm_data_shared.h
M src/libbsc/bsc_vty.c
M src/libbsc/bts_ipaccess_nanobts.c
M src/libbsc/e1_config.c
4 files changed, 31 insertions(+), 3 deletions(-)

Approvals:
  Pau Espin Pedrol: Looks good to me, but someone else must approve
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/bsc/gsm_data_shared.h b/include/osmocom/bsc/gsm_data_shared.h
index 6ce571e..f41bac4 100644
--- a/include/osmocom/bsc/gsm_data_shared.h
+++ b/include/osmocom/bsc/gsm_data_shared.h
@@ -722,6 +722,8 @@
 	struct gsm_e1_subslot oml_e1_link;
 	uint8_t oml_tei;
 	struct e1inp_sign_link *oml_link;
+	/* when OML link was established */
+	time_t uptime;
 
 	/* Abis network management O&M handle */
 	struct abis_nm_h *nmh;
diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c
index 3a80f06..f1c78c8 100644
--- a/src/libbsc/bsc_vty.c
+++ b/src/libbsc/bsc_vty.c
@@ -20,6 +20,7 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include <unistd.h>
+#include <time.h>
 
 #include <osmocom/vty/command.h>
 #include <osmocom/vty/buffer.h>
@@ -234,6 +235,9 @@
 static void bts_dump_vty(struct vty *vty, struct gsm_bts *bts)
 {
 	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",
@@ -304,8 +308,20 @@
 		paging_pending_requests_nr(bts),
 		bts->paging.available_slots, VTY_NEWLINE);
 	if (is_ipaccess_bts(bts)) {
-		vty_out(vty, "  OML Link state: %s.%s",
-			bts->oml_link ? "connected" : "disconnected", VTY_NEWLINE);
+		vty_out(vty, "  OML Link state: ");
+		if (bts->oml_link) {
+			vty_out(vty, "connected");
+			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);
+				}
+			}
+		} else
+			vty_out(vty, "disconnected.%s", 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 1f203f5..87ec7b2 100644
--- a/src/libbsc/bts_ipaccess_nanobts.c
+++ b/src/libbsc/bts_ipaccess_nanobts.c
@@ -20,6 +20,7 @@
  */
 
 #include <arpa/inet.h>
+#include <time.h>
 
 #include <osmocom/gsm/tlv.h>
 
@@ -364,6 +365,7 @@
 
 	e1inp_sign_link_destroy(bts->oml_link);
 	bts->oml_link = NULL;
+	bts->uptime = 0;
 
 	/* we have issues reconnecting RSL, drop everything. */
 	llist_for_each_entry(trx, &bts->trx_list, list)
@@ -395,6 +397,8 @@
 	struct gsm_bts *bts;
 	struct ipaccess_unit *dev = unit_data;
 	struct e1inp_sign_link *sign_link = NULL;
+	struct timespec tp;
+	int rc;
 
 	bts = find_bts_by_unitid(bsc_gsmnet, dev->site_id, dev->bts_id);
 	if (!bts) {
@@ -423,6 +427,8 @@
 			e1inp_sign_link_create(&line->ts[E1INP_SIGN_OML - 1],
 						E1INP_SIGN_OML, bts->c0,
 						bts->oml_tei, 0);
+		rc = clock_gettime(CLOCK_MONOTONIC, &tp);
+		bts->uptime = (rc < 0) ? 0 : tp.tv_sec; /* we don't need sub-second precision for uptime */
 		break;
 	case E1INP_SIGN_RSL: {
 		struct e1inp_ts *ts;
diff --git a/src/libbsc/e1_config.c b/src/libbsc/e1_config.c
index 1923efd..3656315 100644
--- a/src/libbsc/e1_config.c
+++ b/src/libbsc/e1_config.c
@@ -20,7 +20,7 @@
 
 #include <string.h>
 #include <errno.h>
-
+#include <time.h>
 #include <netinet/in.h>
 
 #include <osmocom/bsc/gsm_data.h>
@@ -160,6 +160,8 @@
 	struct e1inp_line *line;
 	struct e1inp_sign_link *oml_link;
 	struct gsm_bts_trx *trx;
+	struct timespec tp;
+	int rc;
 
 	DEBUGP(DLMI, "e1_reconfig_bts(%u)\n", bts->nr);
 
@@ -201,6 +203,8 @@
 	if (bts->oml_link)
 		e1inp_sign_link_destroy(bts->oml_link);
 	bts->oml_link = oml_link;
+	rc = clock_gettime(CLOCK_MONOTONIC, &tp);
+	bts->uptime = (rc < 0) ? 0 : tp.tv_sec; /* we don't need sub-second precision for uptime */
 
 	llist_for_each_entry(trx, &bts->trx_list, list)
 		e1_reconfig_trx(trx);

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I9e4e8504afe8ca467b68d41826f61654e24d9600
Gerrit-PatchSet: 5
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>



More information about the gerrit-log mailing list