From e42208c6ea9d2db67d26f85a1d906ab103ed57b5 Mon Sep 17 00:00:00 2001 From: Michael Iedema Date: Mon, 11 Jan 2021 17:06:11 +0000 Subject: stats: Add granularity to SDCCH/TCH/LU activity. Change-Id: I4df275e4770c5ff3643c79ba828e736986f8bb47 --- include/osmocom/bsc/bts.h | 15 ++++++++++++++ src/osmo-bsc/abis_rsl.c | 34 +++++++++++++++++++++++++++++++ src/osmo-bsc/assignment_fsm.c | 12 +++++++++++ src/osmo-bsc/bts.c | 46 +++++++++++++++++++++++++++++++++++++++++- src/osmo-bsc/osmo_bsc_filter.c | 17 ++++++++++++++++ 5 files changed, 123 insertions(+), 1 deletion(-) diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index c79e7f7f4..8f3e05bdd 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -18,6 +18,13 @@ enum bts_counter_id { BTS_CTR_CHREQ_TOTAL, + BTS_CTR_CHREQ_ATTEMPTED_EMERG, + BTS_CTR_CHREQ_ATTEMPTED_CALL, + BTS_CTR_CHREQ_ATTEMPTED_LOCATION_UPD, + BTS_CTR_CHREQ_ATTEMPTED_PAG, + BTS_CTR_CHREQ_ATTEMPTED_PDCH, + BTS_CTR_CHREQ_ATTEMPTED_OTHER, + BTS_CTR_CHREQ_ATTEMPTED_UNKNOWN, BTS_CTR_CHREQ_SUCCESSFUL, BTS_CTR_CHREQ_NO_CHANNEL, BTS_CTR_CHAN_RF_FAIL, @@ -36,6 +43,8 @@ enum bts_counter_id { BTS_CTR_PAGING_NO_ACTIVE_PAGING, BTS_CTR_PAGING_MSC_FLUSH, BTS_CTR_CHAN_ACT_TOTAL, + BTS_CTR_CHAN_ACT_SDCCH, + BTS_CTR_CHAN_ACT_TCH, BTS_CTR_CHAN_ACT_NACK, BTS_CTR_RSL_UNKNOWN, BTS_CTR_RSL_IPA_NACK, @@ -68,9 +77,15 @@ enum bts_counter_id { BTS_CTR_ASSIGNMENT_COMPLETED, BTS_CTR_ASSIGNMENT_STOPPED, BTS_CTR_ASSIGNMENT_NO_CHANNEL, + BTS_CTR_ASSIGNMENT_NO_CHANNEL_SIGN, + BTS_CTR_ASSIGNMENT_NO_CHANNEL_SPEECH, BTS_CTR_ASSIGNMENT_TIMEOUT, BTS_CTR_ASSIGNMENT_FAILED, BTS_CTR_ASSIGNMENT_ERROR, + BTS_CTR_LOCATION_UPDATE_ACCEPT, + BTS_CTR_LOCATION_UPDATE_REJECT, + BTS_CTR_LOCATION_UPDATE_DETACH, + BTS_CTR_LOCATION_UPDATE_UNKNOWN, BTS_CTR_HANDOVER_ATTEMPTED, BTS_CTR_HANDOVER_COMPLETED, BTS_CTR_HANDOVER_STOPPED, diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c index 214221997..a68c9fbd4 100644 --- a/src/osmo-bsc/abis_rsl.c +++ b/src/osmo-bsc/abis_rsl.c @@ -613,6 +613,17 @@ int rsl_tx_chan_activ(struct gsm_lchan *lchan, uint8_t act_type, uint8_t ho_ref) msg->dst = trx->rsl_link; rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHAN_ACT_TOTAL]); + switch (lchan->type) { + case GSM_LCHAN_SDCCH: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHAN_ACT_SDCCH]); + break; + case GSM_LCHAN_TCH_H: + case GSM_LCHAN_TCH_F: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHAN_ACT_TCH]); + break; + default: + break; + } return abis_rsl_sendmsg(msg); } @@ -1511,6 +1522,29 @@ static int rsl_rx_chan_rqd(struct msgb *msg) get_value_string(gsm_chreq_descs, rqd->reason), rqd->ref.ra, bts->network->neci, rqd->reason); rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_TOTAL]); + switch (rqd->reason) { + case GSM_CHREQ_REASON_EMERG: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_ATTEMPTED_EMERG]); + break; + case GSM_CHREQ_REASON_CALL: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_ATTEMPTED_CALL]); + break; + case GSM_CHREQ_REASON_LOCATION_UPD: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_ATTEMPTED_LOCATION_UPD]); + break; + case GSM_CHREQ_REASON_PAG: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_ATTEMPTED_PAG]); + break; + case GSM_CHREQ_REASON_PDCH: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_ATTEMPTED_PDCH]); + break; + case GSM_CHREQ_REASON_OTHER: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_ATTEMPTED_OTHER]); + break; + default: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_ATTEMPTED_UNKNOWN]); + break; + } /* Enqueue request */ llist_add_tail(&rqd->entry, &bts->chan_rqd_queue); diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c index 7db37b2b6..6dba214aa 100644 --- a/src/osmo-bsc/assignment_fsm.c +++ b/src/osmo-bsc/assignment_fsm.c @@ -506,6 +506,18 @@ void assignment_fsm_start(struct gsm_subscriber_connection *conn, struct gsm_bts * down the assignment in case of failure. */ if (!conn->assignment.new_lchan) { assignment_count_result(CTR_ASSIGNMENT_NO_CHANNEL); + switch (req->ch_mode_rate[0].chan_mode) { + case GSM48_CMODE_SIGN: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_ASSIGNMENT_NO_CHANNEL_SIGN]); + break; + case GSM48_CMODE_SPEECH_V1: + case GSM48_CMODE_SPEECH_EFR: + case GSM48_CMODE_SPEECH_AMR: + rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_ASSIGNMENT_NO_CHANNEL_SPEECH]); + break; + default: + break; + } assignment_fail(GSM0808_CAUSE_NO_RADIO_RESOURCE_AVAILABLE, "BSSMAP Assignment Command:" " No lchan available for: pref=%s:%s / alt1=%s:%s / alt2=%s:%s\n", diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index 0774721e0..3fa4f24bc 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -761,6 +761,27 @@ const struct rate_ctr_desc bts_ctr_description[] = { [BTS_CTR_CHREQ_TOTAL] = \ { "chreq:total", "Received channel requests" }, + [BTS_CTR_CHREQ_ATTEMPTED_EMERG] = \ + { "chreq:attempted_emerg", + "Received channel requests EMERG" }, + [BTS_CTR_CHREQ_ATTEMPTED_CALL] = \ + { "chreq:attempted_call", + "Received channel requests CALL" }, + [BTS_CTR_CHREQ_ATTEMPTED_LOCATION_UPD] = \ + { "chreq:attempted_location_upd", + "Received channel requests LOCATION_UPD" }, + [BTS_CTR_CHREQ_ATTEMPTED_PAG] = \ + { "chreq:attempted_pag", + "Received channel requests PAG" }, + [BTS_CTR_CHREQ_ATTEMPTED_PDCH] = \ + { "chreq:attempted_pdch", + "Received channel requests PDCH" }, + [BTS_CTR_CHREQ_ATTEMPTED_OTHER] = \ + { "chreq:attempted_other", + "Received channel requests OTHER" }, + [BTS_CTR_CHREQ_ATTEMPTED_UNKNOWN] = \ + { "chreq:attempted_unknown", + "Received channel requests UNKNOWN" }, [BTS_CTR_CHREQ_SUCCESSFUL] = \ { "chreq:successful", "Successful channel requests (immediate assign sent)" }, @@ -815,6 +836,12 @@ const struct rate_ctr_desc bts_ctr_description[] = { [BTS_CTR_CHAN_ACT_TOTAL] = \ { "chan_act:total", "Total number of Channel Activations" }, + [BTS_CTR_CHAN_ACT_SDCCH] = \ + { "chan_act:sdcch", + "Number of SDCCH Channel Activations" }, + [BTS_CTR_CHAN_ACT_TCH] = \ + { "chan_act:tch", + "Number of TCH Channel Activations" }, [BTS_CTR_CHAN_ACT_NACK] = \ { "chan_act:nack", "Number of Channel Activations that the BTS NACKed" }, @@ -913,6 +940,12 @@ const struct rate_ctr_desc bts_ctr_description[] = { [BTS_CTR_ASSIGNMENT_NO_CHANNEL] = \ { "assignment:no_channel", "Failure to allocate lchan for Assignment" }, + [BTS_CTR_ASSIGNMENT_NO_CHANNEL_SIGN] = \ + { "assignment:no_channel_sign", + "Failure to allocate signaling lchan for Assignment" }, + [BTS_CTR_ASSIGNMENT_NO_CHANNEL_SPEECH] = \ + { "assignment:no_channel_speech", + "Failure to allocate speech lchan for Assignment" }, [BTS_CTR_ASSIGNMENT_TIMEOUT] = \ { "assignment:timeout", "Assignment timed out" }, @@ -922,7 +955,18 @@ const struct rate_ctr_desc bts_ctr_description[] = { [BTS_CTR_ASSIGNMENT_ERROR] = \ { "assignment:error", "Assignment failed for other reason" }, - + [BTS_CTR_LOCATION_UPDATE_ACCEPT] = \ + { "location_update:accept", + "Location Update Accept" }, + [BTS_CTR_LOCATION_UPDATE_REJECT] = \ + { "location_update:reject", + "Location Update Reject" }, + [BTS_CTR_LOCATION_UPDATE_DETACH] = \ + { "location_update:detach", + "Location Update Detach" }, + [BTS_CTR_LOCATION_UPDATE_UNKNOWN] = \ + { "location_update:unknown", + "Location Update UNKNOWN" }, [BTS_CTR_HANDOVER_ATTEMPTED] = \ { "handover:attempted", "Intra-BSC handover attempts" }, diff --git a/src/osmo-bsc/osmo_bsc_filter.c b/src/osmo-bsc/osmo_bsc_filter.c index 497b3e4de..0187a75df 100644 --- a/src/osmo-bsc/osmo_bsc_filter.c +++ b/src/osmo-bsc/osmo_bsc_filter.c @@ -119,5 +119,22 @@ int bsc_scan_msc_msg(struct gsm_subscriber_connection *conn, struct msgb *msg) bsc_patch_mm_info(conn, &gh->data[0], length); } + if (conn && conn->lchan) { + switch (mtype) { + case GSM48_MT_MM_LOC_UPD_ACCEPT: + rate_ctr_inc(&conn->lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_LOCATION_UPDATE_ACCEPT]); + break; + case GSM48_MT_MM_LOC_UPD_REJECT: + rate_ctr_inc(&conn->lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_LOCATION_UPDATE_REJECT]); + break; + case GSM48_MT_MM_IMSI_DETACH_IND: + rate_ctr_inc(&conn->lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_LOCATION_UPDATE_DETACH]); + break; + default: + rate_ctr_inc(&conn->lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_LOCATION_UPDATE_UNKNOWN]); + break; + } + } + return 0; } -- cgit v1.2.3