This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.org
Review at https://gerrit.osmocom.org/4401
WIP: Move most counter from per-BSC to per-BTS level
Operators want to see statistics for each BTS, not just cumulative for
all BTS/cells/sites.
Change-Id: I34356cb5a62b09b7ddcb4194c33e4db4560743e1
---
M include/osmocom/bsc/gsm_data.h
M include/osmocom/bsc/gsm_data_shared.h
M src/libbsc/abis_rsl.c
M src/libbsc/bsc_init.c
M src/libbsc/bsc_vty.c
M src/libbsc/handover_logic.c
M src/libbsc/paging.c
M src/libcommon/gsm_data.c
8 files changed, 80 insertions(+), 54 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/01/4401/1
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 51b2c98..5b2c5b4 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -223,49 +223,57 @@
enum {
- BSC_CTR_CHREQ_TOTAL,
- BSC_CTR_CHREQ_NO_CHANNEL,
- BSC_CTR_HANDOVER_ATTEMPTED,
- BSC_CTR_HANDOVER_NO_CHANNEL,
- BSC_CTR_HANDOVER_TIMEOUT,
- BSC_CTR_HANDOVER_COMPLETED,
- BSC_CTR_HANDOVER_FAILED,
+ BTS_CTR_CHREQ_TOTAL,
+ BTS_CTR_CHREQ_NO_CHANNEL,
+ BTS_CTR_HANDOVER_ATTEMPTED,
+ BTS_CTR_HANDOVER_NO_CHANNEL,
+ BTS_CTR_HANDOVER_TIMEOUT,
+ BTS_CTR_HANDOVER_COMPLETED,
+ BTS_CTR_HANDOVER_FAILED,
+ BTS_CTR_PAGING_ATTEMPTED,
+ BTS_CTR_PAGING_COMPLETED,
+ BTS_CTR_PAGING_EXPIRED,
+ BTS_CTR_CHAN_RF_FAIL,
+ BTS_CTR_CHAN_RLL_ERR,
+ BTS_CTR_BTS_OML_FAIL,
+ BTS_CTR_BTS_RSL_FAIL,
+ BTS_CTR_CODEC_AMR_F,
+ BTS_CTR_CODEC_AMR_H,
+ BTS_CTR_CODEC_EFR,
+ BTS_CTR_CODEC_V1_FR,
+ BTS_CTR_CODEC_V1_HR,
+};
+
+static const struct rate_ctr_desc bts_ctr_description[] = {
+ [BTS_CTR_CHREQ_TOTAL] = {"chreq.total", "Received channel requests."},
+ [BTS_CTR_CHREQ_NO_CHANNEL] = {"chreq.no_channel", "Sent to MS no channel available."},
+ [BTS_CTR_HANDOVER_ATTEMPTED] = {"handover.attempted", "Received handover attempts."},
+ [BTS_CTR_HANDOVER_NO_CHANNEL] = {"handover.no_channel", "Sent no channel available responses."},
+ [BTS_CTR_HANDOVER_TIMEOUT] = {"handover.timeout", "Count the amount of timeouts of timer T3103."},
+ [BTS_CTR_HANDOVER_COMPLETED] = {"handover.completed", "Received handover completed."},
+ [BTS_CTR_HANDOVER_FAILED] = {"handover.failed", "Receive HO FAIL messages."},
+ [BTS_CTR_PAGING_ATTEMPTED] = {"paging.attempted", "Paging attempts for a MS."},
+ [BTS_CTR_PAGING_COMPLETED] = {"paging.completed", "Paging successful completed."},
+ [BTS_CTR_PAGING_EXPIRED] = {"paging.expired", "Paging Request expired because of timeout T3113."},
+ [BTS_CTR_CHAN_RF_FAIL] = {"chan.rf_fail", "Received a RF failure indication from BTS."},
+ [BTS_CTR_CHAN_RLL_ERR] = {"chan.rll_err", "Received a RLL failure with T200 cause from BTS."},
+ [BTS_CTR_BTS_OML_FAIL] = {"oml_fail", "Received a TEI down on a OML link."},
+ [BTS_CTR_BTS_RSL_FAIL] = {"rsl_fail", "Received a TEI down on a OML link."},
+ [BTS_CTR_CODEC_AMR_F] = {"codec.amr_f", "Count the usage of AMR/F codec by channel mode requested."},
+ [BTS_CTR_CODEC_AMR_H] = {"codec.amr_h", "Count the usage of AMR/H codec by channel mode requested."},
+ [BTS_CTR_CODEC_EFR] = {"codec.efr", "Count the usage of EFR codec by channel mode requested."},
+ [BTS_CTR_CODEC_V1_FR] = {"codec.fr", "Count the usage of FR codec by channel mode requested."},
+ [BTS_CTR_CODEC_V1_HR] = {"codec.hr", "Count the usage of HR codec by channel mode requested."},
+};
+
+enum {
BSC_CTR_PAGING_ATTEMPTED,
BSC_CTR_PAGING_DETACHED,
- BSC_CTR_PAGING_COMPLETED,
- BSC_CTR_PAGING_EXPIRED,
- BSC_CTR_CHAN_RF_FAIL,
- BSC_CTR_CHAN_RLL_ERR,
- BSC_CTR_BTS_OML_FAIL,
- BSC_CTR_BTS_RSL_FAIL,
- BSC_CTR_CODEC_AMR_F,
- BSC_CTR_CODEC_AMR_H,
- BSC_CTR_CODEC_EFR,
- BSC_CTR_CODEC_V1_FR,
- BSC_CTR_CODEC_V1_HR,
};
static const struct rate_ctr_desc bsc_ctr_description[] = {
- [BSC_CTR_CHREQ_TOTAL] = {"chreq.total", "Received channel requests."},
- [BSC_CTR_CHREQ_NO_CHANNEL] = {"chreq.no_channel", "Sent to MS no channel available."},
- [BSC_CTR_HANDOVER_ATTEMPTED] = {"handover.attempted", "Received handover attempts."},
- [BSC_CTR_HANDOVER_NO_CHANNEL] = {"handover.no_channel", "Sent no channel available responses."},
- [BSC_CTR_HANDOVER_TIMEOUT] = {"handover.timeout", "Count the amount of timeouts of timer T3103."},
- [BSC_CTR_HANDOVER_COMPLETED] = {"handover.completed", "Received handover completed."},
- [BSC_CTR_HANDOVER_FAILED] = {"handover.failed", "Receive HO FAIL messages."},
[BSC_CTR_PAGING_ATTEMPTED] = {"paging.attempted", "Paging attempts for a MS."},
[BSC_CTR_PAGING_DETACHED] = {"paging.detached", "Counts the amount of paging attempts which couldn't sent out any paging request because no responsible bts found."},
- [BSC_CTR_PAGING_COMPLETED] = {"paging.completed", "Paging successful completed."},
- [BSC_CTR_PAGING_EXPIRED] = {"paging.expired", "Paging Request expired because of timeout T3113."},
- [BSC_CTR_CHAN_RF_FAIL] = {"chan.rf_fail", "Received a RF failure indication from BTS."},
- [BSC_CTR_CHAN_RLL_ERR] = {"chan.rll_err", "Received a RLL failure with T200 cause from BTS."},
- [BSC_CTR_BTS_OML_FAIL] = {"bts.oml_fail", "Received a TEI down on a OML link."},
- [BSC_CTR_BTS_RSL_FAIL] = {"bts.rsl_fail", "Received a TEI down on a OML link."},
- [BSC_CTR_CODEC_AMR_F] = {"bts.codec_amr_f", "Count the usage of AMR/F codec by channel mode requested."},
- [BSC_CTR_CODEC_AMR_H] = {"bts.codec_amr_h", "Count the usage of AMR/H codec by channel mode requested."},
- [BSC_CTR_CODEC_EFR] = {"bts.codec_efr", "Count the usage of EFR codec by channel mode requested."},
- [BSC_CTR_CODEC_V1_FR] = {"bts.codec_fr", "Count the usage of FR codec by channel mode requested."},
- [BSC_CTR_CODEC_V1_HR] = {"bts.codec_hr", "Count the usage of HR codec by channel mode requested."},
};
enum {
@@ -314,6 +322,14 @@
};
+static const struct rate_ctr_group_desc bts_ctrg_desc = {
+ "bts",
+ "base station",
+ OSMO_STATS_CLASS_GLOBAL,
+ ARRAY_SIZE(bts_ctr_description),
+ bts_ctr_description,
+};
+
static const struct rate_ctr_group_desc bsc_ctrg_desc = {
"bsc",
"base station controller",
diff --git a/include/osmocom/bsc/gsm_data_shared.h b/include/osmocom/bsc/gsm_data_shared.h
index 240be1c..a26c368 100644
--- a/include/osmocom/bsc/gsm_data_shared.h
+++ b/include/osmocom/bsc/gsm_data_shared.h
@@ -6,6 +6,7 @@
#include <stdint.h>
#include <osmocom/core/timer.h>
+#include <osmocom/core/rate_ctr.h>
#include <osmocom/core/bitvec.h>
#include <osmocom/core/statistics.h>
#include <osmocom/core/utils.h>
@@ -847,6 +848,8 @@
int force_combined_si;
int bcch_change_mark;
+ struct rate_ctr_group *bts_ctrs;
+
#ifdef ROLE_BSC
/* Abis NM queue */
struct llist_head abis_queue;
diff --git a/src/libbsc/abis_rsl.c b/src/libbsc/abis_rsl.c
index 9968602..fbaaf09 100644
--- a/src/libbsc/abis_rsl.c
+++ b/src/libbsc/abis_rsl.c
@@ -91,10 +91,10 @@
if (lchan->type == GSM_LCHAN_TCH_H) {
switch (lchan->tch_mode) {
case GSM48_CMODE_SPEECH_AMR:
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_AMR_H]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CODEC_AMR_H]);
break;
case GSM48_CMODE_SPEECH_V1:
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_V1_HR]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CODEC_V1_HR]);
break;
default:
break;
@@ -102,13 +102,13 @@
} else if (lchan->type == GSM_LCHAN_TCH_F) {
switch (lchan->tch_mode) {
case GSM48_CMODE_SPEECH_AMR:
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_AMR_F]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CODEC_AMR_F]);
break;
case GSM48_CMODE_SPEECH_V1:
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_V1_FR]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CODEC_V1_FR]);
break;
case GSM48_CMODE_SPEECH_EFR:
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_EFR]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CODEC_EFR]);
break;
default:
break;
@@ -1366,7 +1366,7 @@
TLVP_LEN(&tp, RSL_IE_CAUSE));
LOGPC(DRSL, LOGL_NOTICE, "\n");
- rate_ctr_inc(&msg->lchan->ts->trx->bts->network->bsc_ctrs->ctr[BSC_CTR_CHAN_RF_FAIL]);
+ rate_ctr_inc(&msg->lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_CHAN_RF_FAIL]);
return rsl_rf_chan_release_err(msg->lchan);
}
@@ -1872,7 +1872,7 @@
* request reference RA */
lctype = get_ctype_by_chreq(bts->network, rqd_ref->ra);
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CHREQ_TOTAL]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_TOTAL]);
/*
* We want LOCATION UPDATES to succeed and will assign a TCH
@@ -1885,7 +1885,7 @@
if (!lchan) {
LOGP(DRSL, LOGL_NOTICE, "BTS %d CHAN RQD: no resources for %s 0x%x\n",
msg->lchan->ts->trx->bts->nr, gsm_lchant_name(lctype), rqd_ref->ra);
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CHREQ_NO_CHANNEL]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CHREQ_NO_CHANNEL]);
/* FIXME gather multiple CHAN RQD and reject up to 4 at the same time */
if (bts->network->T3122)
rsl_send_imm_ass_rej(bts, 1, rqd_ref, bts->network->T3122 & 0xff);
@@ -2082,7 +2082,7 @@
rll_indication(msg->lchan, rllh->link_id, BSC_RLLR_IND_ERR_IND);
if (rlm_cause == RLL_CAUSE_T200_EXPIRED) {
- rate_ctr_inc(&msg->lchan->ts->trx->bts->network->bsc_ctrs->ctr[BSC_CTR_CHAN_RLL_ERR]);
+ rate_ctr_inc(&msg->lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_CHAN_RLL_ERR]);
return rsl_rf_chan_release_err(msg->lchan);
}
diff --git a/src/libbsc/bsc_init.c b/src/libbsc/bsc_init.c
index 674813c..df83665 100644
--- a/src/libbsc/bsc_init.c
+++ b/src/libbsc/bsc_init.c
@@ -398,9 +398,9 @@
LOGP(DLMI, LOGL_ERROR, "Lost some E1 TEI link: %d %p\n", isd->link_type, trx);
if (isd->link_type == E1INP_SIGN_OML)
- rate_ctr_inc(&trx->bts->network->bsc_ctrs->ctr[BSC_CTR_BTS_OML_FAIL]);
+ rate_ctr_inc(&trx->bts->bts_ctrs->ctr[BTS_CTR_BTS_OML_FAIL]);
else if (isd->link_type == E1INP_SIGN_RSL)
- rate_ctr_inc(&trx->bts->network->bsc_ctrs->ctr[BSC_CTR_BTS_RSL_FAIL]);
+ rate_ctr_inc(&trx->bts->bts_ctrs->ctr[BTS_CTR_BTS_RSL_FAIL]);
/*
* free all allocated channels. change the nm_state so the
diff --git a/src/libbsc/bsc_vty.c b/src/libbsc/bsc_vty.c
index 461e3d3..19d89cd 100644
--- a/src/libbsc/bsc_vty.c
+++ b/src/libbsc/bsc_vty.c
@@ -3769,6 +3769,7 @@
void openbsc_vty_print_statistics(struct vty *vty, struct gsm_network *net)
{
+#if 0
vty_out(vty, "Channel Requests : %"PRIu64" total, %"PRIu64" no channel%s",
net->bsc_ctrs->ctr[BSC_CTR_CHREQ_TOTAL].current,
net->bsc_ctrs->ctr[BSC_CTR_CHREQ_NO_CHANNEL].current,
@@ -3786,6 +3787,7 @@
net->bsc_ctrs->ctr[BSC_CTR_BTS_OML_FAIL].current,
net->bsc_ctrs->ctr[BSC_CTR_BTS_RSL_FAIL].current,
VTY_NEWLINE);
+#endif
}
DEFUN(drop_bts,
diff --git a/src/libbsc/handover_logic.c b/src/libbsc/handover_logic.c
index ace8ac3..5152fec 100644
--- a/src/libbsc/handover_logic.c
+++ b/src/libbsc/handover_logic.c
@@ -105,7 +105,7 @@
"(old_lchan on BTS %u, new BTS %u) ...\n",
old_lchan->ts->trx->bts->nr, bts->nr);
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_HANDOVER_ATTEMPTED]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_HANDOVER_ATTEMPTED]);
if (!old_lchan->conn) {
LOGP(DHO, LOGL_ERROR, "Old lchan lacks connection data.\n");
@@ -115,7 +115,7 @@
new_lchan = lchan_alloc(bts, old_lchan->type, 0);
if (!new_lchan) {
LOGP(DHO, LOGL_NOTICE, "No free channel\n");
- rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_HANDOVER_NO_CHANNEL]);
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_HANDOVER_NO_CHANNEL]);
return -ENOSPC;
}
@@ -190,7 +190,7 @@
struct gsm_network *net = ho->new_lchan->ts->trx->bts->network;
DEBUGP(DHO, "HO T3103 expired\n");
- rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_TIMEOUT]);
+ rate_ctr_inc(&ho->new_lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_HANDOVER_TIMEOUT]);
ho->new_lchan->conn->ho_lchan = NULL;
ho->new_lchan->conn = NULL;
@@ -266,7 +266,7 @@
ho->old_lchan->ts->trx->bts->nr, new_lchan->ts->trx->bts->nr,
ho->old_lchan->ts->trx->arfcn, new_lchan->ts->trx->arfcn);
- rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_COMPLETED]);
+ rate_ctr_inc(&new_lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_HANDOVER_COMPLETED]);
osmo_timer_del(&ho->T3103);
@@ -305,10 +305,10 @@
return -ENODEV;
}
- rate_ctr_inc(&net->bsc_ctrs->ctr[BSC_CTR_HANDOVER_FAILED]);
-
new_lchan = ho->new_lchan;
+ rate_ctr_inc(&new_lchan->ts->trx->bts->bts_ctrs->ctr[BTS_CTR_HANDOVER_FAILED]);
+
/* release the channel and forget about it */
ho->new_lchan->conn->ho_lchan = NULL;
ho->new_lchan->conn = NULL;
diff --git a/src/libbsc/paging.c b/src/libbsc/paging.c
index b8f9043..f763d73 100644
--- a/src/libbsc/paging.c
+++ b/src/libbsc/paging.c
@@ -269,7 +269,7 @@
req, bsc_subscr_name(req->bsub));
/* must be destroyed before calling cbfn, to prevent double free */
- rate_ctr_inc(&req->bts->network->bsc_ctrs->ctr[BSC_CTR_PAGING_EXPIRED]);
+ rate_ctr_inc(&req->bts->bts_ctrs->ctr[BTS_CTR_PAGING_EXPIRED]);
cbfn_param = req->cbfn_param;
cbfn = req->cbfn;
@@ -297,6 +297,8 @@
return -EEXIST;
}
+ rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_PAGING_ATTEMPTED]);
+
LOGP(DPAG, LOGL_DEBUG, "Start paging of subscriber %s on bts %d.\n",
bsc_subscr_name(bsub), bts->nr);
req = talloc_zero(tall_paging_ctx, struct gsm_paging_request);
diff --git a/src/libcommon/gsm_data.c b/src/libcommon/gsm_data.c
index e085aa6..b1001f5 100644
--- a/src/libcommon/gsm_data.c
+++ b/src/libcommon/gsm_data.c
@@ -301,6 +301,9 @@
INIT_LLIST_HEAD(&bts->loc_list);
+ bts->bts_ctrs = rate_ctr_group_alloc(bts, &bts_ctrg_desc, 0);
+ OSMO_ASSERT(bts->bts_ctrs);
+
return bts;
}
--
To view, visit https://gerrit.osmocom.org/4401
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I34356cb5a62b09b7ddcb4194c33e4db4560743e1
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>