aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Chemeris <Alexander.Chemeris@gmail.com>2020-05-07 01:39:21 +0300
committerAlexander Chemeris <Alexander.Chemeris@gmail.com>2020-05-07 01:39:21 +0300
commitd8835234c5436c0ce781ddbc02b1094fd6dfc4a3 (patch)
treed46acada44b4d3e551a9acb0e201854e06f5a8a8
parentef803ac96d779b7e9fcf95a32325d528554e41e8 (diff)
stats: Add a stats gauge for the MSC link status.
-rw-r--r--include/osmocom/bsc/gsm_data.h5
-rw-r--r--src/osmo-bsc/a_reset.c4
-rw-r--r--src/osmo-bsc/bsc_init.c13
3 files changed, 22 insertions, 0 deletions
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 11a4b5fc2..e85796cdf 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -1554,6 +1554,10 @@ static const struct rate_ctr_group_desc bsc_ctrg_desc = {
bsc_ctr_description,
};
+enum {
+ BSC_STAT_MSC_LINK,
+};
+
struct gsm_tz {
int override; /* if 0, use system's time zone instead. */
int hr; /* hour */
@@ -1581,6 +1585,7 @@ struct gsm_network {
} hodec2;
struct rate_ctr_group *bsc_ctrs;
+ struct osmo_stat_item_group *bsc_statg;
unsigned int num_bts;
struct llist_head bts_list;
diff --git a/src/osmo-bsc/a_reset.c b/src/osmo-bsc/a_reset.c
index 3f512781b..9d7be8585 100644
--- a/src/osmo-bsc/a_reset.c
+++ b/src/osmo-bsc/a_reset.c
@@ -71,7 +71,9 @@ static void fsm_disc_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data)
{
struct reset_ctx *reset_ctx = (struct reset_ctx *)fi->priv;
OSMO_ASSERT(reset_ctx);
+ struct bsc_msc_data *msc = reset_ctx->priv;
LOGPFSML(fi, LOGL_NOTICE, "SIGTRAN connection succeeded.\n");
+ osmo_stat_item_set(msc->network->bsc_statg->items[BSC_STAT_MSC_LINK], 1);
reset_ctx->conn_loss_counter = 0;
osmo_fsm_inst_state_chg(fi, ST_CONN, 0, 0);
@@ -86,7 +88,9 @@ static void fsm_conn_cb(struct osmo_fsm_inst *fi, uint32_t event, void *data)
switch (event) {
case EV_N_DISCONNECT:
if (reset_ctx->conn_loss_counter >= BAD_CONNECTION_THRESOLD) {
+ struct bsc_msc_data *msc = reset_ctx->priv;
LOGPFSML(fi, LOGL_NOTICE, "SIGTRAN connection down, reconnecting...\n");
+ osmo_stat_item_set(msc->network->bsc_statg->items[BSC_STAT_MSC_LINK], 0);
osmo_fsm_inst_state_chg(fi, ST_DISC, RESET_RESEND_INTERVAL, RESET_RESEND_TIMER_NO);
} else
reset_ctx->conn_loss_counter++;
diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c
index 18776f33d..9d0ee86f3 100644
--- a/src/osmo-bsc/bsc_init.c
+++ b/src/osmo-bsc/bsc_init.c
@@ -44,6 +44,18 @@
#include <limits.h>
#include <stdbool.h>
+static const struct osmo_stat_item_desc bsc_stat_desc[] = {
+ { "msc_link", "MSC link status.", "", 16, 0 },
+};
+
+static const struct osmo_stat_item_group_desc bsc_statg_desc = {
+ .group_name_prefix = "bsc",
+ .group_description = "base station controller",
+ .class_id = OSMO_STATS_CLASS_GLOBAL,
+ .num_items = ARRAY_SIZE(bsc_stat_desc),
+ .item_desc = bsc_stat_desc,
+};
+
int bsc_shutdown_net(struct gsm_network *net)
{
struct gsm_bts *bts;
@@ -268,6 +280,7 @@ static struct gsm_network *bsc_network_init(void *ctx)
talloc_free(net);
return NULL;
}
+ net->bsc_statg = osmo_stat_item_group_alloc(net, &bsc_statg_desc, 0);
INIT_LLIST_HEAD(&net->bts_rejected);
gsm_net_update_ctype(net);