Hello Harald Welte, Jenkins Builder,

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

    https://gerrit.osmocom.org/4008

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

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 openbsc/include/openbsc/gsm_data_shared.h
M openbsc/src/libbsc/bsc_vty.c
M openbsc/src/libbsc/bts_ipaccess_nanobts.c
M openbsc/src/libbsc/e1_config.c
4 files changed, 33 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/08/4008/3

diff --git a/openbsc/include/openbsc/gsm_data_shared.h 
b/openbsc/include/openbsc/gsm_data_shared.h
index 6b2269e..c19b125 100644
--- a/openbsc/include/openbsc/gsm_data_shared.h
+++ b/openbsc/include/openbsc/gsm_data_shared.h
@@ -715,6 +715,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/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index c6ff6d5..ada2f3c 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/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>
@@ -237,6 +238,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",
@@ -307,8 +311,22 @@
                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. since %s",
+                                               (sec % (60 * 60 * 24 * 365)) / 
(60 * 60 * 24),
+                                               (sec % (60 * 60 * 24)) / (60 * 
60),
+                                               (sec % (60 * 60)) / 60, sec % 
60, ctime(&(bts->uptime)));
+                               }
+                       }
+                       vty_out(vty, "%s", 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/openbsc/src/libbsc/bts_ipaccess_nanobts.c 
b/openbsc/src/libbsc/bts_ipaccess_nanobts.c
index a1bde77..64eb4f2 100644
--- a/openbsc/src/libbsc/bts_ipaccess_nanobts.c
+++ b/openbsc/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/openbsc/src/libbsc/e1_config.c b/openbsc/src/libbsc/e1_config.c
index d57dec5..92b2475 100644
--- a/openbsc/src/libbsc/e1_config.c
+++ b/openbsc/src/libbsc/e1_config.c
@@ -20,7 +20,7 @@
 
 #include <string.h>
 #include <errno.h>
-
+#include <time.h>
 #include <netinet/in.h>
 
 #include <openbsc/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/4008
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I9e4e8504afe8ca467b68d41826f61654e24d9600
Gerrit-PatchSet: 3
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: Max <[email protected]>
Gerrit-Reviewer: Harald Welte <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <[email protected]>

Reply via email to