From 96887554f9328ebce8bf1448eacd12620ed5c97b Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Mon, 1 Nov 2021 19:08:16 +0100 Subject: add chreq:successful_ rate counters Related: SYS#4878 Change-Id: I32c2c197a6199617a82986480b686c515fa40d62 --- include/osmocom/bsc/bts.h | 7 +++++++ include/osmocom/bsc/gsm_data.h | 2 ++ src/osmo-bsc/abis_rsl.c | 32 +++++++++++++++++++++++++++++++- src/osmo-bsc/bts.c | 21 +++++++++++++++++++++ src/osmo-bsc/lchan_fsm.c | 4 ++++ 5 files changed, 65 insertions(+), 1 deletion(-) diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index 68654f2cc..68e7cfed5 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -27,6 +27,13 @@ enum bts_counter_id { BTS_CTR_CHREQ_ATTEMPTED_OTHER, BTS_CTR_CHREQ_ATTEMPTED_UNKNOWN, BTS_CTR_CHREQ_SUCCESSFUL, + BTS_CTR_CHREQ_SUCCESSFUL_EMERG, + BTS_CTR_CHREQ_SUCCESSFUL_CALL, + BTS_CTR_CHREQ_SUCCESSFUL_LOCATION_UPD, + BTS_CTR_CHREQ_SUCCESSFUL_PAG, + BTS_CTR_CHREQ_SUCCESSFUL_PDCH, + BTS_CTR_CHREQ_SUCCESSFUL_OTHER, + BTS_CTR_CHREQ_SUCCESSFUL_UNKNOWN, BTS_CTR_CHREQ_NO_CHANNEL, BTS_CTR_CHREQ_MAX_DELAY_EXCEEDED, BTS_CTR_CHAN_RF_FAIL, diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h index cb560286e..6a60f06cf 100644 --- a/include/osmocom/bsc/gsm_data.h +++ b/include/osmocom/bsc/gsm_data.h @@ -617,6 +617,8 @@ enum imm_ass_time { struct lchan_activate_info { enum lchan_activate_for activ_for; + /* If activ_for == ACTIVATE_FOR_MS_CHANNEL_REQUEST, the original CHREQ reason. */ + enum gsm_chreq_reason_t chreq_reason; struct gsm_subscriber_connection *for_conn; struct channel_mode_and_rate ch_mode_rate; struct gsm_encr encr; diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c index c3825f6a8..cdd57c257 100644 --- a/src/osmo-bsc/abis_rsl.c +++ b/src/osmo-bsc/abis_rsl.c @@ -2097,6 +2097,7 @@ void abis_rsl_chan_rqd_queue_poll(struct gsm_bts *bts) gsm_chreq_name(rqd->reason), rqd->ref.ra, rqd->ta); info = (struct lchan_activate_info){ .activ_for = ACTIVATE_FOR_MS_CHANNEL_REQUEST, + .chreq_reason = rqd->reason, .ch_mode_rate = { .chan_mode = GSM48_CMODE_SIGN, .chan_rate = CH_RATE_SDCCH, @@ -2112,6 +2113,35 @@ void abis_rsl_chan_rqd_queue_poll(struct gsm_bts *bts) return; } +static void imm_ass_rate_ctr(struct gsm_lchan *lchan) +{ + struct gsm_bts *bts = lchan->ts->trx->bts; + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_SUCCESSFUL)); + switch (lchan->activate.info.chreq_reason) { + case GSM_CHREQ_REASON_EMERG: + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_ATTEMPTED_EMERG)); + break; + case GSM_CHREQ_REASON_CALL: + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_ATTEMPTED_CALL)); + break; + case GSM_CHREQ_REASON_LOCATION_UPD: + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_ATTEMPTED_LOCATION_UPD)); + break; + case GSM_CHREQ_REASON_PAG: + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_ATTEMPTED_PAG)); + break; + case GSM_CHREQ_REASON_PDCH: + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_ATTEMPTED_PDCH)); + break; + case GSM_CHREQ_REASON_OTHER: + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_ATTEMPTED_OTHER)); + break; + default: + rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_ATTEMPTED_UNKNOWN)); + break; + } +} + int rsl_tx_imm_assignment(struct gsm_lchan *lchan) { int rc; @@ -2156,7 +2186,7 @@ int rsl_tx_imm_assignment(struct gsm_lchan *lchan) rc = rsl_imm_assign_cmd(bts, sizeof(*ia)+ia->mob_alloc_len, (uint8_t *) ia); if (!rc) - rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_CHREQ_SUCCESSFUL)); + imm_ass_rate_ctr(lchan); return rc; } diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index 21ee01a89..28059bbb0 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -849,6 +849,27 @@ const struct rate_ctr_desc bts_ctr_description[] = { [BTS_CTR_CHREQ_SUCCESSFUL] = \ { "chreq:successful", "Successful channel requests (immediate assign sent)" }, + [BTS_CTR_CHREQ_SUCCESSFUL_EMERG] = \ + { "chreq:successful_emerg", + "Sent Immediate Assignment for EMERG" }, + [BTS_CTR_CHREQ_SUCCESSFUL_CALL] = \ + { "chreq:successful_call", + "Sent Immediate Assignment for CALL" }, + [BTS_CTR_CHREQ_SUCCESSFUL_LOCATION_UPD] = \ + { "chreq:successful_location_upd", + "Sent Immediate Assignment for LOCATION_UPD" }, + [BTS_CTR_CHREQ_SUCCESSFUL_PAG] = \ + { "chreq:successful_pag", + "Sent Immediate Assignment for PAG" }, + [BTS_CTR_CHREQ_SUCCESSFUL_PDCH] = \ + { "chreq:successful_pdch", + "Sent Immediate Assignment for PDCH" }, + [BTS_CTR_CHREQ_SUCCESSFUL_OTHER] = \ + { "chreq:successful_other", + "Sent Immediate Assignment for OTHER" }, + [BTS_CTR_CHREQ_SUCCESSFUL_UNKNOWN] = \ + { "chreq:successful_unknown", + "Sent Immediate Assignment for UNKNOWN" }, [BTS_CTR_CHREQ_NO_CHANNEL] = \ { "chreq:no_channel", "Sent to MS no channel available" }, diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c index d5d6e7721..52aadce29 100644 --- a/src/osmo-bsc/lchan_fsm.c +++ b/src/osmo-bsc/lchan_fsm.c @@ -632,6 +632,10 @@ static void lchan_fsm_unused(struct osmo_fsm_inst *fi, uint32_t event, void *dat lchan->release.requested = false; lchan->activate.info = *info; + /* To avoid confusion, invalidate info.chreq_reason value if it isn't for a CHREQ */ + if (lchan->activate.info.activ_for != ACTIVATE_FOR_MS_CHANNEL_REQUEST) + lchan->activate.info.chreq_reason = -1; + lchan->activate.concluded = false; lchan_fsm_state_chg(LCHAN_ST_WAIT_TS_READY); break; -- cgit v1.2.3