diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2021-11-01 19:08:16 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2021-11-05 12:01:27 +0100 |
commit | 96887554f9328ebce8bf1448eacd12620ed5c97b (patch) | |
tree | 6ea9ddee9ad7bb06840df8a5a10a62880eb6f58c /src | |
parent | 5dbed8160f2b79bdac7b3a2ccae9d60110c2a332 (diff) |
add chreq:successful_<reason> rate counters
Related: SYS#4878
Change-Id: I32c2c197a6199617a82986480b686c515fa40d62
Diffstat (limited to 'src')
-rw-r--r-- | src/osmo-bsc/abis_rsl.c | 32 | ||||
-rw-r--r-- | src/osmo-bsc/bts.c | 21 | ||||
-rw-r--r-- | src/osmo-bsc/lchan_fsm.c | 4 |
3 files changed, 56 insertions, 1 deletions
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; |