aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Chemeris <Alexander.Chemeris@gmail.com>2020-06-06 12:52:34 +0300
committerkeith <keith@rhizomatica.org>2021-04-12 17:56:55 +0000
commite9a44fdedda15dd181b49fa37b28fb2fae8207af (patch)
tree50da11a1e8a14c8a9ad23e822a4300fbaedd9e6c
parentcd622e0f5f6daf2a9111d149ebfb85da3d84e472 (diff)
stats: Count transitions from BORKEN state due to LCHAN_EV_TS_ERROR signal.
-rw-r--r--include/osmocom/bsc/bts.h1
-rw-r--r--src/osmo-bsc/bts.c3
-rw-r--r--src/osmo-bsc/lchan_fsm.c7
3 files changed, 11 insertions, 0 deletions
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index c03c75ed6..d88357089 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -64,6 +64,7 @@ enum bts_counter_id {
BTS_CTR_LCHAN_BORKEN_EV_RF_CHAN_REL_ACK,
BTS_CTR_LCHAN_BORKEN_EV_VTY,
BTS_CTR_LCHAN_BORKEN_EV_TEARDOWN,
+ BTS_CTR_LCHAN_BORKEN_EV_TS_ERROR,
BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RR_CHAN_MODE_MODIFY_ACK,
BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RSL_CHAN_MODE_MODIFY_ACK,
BTS_CTR_TS_BORKEN_FROM_NOT_INITIALIZED,
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index b5b7136cc..7abc1265f 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -885,6 +885,9 @@ const struct rate_ctr_desc bts_ctr_description[] = {
[BTS_CTR_LCHAN_BORKEN_EV_TEARDOWN] = \
{ "lchan_borken:event:teardown",
"lchan in a BORKEN state is shutting down (BTS disconnected?)" },
+ [BTS_CTR_LCHAN_BORKEN_EV_TS_ERROR] = \
+ { "lchan_borken:event:ts_error",
+ "LCHAN_EV_TS_ERROR received in a BORKEN state" },
[BTS_CTR_TS_BORKEN_FROM_NOT_INITIALIZED] = \
{ "ts_borken:from_state:not_initialized",
"Transitions from TS NOT_INITIALIZED state to BORKEN state" },
diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c
index 6f0fd63da..ffcf2b13f 100644
--- a/src/osmo-bsc/lchan_fsm.c
+++ b/src/osmo-bsc/lchan_fsm.c
@@ -1537,8 +1537,15 @@ static void lchan_fsm_allstate_action(struct osmo_fsm_inst *fi, uint32_t event,
switch (event) {
case LCHAN_EV_TS_ERROR:
+ {
+ struct gsm_lchan *lchan = lchan_fi_lchan(fi);
+ if (fi->state == LCHAN_ST_BORKEN) {
+ rate_ctr_inc(&lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_LCHAN_BORKEN_EV_TS_ERROR]);
+ osmo_stat_item_dec(lchan->ts->trx->bts->bts_statg->items[BTS_STAT_LCHAN_BORKEN], 1);
+ }
lchan_fail_to(LCHAN_ST_UNUSED, "LCHAN_EV_TS_ERROR");
return;
+ }
case LCHAN_EV_RLL_ERR_IND:
/* let's just ignore this. We are already logging the