diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index a26bdbd2c..8abcf1323 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -62,6 +62,8 @@ enum bts_counter_id { BTS_CTR_CHAN_ACT_NACK, BTS_CTR_CHAN_TCH_ACTIVE_MILLISECONDS_TOTAL, BTS_CTR_CHAN_SDCCH_ACTIVE_MILLISECONDS_TOTAL, + BTS_CTR_CHAN_TCH_FULLY_ESTABLISHED, + BTS_CTR_CHAN_SDCCH_FULLY_ESTABLISHED, BTS_CTR_RSL_UNKNOWN, BTS_CTR_RSL_IPA_NACK, BTS_CTR_RSL_DELETE_IND, diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index 4f8a3e1de..2f6661190 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -1155,6 +1155,12 @@ const struct rate_ctr_desc bts_ctr_description[] = { [BTS_CTR_CHAN_SDCCH_ACTIVE_MILLISECONDS_TOTAL] = \ { "chan_sdcch:active_milliseconds:total", "Cumulative number of milliseconds of SDCCH channel activity" }, + [BTS_CTR_CHAN_TCH_FULLY_ESTABLISHED] = \ + { "chan_tch:fully_established", + "Number of TCH channels which have reached the fully established state" }, + [BTS_CTR_CHAN_SDCCH_FULLY_ESTABLISHED] = \ + { "chan_sdcch:fully_established", + "Number of SDCCH channels which have reached the fully established state" }, [BTS_CTR_RSL_UNKNOWN] = \ { "rsl:unknown", "Number of unknown/unsupported RSL messages received from BTS" }, diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c index 2d566b698..41b7ae711 100644 --- a/src/osmo-bsc/lchan_fsm.c +++ b/src/osmo-bsc/lchan_fsm.c @@ -208,6 +208,19 @@ static void lchan_on_fully_established(struct gsm_lchan *lchan) osmo_clock_gettime(CLOCK_MONOTONIC, &lchan->active_start); lchan->active_stored = lchan->active_start; + /* Increment rate counters tracking fully established lchans. */ + switch (lchan->type) { + case GSM_LCHAN_TCH_H: + case GSM_LCHAN_TCH_F: + rate_ctr_inc(rate_ctr_group_get_ctr(lchan->ts->trx->bts->bts_ctrs, BTS_CTR_CHAN_TCH_FULLY_ESTABLISHED)); + break; + case GSM_LCHAN_SDCCH: + rate_ctr_inc(rate_ctr_group_get_ctr(lchan->ts->trx->bts->bts_ctrs, BTS_CTR_CHAN_SDCCH_FULLY_ESTABLISHED)); + break; + default: + break; + } + switch (lchan->activate.info.activ_for) { case ACTIVATE_FOR_MS_CHANNEL_REQUEST: /* No signalling to do here, MS is free to use the channel, and should go on to connect