laforge has submitted this change. (
https://gerrit.osmocom.org/c/osmo-bsc/+/35566?usp=email )
Change subject: Also track downtime when OML link is lost
......................................................................
Also track downtime when OML link is lost
This will be used in a later patch to dertemine when a BTS became
offline.
Related: OS#6018
Change-Id: I1776099cbfef51af1d5a3a056fb0654abd7366a9
---
M include/osmocom/bsc/bts.h
M src/osmo-bsc/bts.c
M src/osmo-bsc/bts_ctrl.c
M src/osmo-bsc/bts_ipaccess_nanobts.c
M src/osmo-bsc/bts_vty.c
M src/osmo-bsc/e1_config.c
6 files changed, 30 insertions(+), 13 deletions(-)
Approvals:
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
fixeria: Looks good to me, approved
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index a1799eb..e9634ee 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -375,8 +375,8 @@
struct e1inp_sign_link *oml_link;
/* Timer to use for deferred drop of OML link, see \ref ipaccess_drop_oml_deferred */
struct osmo_timer_list oml_drop_link_timer;
- /* when OML link was established */
- time_t uptime;
+ /* when OML link was established or lost */
+ time_t updowntime;
/* Abis network management O&M handle */
struct abis_nm_h *nmh;
@@ -815,7 +815,7 @@
#define BTS_STORE_UPTIME_INTERVAL 10 /* in seconds */
void bts_store_uptime(struct gsm_bts *bts);
-unsigned long long bts_uptime(const struct gsm_bts *bts);
+unsigned long long bts_updowntime(const struct gsm_bts *bts);
#define BTS_STORE_LCHAN_DURATIONS_INTERVAL 1 /* in seconds */
void bts_store_lchan_durations(struct gsm_bts *bts);
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index 733d16e..8cc9e9a 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -766,7 +766,8 @@
void bts_store_uptime(struct gsm_bts *bts)
{
- osmo_stat_item_set(osmo_stat_item_group_get_item(bts->bts_statg,
BTS_STAT_UPTIME_SECONDS), bts_uptime(bts));
+ osmo_stat_item_set(osmo_stat_item_group_get_item(bts->bts_statg,
BTS_STAT_UPTIME_SECONDS),
+ bts->oml_link ? bts_updowntime(bts) : 0);
}
void bts_store_lchan_durations(struct gsm_bts *bts)
@@ -824,20 +825,20 @@
rate_ctr_add(rate_ctr_group_get_ctr(bts->bts_ctrs,
BTS_CTR_CHAN_SDCCH_ACTIVE_MILLISECONDS_TOTAL), elapsed_sdcch_ms);
}
-unsigned long long bts_uptime(const struct gsm_bts *bts)
+unsigned long long bts_updowntime(const struct gsm_bts *bts)
{
struct timespec tp;
- if (!bts->uptime || !bts->oml_link)
+ if (!bts->updowntime)
return 0;
if (osmo_clock_gettime(CLOCK_MONOTONIC, &tp) != 0) {
- LOGP(DNM, LOGL_ERROR, "BTS %u uptime computation failure: %s\n", bts->nr,
strerror(errno));
+ LOGP(DNM, LOGL_ERROR, "BTS %u uptime/downtime 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);
+ return difftime(tp.tv_sec, bts->updowntime);
}
char *get_model_oml_status(const struct gsm_bts *bts)
diff --git a/src/osmo-bsc/bts_ctrl.c b/src/osmo-bsc/bts_ctrl.c
index acbe68a..9c14190 100644
--- a/src/osmo-bsc/bts_ctrl.c
+++ b/src/osmo-bsc/bts_ctrl.c
@@ -372,7 +372,7 @@
{
const struct gsm_bts *bts = cmd->node;
- cmd->reply = talloc_asprintf(cmd, "%llu", bts_uptime(bts));
+ cmd->reply = talloc_asprintf(cmd, "%llu", bts->oml_link ?
bts_updowntime(bts) : 0);
if (!cmd->reply) {
cmd->reply = "OOM";
return CTRL_CMD_ERROR;
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts.c b/src/osmo-bsc/bts_ipaccess_nanobts.c
index c690b46..b0532e5 100644
--- a/src/osmo-bsc/bts_ipaccess_nanobts.c
+++ b/src/osmo-bsc/bts_ipaccess_nanobts.c
@@ -527,6 +527,8 @@
struct gsm_bts_trx_ts *ts ;
uint8_t tn;
uint8_t i;
+ struct timespec tp;
+ int rc;
/* First of all, remove deferred drop if enabled */
osmo_timer_del(&bts->oml_drop_link_timer);
@@ -537,7 +539,8 @@
LOG_BTS(bts, DLINP, LOGL_NOTICE, "Dropping OML link: %s\n", reason);
e1inp_sign_link_destroy(bts->oml_link);
bts->oml_link = NULL;
- bts->uptime = 0;
+ rc = osmo_clock_gettime(CLOCK_MONOTONIC, &tp);
+ bts->updowntime = (rc < 0) ? 0 : tp.tv_sec; /* we don't need sub-second
precision for downtime */
osmo_stat_item_dec(osmo_stat_item_group_get_item(bts->bts_statg,
BTS_STAT_OML_CONNECTED), 1);
gsm_bts_stats_reset(bts);
@@ -710,7 +713,7 @@
E1INP_SIGN_OML, bts->c0,
bts->oml_tei, 0);
rc = osmo_clock_gettime(CLOCK_MONOTONIC, &tp);
- bts->uptime = (rc < 0) ? 0 : tp.tv_sec; /* we don't need sub-second precision
for uptime */
+ bts->updowntime = (rc < 0) ? 0 : tp.tv_sec; /* we don't need sub-second
precision for uptime */
if (!(sign_link->trx->bts->ip_access.flags & OML_UP)) {
e1inp_event(sign_link->ts, S_L_INP_TEI_UP,
sign_link->tei, sign_link->sapi);
diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c
index 8b97dce..8aa1f89 100644
--- a/src/osmo-bsc/bts_vty.c
+++ b/src/osmo-bsc/bts_vty.c
@@ -4127,7 +4127,7 @@
vty_out(vty, " OML Link state: %s", get_model_oml_status(bts));
if (bts_setup_ramp_active(bts->network))
vty_out(vty, " BTS Ramping: %s", bts_setup_ramp_get_state_str(bts));
- sec = bts_uptime(bts);
+ sec = bts_updowntime(bts);
if (sec)
vty_out(vty, " %llu days %llu hours %llu min. %llu sec.",
OSMO_SEC2DAY(sec), OSMO_SEC2HRS(sec), OSMO_SEC2MIN(sec), sec % 60);
diff --git a/src/osmo-bsc/e1_config.c b/src/osmo-bsc/e1_config.c
index db77234..dbea3e9 100644
--- a/src/osmo-bsc/e1_config.c
+++ b/src/osmo-bsc/e1_config.c
@@ -197,7 +197,7 @@
e1inp_sign_link_destroy(bts->oml_link);
bts->oml_link = oml_link;
rc = osmo_clock_gettime(CLOCK_MONOTONIC, &tp);
- bts->uptime = (rc < 0) ? 0 : tp.tv_sec; /* we don't need sub-second precision
for uptime */
+ bts->updowntime = (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/c/osmo-bsc/+/35566?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I1776099cbfef51af1d5a3a056fb0654abd7366a9
Gerrit-Change-Number: 35566
Gerrit-PatchSet: 3
Gerrit-Owner: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged