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/.
neels gerrit-no-reply at lists.osmocom.orgneels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/25275 )
Change subject: move BTS level stats and counters to bsc_stats.[hc]
......................................................................
move BTS level stats and counters to bsc_stats.[hc]
After adding bsc_stats.c, I figured it would make sense to also move the
BTS level statistics definitions to this file, so that we have one place
to find statistics for any reporting level.
Related: SYS#5542
Change-Id: I58c5c1f8a5a09e9942aa6d1bdfe7f9766773963c
---
M include/osmocom/bsc/bsc_stats.h
M include/osmocom/bsc/bts.h
M src/osmo-bsc/abis_rsl.c
M src/osmo-bsc/bsc_stats.c
M src/osmo-bsc/bsc_vty.c
M src/osmo-bsc/bts.c
M src/osmo-bsc/chan_alloc.c
M src/osmo-bsc/lchan_fsm.c
M src/osmo-bsc/osmo_bsc_filter.c
M src/osmo-bsc/timeslot_fsm.c
10 files changed, 678 insertions(+), 670 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/75/25275/1
diff --git a/include/osmocom/bsc/bsc_stats.h b/include/osmocom/bsc/bsc_stats.h
index 4250079..8d2f77f 100644
--- a/include/osmocom/bsc/bsc_stats.h
+++ b/include/osmocom/bsc/bsc_stats.h
@@ -97,7 +97,7 @@
BSC_STAT_NUM_MSC_TOTAL,
};
-/* BTS counter index if a BTS could not be found
+/* BTS counter index if a BTS could not be found, for both rate_ctr and stat_item.
* Currently we are limited to bts 0 - 255 in the VTY, but that might change in
* the future so use 2**16 */
#define BTS_STAT_IDX_UNKNOWN (UINT16_MAX + 1)
@@ -105,3 +105,167 @@
extern const struct osmo_stat_item_group_desc bsc_statg_desc;
void bsc_update_connection_stats(struct gsm_network *net);
+
+/* per BTS rate counters */
+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_CHREQ_MAX_DELAY_EXCEEDED,
+ BTS_CTR_CHAN_RF_FAIL,
+ BTS_CTR_CHAN_RF_FAIL_TCH,
+ BTS_CTR_CHAN_RF_FAIL_SDCCH,
+ 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,
+ BTS_CTR_PAGING_ATTEMPTED,
+ BTS_CTR_PAGING_ALREADY,
+ BTS_CTR_PAGING_RESPONDED,
+ BTS_CTR_PAGING_EXPIRED,
+ 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,
+ BTS_CTR_RSL_DELETE_IND,
+ BTS_CTR_MODE_MODIFY_NACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_UNUSED,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_ACTIV_ACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RF_RELEASE_ACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_BORKEN,
+ BTS_CTR_LCHAN_BORKEN_FROM_UNKNOWN,
+ BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_ACK,
+ BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_NACK,
+ BTS_CTR_LCHAN_BORKEN_EV_RF_CHAN_REL_ACK,
+ BTS_CTR_LCHAN_BORKEN_EV_VTY,
+ BTS_CTR_LCHAN_BORKEN_EV_TEARDOWN,
+ BTS_CTR_LCHAN_BORKEN_EV_TS_ERROR,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RR_CHAN_MODE_MODIFY_ACK,
+ BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RSL_CHAN_MODE_MODIFY_ACK,
+ BTS_CTR_TS_BORKEN_FROM_NOT_INITIALIZED,
+ BTS_CTR_TS_BORKEN_FROM_UNUSED,
+ BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_ACT,
+ BTS_CTR_TS_BORKEN_FROM_PDCH,
+ BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_DEACT,
+ BTS_CTR_TS_BORKEN_FROM_IN_USE,
+ BTS_CTR_TS_BORKEN_FROM_BORKEN,
+ BTS_CTR_TS_BORKEN_FROM_UNKNOWN,
+ BTS_CTR_TS_BORKEN_EV_PDCH_ACT_ACK_NACK,
+ BTS_CTR_TS_BORKEN_EV_PDCH_DEACT_ACK_NACK,
+ BTS_CTR_TS_BORKEN_EV_TEARDOWN,
+ BTS_CTR_ASSIGNMENT_ATTEMPTED,
+ BTS_CTR_ASSIGNMENT_ATTEMPTED_SIGN,
+ BTS_CTR_ASSIGNMENT_ATTEMPTED_SPEECH,
+ BTS_CTR_ASSIGNMENT_COMPLETED,
+ BTS_CTR_ASSIGNMENT_COMPLETED_SIGN,
+ BTS_CTR_ASSIGNMENT_COMPLETED_SPEECH,
+ BTS_CTR_ASSIGNMENT_STOPPED,
+ BTS_CTR_ASSIGNMENT_STOPPED_SIGN,
+ BTS_CTR_ASSIGNMENT_STOPPED_SPEECH,
+ BTS_CTR_ASSIGNMENT_NO_CHANNEL,
+ BTS_CTR_ASSIGNMENT_NO_CHANNEL_SIGN,
+ BTS_CTR_ASSIGNMENT_NO_CHANNEL_SPEECH,
+ BTS_CTR_ASSIGNMENT_TIMEOUT,
+ BTS_CTR_ASSIGNMENT_TIMEOUT_SIGN,
+ BTS_CTR_ASSIGNMENT_TIMEOUT_SPEECH,
+ BTS_CTR_ASSIGNMENT_FAILED,
+ BTS_CTR_ASSIGNMENT_FAILED_SIGN,
+ BTS_CTR_ASSIGNMENT_FAILED_SPEECH,
+ BTS_CTR_ASSIGNMENT_ERROR,
+ BTS_CTR_ASSIGNMENT_ERROR_SIGN,
+ BTS_CTR_ASSIGNMENT_ERROR_SPEECH,
+ 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,
+ BTS_CTR_HANDOVER_NO_CHANNEL,
+ BTS_CTR_HANDOVER_TIMEOUT,
+ BTS_CTR_HANDOVER_FAILED,
+ BTS_CTR_HANDOVER_ERROR,
+ BTS_CTR_INTRA_CELL_HO_ATTEMPTED,
+ BTS_CTR_INTRA_CELL_HO_COMPLETED,
+ BTS_CTR_INTRA_CELL_HO_STOPPED,
+ BTS_CTR_INTRA_CELL_HO_NO_CHANNEL,
+ BTS_CTR_INTRA_CELL_HO_TIMEOUT,
+ BTS_CTR_INTRA_CELL_HO_FAILED,
+ BTS_CTR_INTRA_CELL_HO_ERROR,
+ BTS_CTR_INTRA_BSC_HO_ATTEMPTED,
+ BTS_CTR_INTRA_BSC_HO_COMPLETED,
+ BTS_CTR_INTRA_BSC_HO_STOPPED,
+ BTS_CTR_INTRA_BSC_HO_NO_CHANNEL,
+ BTS_CTR_INTRA_BSC_HO_TIMEOUT,
+ BTS_CTR_INTRA_BSC_HO_FAILED,
+ BTS_CTR_INTRA_BSC_HO_ERROR,
+ BTS_CTR_INTER_BSC_HO_OUT_ATTEMPTED,
+ BTS_CTR_INTER_BSC_HO_OUT_COMPLETED,
+ BTS_CTR_INTER_BSC_HO_OUT_STOPPED,
+ BTS_CTR_INTER_BSC_HO_OUT_TIMEOUT,
+ BTS_CTR_INTER_BSC_HO_OUT_FAILED,
+ BTS_CTR_INTER_BSC_HO_OUT_ERROR,
+ BTS_CTR_INTER_BSC_HO_IN_ATTEMPTED,
+ BTS_CTR_INTER_BSC_HO_IN_COMPLETED,
+ BTS_CTR_INTER_BSC_HO_IN_STOPPED,
+ BTS_CTR_INTER_BSC_HO_IN_NO_CHANNEL,
+ BTS_CTR_INTER_BSC_HO_IN_FAILED,
+ BTS_CTR_INTER_BSC_HO_IN_TIMEOUT,
+ BTS_CTR_INTER_BSC_HO_IN_ERROR,
+ BTS_CTR_SRVCC_ATTEMPTED,
+ BTS_CTR_SRVCC_COMPLETED,
+ BTS_CTR_SRVCC_STOPPED,
+ BTS_CTR_SRVCC_NO_CHANNEL,
+ BTS_CTR_SRVCC_TIMEOUT,
+ BTS_CTR_SRVCC_FAILED,
+ BTS_CTR_SRVCC_ERROR,
+};
+
+extern const struct rate_ctr_desc bts_ctr_description[];
+extern const struct rate_ctr_group_desc bts_ctrg_desc;
+
+/* per BTS stat items */
+enum {
+ BTS_STAT_UPTIME_SECONDS,
+ BTS_STAT_CHAN_LOAD_AVERAGE,
+ BTS_STAT_CHAN_CCCH_SDCCH4_USED,
+ BTS_STAT_CHAN_CCCH_SDCCH4_TOTAL,
+ BTS_STAT_CHAN_TCH_F_USED,
+ BTS_STAT_CHAN_TCH_F_TOTAL,
+ BTS_STAT_CHAN_TCH_H_USED,
+ BTS_STAT_CHAN_TCH_H_TOTAL,
+ BTS_STAT_CHAN_SDCCH8_USED,
+ BTS_STAT_CHAN_SDCCH8_TOTAL,
+ BTS_STAT_CHAN_TCH_F_PDCH_USED,
+ BTS_STAT_CHAN_TCH_F_PDCH_TOTAL,
+ BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_USED,
+ BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_TOTAL,
+ BTS_STAT_CHAN_SDCCH8_CBCH_USED,
+ BTS_STAT_CHAN_SDCCH8_CBCH_TOTAL,
+ BTS_STAT_CHAN_OSMO_DYN_USED,
+ BTS_STAT_CHAN_OSMO_DYN_TOTAL,
+ BTS_STAT_T3122,
+ BTS_STAT_RACH_BUSY,
+ BTS_STAT_RACH_ACCESS,
+ BTS_STAT_OML_CONNECTED,
+ BTS_STAT_RSL_CONNECTED,
+ BTS_STAT_LCHAN_BORKEN,
+ BTS_STAT_TS_BORKEN,
+};
+
+extern const struct osmo_stat_item_group_desc bts_statg_desc;
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h
index 291ec10..841c92e 100644
--- a/include/osmocom/bsc/bts.h
+++ b/include/osmocom/bsc/bts.h
@@ -17,169 +17,6 @@
#include "osmocom/bsc/bts_sm.h"
#include "osmocom/bsc/abis_om2000.h"
-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_CHREQ_MAX_DELAY_EXCEEDED,
- BTS_CTR_CHAN_RF_FAIL,
- BTS_CTR_CHAN_RF_FAIL_TCH,
- BTS_CTR_CHAN_RF_FAIL_SDCCH,
- 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,
- BTS_CTR_PAGING_ATTEMPTED,
- BTS_CTR_PAGING_ALREADY,
- BTS_CTR_PAGING_RESPONDED,
- BTS_CTR_PAGING_EXPIRED,
- 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,
- BTS_CTR_RSL_DELETE_IND,
- BTS_CTR_MODE_MODIFY_NACK,
- BTS_CTR_LCHAN_BORKEN_FROM_UNUSED,
- BTS_CTR_LCHAN_BORKEN_FROM_WAIT_ACTIV_ACK,
- BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RF_RELEASE_ACK,
- BTS_CTR_LCHAN_BORKEN_FROM_BORKEN,
- BTS_CTR_LCHAN_BORKEN_FROM_UNKNOWN,
- BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_ACK,
- BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_NACK,
- BTS_CTR_LCHAN_BORKEN_EV_RF_CHAN_REL_ACK,
- BTS_CTR_LCHAN_BORKEN_EV_VTY,
- BTS_CTR_LCHAN_BORKEN_EV_TEARDOWN,
- BTS_CTR_LCHAN_BORKEN_EV_TS_ERROR,
- BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RR_CHAN_MODE_MODIFY_ACK,
- BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RSL_CHAN_MODE_MODIFY_ACK,
- BTS_CTR_TS_BORKEN_FROM_NOT_INITIALIZED,
- BTS_CTR_TS_BORKEN_FROM_UNUSED,
- BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_ACT,
- BTS_CTR_TS_BORKEN_FROM_PDCH,
- BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_DEACT,
- BTS_CTR_TS_BORKEN_FROM_IN_USE,
- BTS_CTR_TS_BORKEN_FROM_BORKEN,
- BTS_CTR_TS_BORKEN_FROM_UNKNOWN,
- BTS_CTR_TS_BORKEN_EV_PDCH_ACT_ACK_NACK,
- BTS_CTR_TS_BORKEN_EV_PDCH_DEACT_ACK_NACK,
- BTS_CTR_TS_BORKEN_EV_TEARDOWN,
- BTS_CTR_ASSIGNMENT_ATTEMPTED,
- BTS_CTR_ASSIGNMENT_ATTEMPTED_SIGN,
- BTS_CTR_ASSIGNMENT_ATTEMPTED_SPEECH,
- BTS_CTR_ASSIGNMENT_COMPLETED,
- BTS_CTR_ASSIGNMENT_COMPLETED_SIGN,
- BTS_CTR_ASSIGNMENT_COMPLETED_SPEECH,
- BTS_CTR_ASSIGNMENT_STOPPED,
- BTS_CTR_ASSIGNMENT_STOPPED_SIGN,
- BTS_CTR_ASSIGNMENT_STOPPED_SPEECH,
- BTS_CTR_ASSIGNMENT_NO_CHANNEL,
- BTS_CTR_ASSIGNMENT_NO_CHANNEL_SIGN,
- BTS_CTR_ASSIGNMENT_NO_CHANNEL_SPEECH,
- BTS_CTR_ASSIGNMENT_TIMEOUT,
- BTS_CTR_ASSIGNMENT_TIMEOUT_SIGN,
- BTS_CTR_ASSIGNMENT_TIMEOUT_SPEECH,
- BTS_CTR_ASSIGNMENT_FAILED,
- BTS_CTR_ASSIGNMENT_FAILED_SIGN,
- BTS_CTR_ASSIGNMENT_FAILED_SPEECH,
- BTS_CTR_ASSIGNMENT_ERROR,
- BTS_CTR_ASSIGNMENT_ERROR_SIGN,
- BTS_CTR_ASSIGNMENT_ERROR_SPEECH,
- 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,
- BTS_CTR_HANDOVER_NO_CHANNEL,
- BTS_CTR_HANDOVER_TIMEOUT,
- BTS_CTR_HANDOVER_FAILED,
- BTS_CTR_HANDOVER_ERROR,
- BTS_CTR_INTRA_CELL_HO_ATTEMPTED,
- BTS_CTR_INTRA_CELL_HO_COMPLETED,
- BTS_CTR_INTRA_CELL_HO_STOPPED,
- BTS_CTR_INTRA_CELL_HO_NO_CHANNEL,
- BTS_CTR_INTRA_CELL_HO_TIMEOUT,
- BTS_CTR_INTRA_CELL_HO_FAILED,
- BTS_CTR_INTRA_CELL_HO_ERROR,
- BTS_CTR_INTRA_BSC_HO_ATTEMPTED,
- BTS_CTR_INTRA_BSC_HO_COMPLETED,
- BTS_CTR_INTRA_BSC_HO_STOPPED,
- BTS_CTR_INTRA_BSC_HO_NO_CHANNEL,
- BTS_CTR_INTRA_BSC_HO_TIMEOUT,
- BTS_CTR_INTRA_BSC_HO_FAILED,
- BTS_CTR_INTRA_BSC_HO_ERROR,
- BTS_CTR_INTER_BSC_HO_OUT_ATTEMPTED,
- BTS_CTR_INTER_BSC_HO_OUT_COMPLETED,
- BTS_CTR_INTER_BSC_HO_OUT_STOPPED,
- BTS_CTR_INTER_BSC_HO_OUT_TIMEOUT,
- BTS_CTR_INTER_BSC_HO_OUT_FAILED,
- BTS_CTR_INTER_BSC_HO_OUT_ERROR,
- BTS_CTR_INTER_BSC_HO_IN_ATTEMPTED,
- BTS_CTR_INTER_BSC_HO_IN_COMPLETED,
- BTS_CTR_INTER_BSC_HO_IN_STOPPED,
- BTS_CTR_INTER_BSC_HO_IN_NO_CHANNEL,
- BTS_CTR_INTER_BSC_HO_IN_FAILED,
- BTS_CTR_INTER_BSC_HO_IN_TIMEOUT,
- BTS_CTR_INTER_BSC_HO_IN_ERROR,
- BTS_CTR_SRVCC_ATTEMPTED,
- BTS_CTR_SRVCC_COMPLETED,
- BTS_CTR_SRVCC_STOPPED,
- BTS_CTR_SRVCC_NO_CHANNEL,
- BTS_CTR_SRVCC_TIMEOUT,
- BTS_CTR_SRVCC_FAILED,
- BTS_CTR_SRVCC_ERROR,
-};
-
-extern const struct rate_ctr_desc bts_ctr_description[];
-extern const struct rate_ctr_group_desc bts_ctrg_desc;
-
-enum {
- BTS_STAT_UPTIME_SECONDS,
- BTS_STAT_CHAN_LOAD_AVERAGE,
- BTS_STAT_CHAN_CCCH_SDCCH4_USED,
- BTS_STAT_CHAN_CCCH_SDCCH4_TOTAL,
- BTS_STAT_CHAN_TCH_F_USED,
- BTS_STAT_CHAN_TCH_F_TOTAL,
- BTS_STAT_CHAN_TCH_H_USED,
- BTS_STAT_CHAN_TCH_H_TOTAL,
- BTS_STAT_CHAN_SDCCH8_USED,
- BTS_STAT_CHAN_SDCCH8_TOTAL,
- BTS_STAT_CHAN_TCH_F_PDCH_USED,
- BTS_STAT_CHAN_TCH_F_PDCH_TOTAL,
- BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_USED,
- BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_TOTAL,
- BTS_STAT_CHAN_SDCCH8_CBCH_USED,
- BTS_STAT_CHAN_SDCCH8_CBCH_TOTAL,
- BTS_STAT_CHAN_OSMO_DYN_USED,
- BTS_STAT_CHAN_OSMO_DYN_TOTAL,
- BTS_STAT_T3122,
- BTS_STAT_RACH_BUSY,
- BTS_STAT_RACH_ACCESS,
- BTS_STAT_OML_CONNECTED,
- BTS_STAT_RSL_CONNECTED,
- BTS_STAT_LCHAN_BORKEN,
- BTS_STAT_TS_BORKEN,
-};
-
-extern const struct osmo_stat_item_desc bts_stat_desc[];
-extern const struct osmo_stat_item_group_desc bts_statg_desc;
-
enum gsm_bts_type {
GSM_BTS_TYPE_UNKNOWN,
GSM_BTS_TYPE_BS11,
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c
index 26231ac..879e5b4 100644
--- a/src/osmo-bsc/abis_rsl.c
+++ b/src/osmo-bsc/abis_rsl.c
@@ -55,6 +55,7 @@
#include <osmocom/bsc/handover_fsm.h>
#include <osmocom/bsc/smscb.h>
#include <osmocom/bsc/bts.h>
+#include <osmocom/bsc/bsc_stats.h>
static void send_lchan_signal(int sig_no, struct gsm_lchan *lchan,
struct gsm_meas_rep *resp)
diff --git a/src/osmo-bsc/bsc_stats.c b/src/osmo-bsc/bsc_stats.c
index f33e6c8..e12426a 100644
--- a/src/osmo-bsc/bsc_stats.c
+++ b/src/osmo-bsc/bsc_stats.c
@@ -181,3 +181,509 @@
trx_rsl_connected_total);
osmo_stat_item_set(osmo_stat_item_group_get_item(net->bsc_statg, BSC_STAT_NUM_TRX_TOTAL), num_trx_total);
}
+
+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)" },
+ [BTS_CTR_CHREQ_NO_CHANNEL] = \
+ { "chreq:no_channel",
+ "Sent to MS no channel available" },
+ [BTS_CTR_CHREQ_MAX_DELAY_EXCEEDED] = \
+ { "chreq:max_delay_exceeded",
+ "Received channel requests with greater than permitted access delay" },
+ [BTS_CTR_CHAN_RF_FAIL] = \
+ { "chan:rf_fail",
+ "Received a RF failure indication from BTS" },
+ [BTS_CTR_CHAN_RF_FAIL_TCH] = \
+ { "chan:rf_fail_tch",
+ "Received a RF failure indication from BTS on a TCH channel" },
+ [BTS_CTR_CHAN_RF_FAIL_SDCCH] = \
+ { "chan:rf_fail_sdcch",
+ "Received a RF failure indication from BTS on an SDCCH channel" },
+ [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" },
+ [BTS_CTR_PAGING_ATTEMPTED] = \
+ { "paging:attempted",
+ "Paging attempts for a subscriber" },
+ [BTS_CTR_PAGING_ALREADY] = \
+ { "paging:already",
+ "Paging attempts ignored as subscriber was already being paged" },
+ [BTS_CTR_PAGING_RESPONDED] = \
+ { "paging:responded",
+ "Paging attempts with successful paging response" },
+ [BTS_CTR_PAGING_EXPIRED] = \
+ { "paging:expired",
+ "Paging Request expired because of timeout T3113" },
+ [BTS_CTR_PAGING_NO_ACTIVE_PAGING] = \
+ { "paging:no_active_paging",
+ "Paging response without an active paging request (arrived after paging expiration?)" },
+ [BTS_CTR_PAGING_MSC_FLUSH] = \
+ { "paging:msc_flush",
+ "Paging flushed due to MSC Reset BSSMAP message" },
+ [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" },
+ [BTS_CTR_RSL_UNKNOWN] = \
+ { "rsl:unknown",
+ "Number of unknown/unsupported RSL messages received from BTS" },
+ [BTS_CTR_RSL_IPA_NACK] = \
+ { "rsl:ipa_nack",
+ "Number of IPA (RTP/dyn-PDCH) related NACKs received from BTS" },
+ [BTS_CTR_RSL_DELETE_IND] = \
+ { "rsl:delete_ind",
+ "Number of RSL DELETE INDICATION (DL CCCH overload)" },
+ [BTS_CTR_MODE_MODIFY_NACK] = \
+ { "chan:mode_modify_nack",
+ "Number of Channel Mode Modify NACKs received from BTS" },
+
+ /* lchan/TS BORKEN state counters */
+ [BTS_CTR_LCHAN_BORKEN_FROM_UNUSED] = \
+ { "lchan_borken:from_state:unused",
+ "Transitions from lchan UNUSED state to BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_ACTIV_ACK] = \
+ { "lchan_borken:from_state:wait_activ_ack",
+ "Transitions from lchan WAIT_ACTIV_ACK state to BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RF_RELEASE_ACK] = \
+ { "lchan_borken:from_state:wait_rf_release_ack",
+ "Transitions from lchan WAIT_RF_RELEASE_ACK state to BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_FROM_BORKEN] = \
+ { "lchan_borken:from_state:borken",
+ "Transitions from lchan BORKEN state to BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RR_CHAN_MODE_MODIFY_ACK] = \
+ { "lchan_borken:from_state:wait_rr_chan_mode_modify_ack",
+ "Transitions from lchan WAIT_RR_CHAN_MODE_MODIFY_ACK state to BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RSL_CHAN_MODE_MODIFY_ACK] = \
+ { "lchan_borken:from_state:wait_rsl_chan_mode_modify_ack",
+ "Transitions from lchan RSL_CHAN_MODE_MODIFY_ACK state to BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_FROM_UNKNOWN] = \
+ { "lchan_borken:from_state:unknown",
+ "Transitions from an unknown lchan state to BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_ACK] = \
+ { "lchan_borken:event:chan_activ_ack",
+ "CHAN_ACTIV_ACK received in the lchan BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_NACK] = \
+ { "lchan_borken:event:chan_activ_nack",
+ "CHAN_ACTIV_NACK received in the lchan BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_EV_RF_CHAN_REL_ACK] = \
+ { "lchan_borken:event:rf_chan_rel_ack",
+ "RF_CHAN_REL_ACK received in the lchan BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_EV_VTY] = \
+ { "lchan_borken:event:vty",
+ "VTY commands received in the lchan BORKEN state" },
+ [BTS_CTR_LCHAN_BORKEN_EV_TEARDOWN] = \
+ { "lchan_borken:event:teardown",
+ "lchan in a BORKEN state is shutting down (BTS disconnected?)" },
+ [BTS_CTR_LCHAN_BORKEN_EV_TS_ERROR] = \
+ { "lchan_borken:event:ts_error",
+ "LCHAN_EV_TS_ERROR received in a BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_NOT_INITIALIZED] = \
+ { "ts_borken:from_state:not_initialized",
+ "Transitions from TS NOT_INITIALIZED state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_UNUSED] = \
+ { "ts_borken:from_state:unused",
+ "Transitions from TS UNUSED state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_ACT] = \
+ { "ts_borken:from_state:wait_pdch_act",
+ "Transitions from TS WAIT_PDCH_ACT state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_PDCH] = \
+ { "ts_borken:from_state:pdch",
+ "Transitions from TS PDCH state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_DEACT] = \
+ { "ts_borken:from_state:wait_pdch_deact",
+ "Transitions from TS WAIT_PDCH_DEACT state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_IN_USE] = \
+ { "ts_borken:from_state:in_use",
+ "Transitions from TS IN_USE state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_BORKEN] = \
+ { "ts_borken:from_state:borken",
+ "Transitions from TS BORKEN state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_FROM_UNKNOWN] = \
+ { "ts_borken:from_state:unknown",
+ "Transitions from an unknown TS state to BORKEN state" },
+ [BTS_CTR_TS_BORKEN_EV_PDCH_ACT_ACK_NACK] = \
+ { "ts_borken:event:pdch_act_ack_nack",
+ "PDCH_ACT_ACK/NACK received in the TS BORKEN state" },
+ [BTS_CTR_TS_BORKEN_EV_PDCH_DEACT_ACK_NACK] = \
+ { "ts_borken:event:pdch_deact_ack_nack",
+ "PDCH_DEACT_ACK/NACK received in the TS BORKEN state" },
+ [BTS_CTR_TS_BORKEN_EV_TEARDOWN] = \
+ { "ts_borken:event:teardown",
+ "TS in a BORKEN state is shutting down (BTS disconnected?)" },
+ [BTS_CTR_ASSIGNMENT_ATTEMPTED] = \
+ { "assignment:attempted",
+ "Assignment attempts" },
+ [BTS_CTR_ASSIGNMENT_ATTEMPTED_SIGN] = \
+ { "assignment:attempted_sign",
+ "Assignment of signaling lchan attempts" },
+ [BTS_CTR_ASSIGNMENT_ATTEMPTED_SPEECH] = \
+ { "assignment:attempted_speech",
+ "Assignment of speech lchan attempts" },
+ [BTS_CTR_ASSIGNMENT_COMPLETED] = \
+ { "assignment:completed",
+ "Assignment completed" },
+ [BTS_CTR_ASSIGNMENT_COMPLETED_SIGN] = \
+ { "assignment:completed_sign",
+ "Assignment of signaling lchan completed" },
+ [BTS_CTR_ASSIGNMENT_COMPLETED_SPEECH] = \
+ { "assignment:completed_speech",
+ "Assignment if speech lchan completed" },
+ [BTS_CTR_ASSIGNMENT_STOPPED] = \
+ { "assignment:stopped",
+ "Connection ended during Assignment" },
+ [BTS_CTR_ASSIGNMENT_STOPPED_SIGN] = \
+ { "assignment:stopped_sign",
+ "Connection ended during signaling lchan Assignment" },
+ [BTS_CTR_ASSIGNMENT_STOPPED_SPEECH] = \
+ { "assignment:stopped_speech",
+ "Connection ended during speech lchan Assignment" },
+ [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" },
+ [BTS_CTR_ASSIGNMENT_TIMEOUT_SIGN] = \
+ { "assignment:timeout_sign",
+ "Assignment of signaling lchan timed out" },
+ [BTS_CTR_ASSIGNMENT_TIMEOUT_SPEECH] = \
+ { "assignment:timeout_speech",
+ "Assignment of speech lchan timed out" },
+ [BTS_CTR_ASSIGNMENT_FAILED] = \
+ { "assignment:failed",
+ "Received Assignment Failure message" },
+ [BTS_CTR_ASSIGNMENT_FAILED_SIGN] = \
+ { "assignment:failed_sign",
+ "Received Assignment Failure message on signaling lchan" },
+ [BTS_CTR_ASSIGNMENT_FAILED_SPEECH] = \
+ { "assignment:failed_speech",
+ "Received Assignment Failure message on speech lchan" },
+ [BTS_CTR_ASSIGNMENT_ERROR] = \
+ { "assignment:error",
+ "Assignment failed for other reason" },
+ [BTS_CTR_ASSIGNMENT_ERROR_SIGN] = \
+ { "assignment:error_sign",
+ "Assignment of signaling lchan failed for other reason" },
+ [BTS_CTR_ASSIGNMENT_ERROR_SPEECH] = \
+ { "assignment:error_speech",
+ "Assignment of speech lchan 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" },
+ [BTS_CTR_HANDOVER_COMPLETED] = \
+ { "handover:completed",
+ "Intra-BSC handover completed" },
+ [BTS_CTR_HANDOVER_STOPPED] = \
+ { "handover:stopped",
+ "Connection ended during HO" },
+ [BTS_CTR_HANDOVER_NO_CHANNEL] = \
+ { "handover:no_channel",
+ "Failure to allocate lchan for HO" },
+ [BTS_CTR_HANDOVER_TIMEOUT] = \
+ { "handover:timeout",
+ "Handover timed out" },
+ [BTS_CTR_HANDOVER_FAILED] = \
+ { "handover:failed",
+ "Received Handover Fail messages" },
+ [BTS_CTR_HANDOVER_ERROR] = \
+ { "handover:error",
+ "Re-assignment failed for other reason" },
+
+ [BTS_CTR_INTRA_CELL_HO_ATTEMPTED] = \
+ { "intra_cell_ho:attempted",
+ "Intra-Cell handover attempts" },
+ [BTS_CTR_INTRA_CELL_HO_COMPLETED] = \
+ { "intra_cell_ho:completed",
+ "Intra-Cell handover completed" },
+ [BTS_CTR_INTRA_CELL_HO_STOPPED] = \
+ { "intra_cell_ho:stopped",
+ "Connection ended during HO" },
+ [BTS_CTR_INTRA_CELL_HO_NO_CHANNEL] = \
+ { "intra_cell_ho:no_channel",
+ "Failure to allocate lchan for HO" },
+ [BTS_CTR_INTRA_CELL_HO_TIMEOUT] = \
+ { "intra_cell_ho:timeout",
+ "Handover timed out" },
+ [BTS_CTR_INTRA_CELL_HO_FAILED] = \
+ { "intra_cell_ho:failed",
+ "Received Handover Fail messages" },
+ [BTS_CTR_INTRA_CELL_HO_ERROR] = \
+ { "intra_cell_ho:error",
+ "Re-assignment failed for other reason" },
+
+ [BTS_CTR_INTRA_BSC_HO_ATTEMPTED] = \
+ { "intra_bsc_ho:attempted",
+ "Intra-BSC handover attempts" },
+ [BTS_CTR_INTRA_BSC_HO_COMPLETED] = \
+ { "intra_bsc_ho:completed",
+ "Intra-BSC handover completed" },
+ [BTS_CTR_INTRA_BSC_HO_STOPPED] = \
+ { "intra_bsc_ho:stopped",
+ "Connection ended during HO" },
+ [BTS_CTR_INTRA_BSC_HO_NO_CHANNEL] = \
+ { "intra_bsc_ho:no_channel",
+ "Failure to allocate lchan for HO" },
+ [BTS_CTR_INTRA_BSC_HO_TIMEOUT] = \
+ { "intra_bsc_ho:timeout",
+ "Handover timed out" },
+ [BTS_CTR_INTRA_BSC_HO_FAILED] = \
+ { "intra_bsc_ho:failed",
+ "Received Handover Fail messages" },
+ [BTS_CTR_INTRA_BSC_HO_ERROR] = \
+ { "intra_bsc_ho:error",
+ "Re-assignment failed for other reason" },
+
+ [BTS_CTR_INTER_BSC_HO_OUT_ATTEMPTED] = \
+ { "interbsc_ho_out:attempted",
+ "Attempts to handover to remote BSS" },
+ [BTS_CTR_INTER_BSC_HO_OUT_COMPLETED] = \
+ { "interbsc_ho_out:completed",
+ "Handover to remote BSS completed" },
+ [BTS_CTR_INTER_BSC_HO_OUT_STOPPED] = \
+ { "interbsc_ho_out:stopped",
+ "Connection ended during HO" },
+ [BTS_CTR_INTER_BSC_HO_OUT_TIMEOUT] = \
+ { "interbsc_ho_out:timeout",
+ "Handover timed out" },
+ [BTS_CTR_INTER_BSC_HO_OUT_FAILED] = \
+ { "interbsc_ho_out:failed",
+ "Received Handover Fail message" },
+ [BTS_CTR_INTER_BSC_HO_OUT_ERROR] = \
+ { "interbsc_ho_out:error",
+ "Handover to remote BSS failed for other reason" },
+ [BTS_CTR_INTER_BSC_HO_IN_ATTEMPTED] = \
+ { "interbsc_ho_in:attempted",
+ "Attempts to handover from remote BSS" },
+ [BTS_CTR_INTER_BSC_HO_IN_COMPLETED] = \
+ { "interbsc_ho_in:completed",
+ "Handover from remote BSS completed" },
+ [BTS_CTR_INTER_BSC_HO_IN_STOPPED] = \
+ { "interbsc_ho_in:stopped",
+ "Connection ended during HO" },
+ [BTS_CTR_INTER_BSC_HO_IN_NO_CHANNEL] = \
+ { "interbsc_ho_in:no_channel",
+ "Failure to allocate lchan for HO" },
+ [BTS_CTR_INTER_BSC_HO_IN_TIMEOUT] = \
+ { "interbsc_ho_in:timeout",
+ "Handover from remote BSS timed out" },
+ [BTS_CTR_INTER_BSC_HO_IN_FAILED] = \
+ { "interbsc_ho_in:failed",
+ "Received Handover Fail message" },
+ [BTS_CTR_INTER_BSC_HO_IN_ERROR] = \
+ { "interbsc_ho_in:error",
+ "Handover from remote BSS failed for other reason" },
+
+ [BTS_CTR_SRVCC_ATTEMPTED] = \
+ { "srvcc:attempted",
+ "Intra-BSC handover attempts" },
+ [BTS_CTR_SRVCC_COMPLETED] = \
+ { "srvcc:completed",
+ "Intra-BSC handover completed" },
+ [BTS_CTR_SRVCC_STOPPED] = \
+ { "srvcc:stopped",
+ "Connection ended during HO" },
+ [BTS_CTR_SRVCC_NO_CHANNEL] = \
+ { "srvcc:no_channel",
+ "Failure to allocate lchan for HO" },
+ [BTS_CTR_SRVCC_TIMEOUT] = \
+ { "srvcc:timeout",
+ "Handover timed out" },
+ [BTS_CTR_SRVCC_FAILED] = \
+ { "srvcc:failed",
+ "Received Handover Fail messages" },
+ [BTS_CTR_SRVCC_ERROR] = \
+ { "srvcc:error",
+ "Re-assignment failed for other reason" },
+};
+
+const struct rate_ctr_group_desc bts_ctrg_desc = {
+ "bts",
+ "base transceiver station",
+ OSMO_STATS_CLASS_GLOBAL,
+ ARRAY_SIZE(bts_ctr_description),
+ bts_ctr_description,
+};
+
+const struct osmo_stat_item_desc bts_stat_desc[] = {
+ [BTS_STAT_UPTIME_SECONDS] = \
+ { "uptime:seconds",
+ "Seconds of uptime",
+ "s", 60, 0 },
+ [BTS_STAT_CHAN_LOAD_AVERAGE] = \
+ { "chanloadavg",
+ "Channel load average",
+ "%", 60, 0 },
+ [BTS_STAT_CHAN_CCCH_SDCCH4_USED] = \
+ { "chan_ccch_sdcch4:used",
+ "Number of CCCH+SDCCH4 channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_CCCH_SDCCH4_TOTAL] = \
+ { "chan_ccch_sdcch4:total",
+ "Number of CCCH+SDCCH4 channels total",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_TCH_F_USED] = \
+ { "chan_tch_f:used",
+ "Number of TCH/F channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_TCH_F_TOTAL] = \
+ { "chan_tch_f:total",
+ "Number of TCH/F channels total",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_TCH_H_USED] = \
+ { "chan_tch_h:used",
+ "Number of TCH/H channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_TCH_H_TOTAL] = \
+ { "chan_tch_h:total",
+ "Number of TCH/H channels total",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_SDCCH8_USED] = \
+ { "chan_sdcch8:used",
+ "Number of SDCCH8 channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_SDCCH8_TOTAL] = \
+ { "chan_sdcch8:total",
+ "Number of SDCCH8 channels total",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_TCH_F_PDCH_USED] = \
+ { "chan_tch_f_pdch:used",
+ "Number of TCH/F_PDCH channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_TCH_F_PDCH_TOTAL] = \
+ { "chan_tch_f_pdch:total",
+ "Number of TCH/F_PDCH channels total",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_USED] = \
+ { "chan_ccch_sdcch4_cbch:used",
+ "Number of CCCH+SDCCH4+CBCH channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_TOTAL] = \
+ { "chan_ccch_sdcch4_cbch:total",
+ "Number of CCCH+SDCCH4+CBCH channels total",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_SDCCH8_CBCH_USED] = \
+ { "chan_sdcch8_cbch:used",
+ "Number of SDCCH8+CBCH channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_SDCCH8_CBCH_TOTAL] = \
+ { "chan_sdcch8_cbch:total",
+ "Number of SDCCH8+CBCH channels total",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_OSMO_DYN_USED] = \
+ { "chan_osmo_dyn:used",
+ "Number of TCH/F_TCH/H_SDCCH8_PDCH channels used",
+ "", 60, 0 },
+ [BTS_STAT_CHAN_OSMO_DYN_TOTAL] = \
+ { "chan_osmo_dyn:total",
+ "Number of TCH/F_TCH/H_SDCCH8_PDCH channels total",
+ "", 60, 0 },
+ [BTS_STAT_T3122] = \
+ { "T3122",
+ "T3122 IMMEDIATE ASSIGNMENT REJECT wait indicator",
+ "s", 60, GSM_T3122_DEFAULT },
+ [BTS_STAT_RACH_BUSY] = \
+ { "rach_busy",
+ "RACH slots with signal above threshold",
+ "%", 60, 0 },
+ [BTS_STAT_RACH_ACCESS] = \
+ { "rach_access",
+ "RACH slots with access bursts in them",
+ "%", 60, 0 },
+ [BTS_STAT_OML_CONNECTED] = \
+ { "oml_connected",
+ "Number of OML links connected",
+ "", 16, 0 },
+ [BTS_STAT_RSL_CONNECTED] = \
+ { "rsl_connected",
+ "Number of RSL links connected",
+ "", 16, 0 },
+ [BTS_STAT_LCHAN_BORKEN] = \
+ { "lchan_borken",
+ "Number of lchans in the BORKEN state",
+ "", 16, 0 },
+ [BTS_STAT_TS_BORKEN] = \
+ { "ts_borken",
+ "Number of timeslots in the BORKEN state",
+ "", 16, 0 },
+};
+
+const struct osmo_stat_item_group_desc bts_statg_desc = {
+ .group_name_prefix = "bts",
+ .group_description = "base transceiver station",
+ .class_id = OSMO_STATS_CLASS_GLOBAL,
+ .num_items = ARRAY_SIZE(bts_stat_desc),
+ .item_desc = bts_stat_desc,
+};
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c
index 5ce1d69..cb844e0 100644
--- a/src/osmo-bsc/bsc_vty.c
+++ b/src/osmo-bsc/bsc_vty.c
@@ -63,6 +63,7 @@
#include <osmocom/bsc/bsc_subscr_conn_fsm.h>
#include <osmocom/bsc/assignment_fsm.h>
#include <osmocom/bsc/bssmap_reset.h>
+#include <osmocom/bsc/bsc_stats.h>
#include <inttypes.h>
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index c0d6634..d647a70 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -24,6 +24,7 @@
#include <osmocom/bsc/bts.h>
#include <osmocom/bsc/debug.h>
#include <osmocom/bsc/nm_common_fsm.h>
+#include <osmocom/bsc/bsc_stats.h>
const struct value_string bts_attribute_names[] = {
OSMO_VALUE_STRING(BTS_TYPE_VARIANT),
@@ -816,509 +817,3 @@
osmo_stat_item_set(osmo_stat_item_group_get_item(bts->bts_statg, BTS_STAT_CHAN_OSMO_DYN_USED), 0);
osmo_stat_item_set(osmo_stat_item_group_get_item(bts->bts_statg, BTS_STAT_CHAN_OSMO_DYN_TOTAL), 0);
}
-
-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)" },
- [BTS_CTR_CHREQ_NO_CHANNEL] = \
- { "chreq:no_channel",
- "Sent to MS no channel available" },
- [BTS_CTR_CHREQ_MAX_DELAY_EXCEEDED] = \
- { "chreq:max_delay_exceeded",
- "Received channel requests with greater than permitted access delay" },
- [BTS_CTR_CHAN_RF_FAIL] = \
- { "chan:rf_fail",
- "Received a RF failure indication from BTS" },
- [BTS_CTR_CHAN_RF_FAIL_TCH] = \
- { "chan:rf_fail_tch",
- "Received a RF failure indication from BTS on a TCH channel" },
- [BTS_CTR_CHAN_RF_FAIL_SDCCH] = \
- { "chan:rf_fail_sdcch",
- "Received a RF failure indication from BTS on an SDCCH channel" },
- [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" },
- [BTS_CTR_PAGING_ATTEMPTED] = \
- { "paging:attempted",
- "Paging attempts for a subscriber" },
- [BTS_CTR_PAGING_ALREADY] = \
- { "paging:already",
- "Paging attempts ignored as subscriber was already being paged" },
- [BTS_CTR_PAGING_RESPONDED] = \
- { "paging:responded",
- "Paging attempts with successful paging response" },
- [BTS_CTR_PAGING_EXPIRED] = \
- { "paging:expired",
- "Paging Request expired because of timeout T3113" },
- [BTS_CTR_PAGING_NO_ACTIVE_PAGING] = \
- { "paging:no_active_paging",
- "Paging response without an active paging request (arrived after paging expiration?)" },
- [BTS_CTR_PAGING_MSC_FLUSH] = \
- { "paging:msc_flush",
- "Paging flushed due to MSC Reset BSSMAP message" },
- [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" },
- [BTS_CTR_RSL_UNKNOWN] = \
- { "rsl:unknown",
- "Number of unknown/unsupported RSL messages received from BTS" },
- [BTS_CTR_RSL_IPA_NACK] = \
- { "rsl:ipa_nack",
- "Number of IPA (RTP/dyn-PDCH) related NACKs received from BTS" },
- [BTS_CTR_RSL_DELETE_IND] = \
- { "rsl:delete_ind",
- "Number of RSL DELETE INDICATION (DL CCCH overload)" },
- [BTS_CTR_MODE_MODIFY_NACK] = \
- { "chan:mode_modify_nack",
- "Number of Channel Mode Modify NACKs received from BTS" },
-
- /* lchan/TS BORKEN state counters */
- [BTS_CTR_LCHAN_BORKEN_FROM_UNUSED] = \
- { "lchan_borken:from_state:unused",
- "Transitions from lchan UNUSED state to BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_ACTIV_ACK] = \
- { "lchan_borken:from_state:wait_activ_ack",
- "Transitions from lchan WAIT_ACTIV_ACK state to BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RF_RELEASE_ACK] = \
- { "lchan_borken:from_state:wait_rf_release_ack",
- "Transitions from lchan WAIT_RF_RELEASE_ACK state to BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_FROM_BORKEN] = \
- { "lchan_borken:from_state:borken",
- "Transitions from lchan BORKEN state to BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RR_CHAN_MODE_MODIFY_ACK] = \
- { "lchan_borken:from_state:wait_rr_chan_mode_modify_ack",
- "Transitions from lchan WAIT_RR_CHAN_MODE_MODIFY_ACK state to BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_FROM_WAIT_RSL_CHAN_MODE_MODIFY_ACK] = \
- { "lchan_borken:from_state:wait_rsl_chan_mode_modify_ack",
- "Transitions from lchan RSL_CHAN_MODE_MODIFY_ACK state to BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_FROM_UNKNOWN] = \
- { "lchan_borken:from_state:unknown",
- "Transitions from an unknown lchan state to BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_ACK] = \
- { "lchan_borken:event:chan_activ_ack",
- "CHAN_ACTIV_ACK received in the lchan BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_EV_CHAN_ACTIV_NACK] = \
- { "lchan_borken:event:chan_activ_nack",
- "CHAN_ACTIV_NACK received in the lchan BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_EV_RF_CHAN_REL_ACK] = \
- { "lchan_borken:event:rf_chan_rel_ack",
- "RF_CHAN_REL_ACK received in the lchan BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_EV_VTY] = \
- { "lchan_borken:event:vty",
- "VTY commands received in the lchan BORKEN state" },
- [BTS_CTR_LCHAN_BORKEN_EV_TEARDOWN] = \
- { "lchan_borken:event:teardown",
- "lchan in a BORKEN state is shutting down (BTS disconnected?)" },
- [BTS_CTR_LCHAN_BORKEN_EV_TS_ERROR] = \
- { "lchan_borken:event:ts_error",
- "LCHAN_EV_TS_ERROR received in a BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_NOT_INITIALIZED] = \
- { "ts_borken:from_state:not_initialized",
- "Transitions from TS NOT_INITIALIZED state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_UNUSED] = \
- { "ts_borken:from_state:unused",
- "Transitions from TS UNUSED state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_ACT] = \
- { "ts_borken:from_state:wait_pdch_act",
- "Transitions from TS WAIT_PDCH_ACT state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_PDCH] = \
- { "ts_borken:from_state:pdch",
- "Transitions from TS PDCH state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_WAIT_PDCH_DEACT] = \
- { "ts_borken:from_state:wait_pdch_deact",
- "Transitions from TS WAIT_PDCH_DEACT state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_IN_USE] = \
- { "ts_borken:from_state:in_use",
- "Transitions from TS IN_USE state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_BORKEN] = \
- { "ts_borken:from_state:borken",
- "Transitions from TS BORKEN state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_FROM_UNKNOWN] = \
- { "ts_borken:from_state:unknown",
- "Transitions from an unknown TS state to BORKEN state" },
- [BTS_CTR_TS_BORKEN_EV_PDCH_ACT_ACK_NACK] = \
- { "ts_borken:event:pdch_act_ack_nack",
- "PDCH_ACT_ACK/NACK received in the TS BORKEN state" },
- [BTS_CTR_TS_BORKEN_EV_PDCH_DEACT_ACK_NACK] = \
- { "ts_borken:event:pdch_deact_ack_nack",
- "PDCH_DEACT_ACK/NACK received in the TS BORKEN state" },
- [BTS_CTR_TS_BORKEN_EV_TEARDOWN] = \
- { "ts_borken:event:teardown",
- "TS in a BORKEN state is shutting down (BTS disconnected?)" },
- [BTS_CTR_ASSIGNMENT_ATTEMPTED] = \
- { "assignment:attempted",
- "Assignment attempts" },
- [BTS_CTR_ASSIGNMENT_ATTEMPTED_SIGN] = \
- { "assignment:attempted_sign",
- "Assignment of signaling lchan attempts" },
- [BTS_CTR_ASSIGNMENT_ATTEMPTED_SPEECH] = \
- { "assignment:attempted_speech",
- "Assignment of speech lchan attempts" },
- [BTS_CTR_ASSIGNMENT_COMPLETED] = \
- { "assignment:completed",
- "Assignment completed" },
- [BTS_CTR_ASSIGNMENT_COMPLETED_SIGN] = \
- { "assignment:completed_sign",
- "Assignment of signaling lchan completed" },
- [BTS_CTR_ASSIGNMENT_COMPLETED_SPEECH] = \
- { "assignment:completed_speech",
- "Assignment if speech lchan completed" },
- [BTS_CTR_ASSIGNMENT_STOPPED] = \
- { "assignment:stopped",
- "Connection ended during Assignment" },
- [BTS_CTR_ASSIGNMENT_STOPPED_SIGN] = \
- { "assignment:stopped_sign",
- "Connection ended during signaling lchan Assignment" },
- [BTS_CTR_ASSIGNMENT_STOPPED_SPEECH] = \
- { "assignment:stopped_speech",
- "Connection ended during speech lchan Assignment" },
- [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" },
- [BTS_CTR_ASSIGNMENT_TIMEOUT_SIGN] = \
- { "assignment:timeout_sign",
- "Assignment of signaling lchan timed out" },
- [BTS_CTR_ASSIGNMENT_TIMEOUT_SPEECH] = \
- { "assignment:timeout_speech",
- "Assignment of speech lchan timed out" },
- [BTS_CTR_ASSIGNMENT_FAILED] = \
- { "assignment:failed",
- "Received Assignment Failure message" },
- [BTS_CTR_ASSIGNMENT_FAILED_SIGN] = \
- { "assignment:failed_sign",
- "Received Assignment Failure message on signaling lchan" },
- [BTS_CTR_ASSIGNMENT_FAILED_SPEECH] = \
- { "assignment:failed_speech",
- "Received Assignment Failure message on speech lchan" },
- [BTS_CTR_ASSIGNMENT_ERROR] = \
- { "assignment:error",
- "Assignment failed for other reason" },
- [BTS_CTR_ASSIGNMENT_ERROR_SIGN] = \
- { "assignment:error_sign",
- "Assignment of signaling lchan failed for other reason" },
- [BTS_CTR_ASSIGNMENT_ERROR_SPEECH] = \
- { "assignment:error_speech",
- "Assignment of speech lchan 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" },
- [BTS_CTR_HANDOVER_COMPLETED] = \
- { "handover:completed",
- "Intra-BSC handover completed" },
- [BTS_CTR_HANDOVER_STOPPED] = \
- { "handover:stopped",
- "Connection ended during HO" },
- [BTS_CTR_HANDOVER_NO_CHANNEL] = \
- { "handover:no_channel",
- "Failure to allocate lchan for HO" },
- [BTS_CTR_HANDOVER_TIMEOUT] = \
- { "handover:timeout",
- "Handover timed out" },
- [BTS_CTR_HANDOVER_FAILED] = \
- { "handover:failed",
- "Received Handover Fail messages" },
- [BTS_CTR_HANDOVER_ERROR] = \
- { "handover:error",
- "Re-assignment failed for other reason" },
-
- [BTS_CTR_INTRA_CELL_HO_ATTEMPTED] = \
- { "intra_cell_ho:attempted",
- "Intra-Cell handover attempts" },
- [BTS_CTR_INTRA_CELL_HO_COMPLETED] = \
- { "intra_cell_ho:completed",
- "Intra-Cell handover completed" },
- [BTS_CTR_INTRA_CELL_HO_STOPPED] = \
- { "intra_cell_ho:stopped",
- "Connection ended during HO" },
- [BTS_CTR_INTRA_CELL_HO_NO_CHANNEL] = \
- { "intra_cell_ho:no_channel",
- "Failure to allocate lchan for HO" },
- [BTS_CTR_INTRA_CELL_HO_TIMEOUT] = \
- { "intra_cell_ho:timeout",
- "Handover timed out" },
- [BTS_CTR_INTRA_CELL_HO_FAILED] = \
- { "intra_cell_ho:failed",
- "Received Handover Fail messages" },
- [BTS_CTR_INTRA_CELL_HO_ERROR] = \
- { "intra_cell_ho:error",
- "Re-assignment failed for other reason" },
-
- [BTS_CTR_INTRA_BSC_HO_ATTEMPTED] = \
- { "intra_bsc_ho:attempted",
- "Intra-BSC handover attempts" },
- [BTS_CTR_INTRA_BSC_HO_COMPLETED] = \
- { "intra_bsc_ho:completed",
- "Intra-BSC handover completed" },
- [BTS_CTR_INTRA_BSC_HO_STOPPED] = \
- { "intra_bsc_ho:stopped",
- "Connection ended during HO" },
- [BTS_CTR_INTRA_BSC_HO_NO_CHANNEL] = \
- { "intra_bsc_ho:no_channel",
- "Failure to allocate lchan for HO" },
- [BTS_CTR_INTRA_BSC_HO_TIMEOUT] = \
- { "intra_bsc_ho:timeout",
- "Handover timed out" },
- [BTS_CTR_INTRA_BSC_HO_FAILED] = \
- { "intra_bsc_ho:failed",
- "Received Handover Fail messages" },
- [BTS_CTR_INTRA_BSC_HO_ERROR] = \
- { "intra_bsc_ho:error",
- "Re-assignment failed for other reason" },
-
- [BTS_CTR_INTER_BSC_HO_OUT_ATTEMPTED] = \
- { "interbsc_ho_out:attempted",
- "Attempts to handover to remote BSS" },
- [BTS_CTR_INTER_BSC_HO_OUT_COMPLETED] = \
- { "interbsc_ho_out:completed",
- "Handover to remote BSS completed" },
- [BTS_CTR_INTER_BSC_HO_OUT_STOPPED] = \
- { "interbsc_ho_out:stopped",
- "Connection ended during HO" },
- [BTS_CTR_INTER_BSC_HO_OUT_TIMEOUT] = \
- { "interbsc_ho_out:timeout",
- "Handover timed out" },
- [BTS_CTR_INTER_BSC_HO_OUT_FAILED] = \
- { "interbsc_ho_out:failed",
- "Received Handover Fail message" },
- [BTS_CTR_INTER_BSC_HO_OUT_ERROR] = \
- { "interbsc_ho_out:error",
- "Handover to remote BSS failed for other reason" },
- [BTS_CTR_INTER_BSC_HO_IN_ATTEMPTED] = \
- { "interbsc_ho_in:attempted",
- "Attempts to handover from remote BSS" },
- [BTS_CTR_INTER_BSC_HO_IN_COMPLETED] = \
- { "interbsc_ho_in:completed",
- "Handover from remote BSS completed" },
- [BTS_CTR_INTER_BSC_HO_IN_STOPPED] = \
- { "interbsc_ho_in:stopped",
- "Connection ended during HO" },
- [BTS_CTR_INTER_BSC_HO_IN_NO_CHANNEL] = \
- { "interbsc_ho_in:no_channel",
- "Failure to allocate lchan for HO" },
- [BTS_CTR_INTER_BSC_HO_IN_TIMEOUT] = \
- { "interbsc_ho_in:timeout",
- "Handover from remote BSS timed out" },
- [BTS_CTR_INTER_BSC_HO_IN_FAILED] = \
- { "interbsc_ho_in:failed",
- "Received Handover Fail message" },
- [BTS_CTR_INTER_BSC_HO_IN_ERROR] = \
- { "interbsc_ho_in:error",
- "Handover from remote BSS failed for other reason" },
-
- [BTS_CTR_SRVCC_ATTEMPTED] = \
- { "srvcc:attempted",
- "Intra-BSC handover attempts" },
- [BTS_CTR_SRVCC_COMPLETED] = \
- { "srvcc:completed",
- "Intra-BSC handover completed" },
- [BTS_CTR_SRVCC_STOPPED] = \
- { "srvcc:stopped",
- "Connection ended during HO" },
- [BTS_CTR_SRVCC_NO_CHANNEL] = \
- { "srvcc:no_channel",
- "Failure to allocate lchan for HO" },
- [BTS_CTR_SRVCC_TIMEOUT] = \
- { "srvcc:timeout",
- "Handover timed out" },
- [BTS_CTR_SRVCC_FAILED] = \
- { "srvcc:failed",
- "Received Handover Fail messages" },
- [BTS_CTR_SRVCC_ERROR] = \
- { "srvcc:error",
- "Re-assignment failed for other reason" },
-};
-
-const struct rate_ctr_group_desc bts_ctrg_desc = {
- "bts",
- "base transceiver station",
- OSMO_STATS_CLASS_GLOBAL,
- ARRAY_SIZE(bts_ctr_description),
- bts_ctr_description,
-};
-
-const struct osmo_stat_item_desc bts_stat_desc[] = {
- [BTS_STAT_UPTIME_SECONDS] = \
- { "uptime:seconds",
- "Seconds of uptime",
- "s", 60, 0 },
- [BTS_STAT_CHAN_LOAD_AVERAGE] = \
- { "chanloadavg",
- "Channel load average",
- "%", 60, 0 },
- [BTS_STAT_CHAN_CCCH_SDCCH4_USED] = \
- { "chan_ccch_sdcch4:used",
- "Number of CCCH+SDCCH4 channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_CCCH_SDCCH4_TOTAL] = \
- { "chan_ccch_sdcch4:total",
- "Number of CCCH+SDCCH4 channels total",
- "", 60, 0 },
- [BTS_STAT_CHAN_TCH_F_USED] = \
- { "chan_tch_f:used",
- "Number of TCH/F channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_TCH_F_TOTAL] = \
- { "chan_tch_f:total",
- "Number of TCH/F channels total",
- "", 60, 0 },
- [BTS_STAT_CHAN_TCH_H_USED] = \
- { "chan_tch_h:used",
- "Number of TCH/H channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_TCH_H_TOTAL] = \
- { "chan_tch_h:total",
- "Number of TCH/H channels total",
- "", 60, 0 },
- [BTS_STAT_CHAN_SDCCH8_USED] = \
- { "chan_sdcch8:used",
- "Number of SDCCH8 channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_SDCCH8_TOTAL] = \
- { "chan_sdcch8:total",
- "Number of SDCCH8 channels total",
- "", 60, 0 },
- [BTS_STAT_CHAN_TCH_F_PDCH_USED] = \
- { "chan_tch_f_pdch:used",
- "Number of TCH/F_PDCH channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_TCH_F_PDCH_TOTAL] = \
- { "chan_tch_f_pdch:total",
- "Number of TCH/F_PDCH channels total",
- "", 60, 0 },
- [BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_USED] = \
- { "chan_ccch_sdcch4_cbch:used",
- "Number of CCCH+SDCCH4+CBCH channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_TOTAL] = \
- { "chan_ccch_sdcch4_cbch:total",
- "Number of CCCH+SDCCH4+CBCH channels total",
- "", 60, 0 },
- [BTS_STAT_CHAN_SDCCH8_CBCH_USED] = \
- { "chan_sdcch8_cbch:used",
- "Number of SDCCH8+CBCH channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_SDCCH8_CBCH_TOTAL] = \
- { "chan_sdcch8_cbch:total",
- "Number of SDCCH8+CBCH channels total",
- "", 60, 0 },
- [BTS_STAT_CHAN_OSMO_DYN_USED] = \
- { "chan_osmo_dyn:used",
- "Number of TCH/F_TCH/H_SDCCH8_PDCH channels used",
- "", 60, 0 },
- [BTS_STAT_CHAN_OSMO_DYN_TOTAL] = \
- { "chan_osmo_dyn:total",
- "Number of TCH/F_TCH/H_SDCCH8_PDCH channels total",
- "", 60, 0 },
- [BTS_STAT_T3122] = \
- { "T3122",
- "T3122 IMMEDIATE ASSIGNMENT REJECT wait indicator",
- "s", 60, GSM_T3122_DEFAULT },
- [BTS_STAT_RACH_BUSY] = \
- { "rach_busy",
- "RACH slots with signal above threshold",
- "%", 60, 0 },
- [BTS_STAT_RACH_ACCESS] = \
- { "rach_access",
- "RACH slots with access bursts in them",
- "%", 60, 0 },
- [BTS_STAT_OML_CONNECTED] = \
- { "oml_connected",
- "Number of OML links connected",
- "", 16, 0 },
- [BTS_STAT_RSL_CONNECTED] = \
- { "rsl_connected",
- "Number of RSL links connected",
- "", 16, 0 },
- [BTS_STAT_LCHAN_BORKEN] = \
- { "lchan_borken",
- "Number of lchans in the BORKEN state",
- "", 16, 0 },
- [BTS_STAT_TS_BORKEN] = \
- { "ts_borken",
- "Number of timeslots in the BORKEN state",
- "", 16, 0 },
-};
-
-const struct osmo_stat_item_group_desc bts_statg_desc = {
- .group_name_prefix = "bts",
- .group_description = "base transceiver station",
- .class_id = OSMO_STATS_CLASS_GLOBAL,
- .num_items = ARRAY_SIZE(bts_stat_desc),
- .item_desc = bts_stat_desc,
-};
diff --git a/src/osmo-bsc/chan_alloc.c b/src/osmo-bsc/chan_alloc.c
index fea4efd..ce648c3 100644
--- a/src/osmo-bsc/chan_alloc.c
+++ b/src/osmo-bsc/chan_alloc.c
@@ -35,6 +35,7 @@
#include <osmocom/bsc/lchan_fsm.h>
#include <osmocom/bsc/gsm_04_08_rr.h>
#include <osmocom/bsc/bts.h>
+#include <osmocom/bsc/bsc_stats.h>
#include <osmocom/core/talloc.h>
diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c
index def70de..0e97869 100644
--- a/src/osmo-bsc/lchan_fsm.c
+++ b/src/osmo-bsc/lchan_fsm.c
@@ -40,6 +40,7 @@
#include <osmocom/bsc/bsc_msc_data.h>
#include <osmocom/bsc/codec_pref.h>
#include <osmocom/bsc/bts.h>
+#include <osmocom/bsc/bsc_stats.h>
static struct osmo_fsm lchan_fsm;
diff --git a/src/osmo-bsc/osmo_bsc_filter.c b/src/osmo-bsc/osmo_bsc_filter.c
index 2b58ccf..1ee2625 100644
--- a/src/osmo-bsc/osmo_bsc_filter.c
+++ b/src/osmo-bsc/osmo_bsc_filter.c
@@ -27,6 +27,7 @@
#include <osmocom/bsc/paging.h>
#include <osmocom/bsc/gsm_04_08_rr.h>
#include <osmocom/bsc/bts.h>
+#include <osmocom/bsc/bsc_stats.h>
#include <stdlib.h>
diff --git a/src/osmo-bsc/timeslot_fsm.c b/src/osmo-bsc/timeslot_fsm.c
index adca31d..5a00784 100644
--- a/src/osmo-bsc/timeslot_fsm.c
+++ b/src/osmo-bsc/timeslot_fsm.c
@@ -29,6 +29,7 @@
#include <osmocom/bsc/abis_rsl.h>
#include <osmocom/bsc/pcu_if.h>
#include <osmocom/bsc/bts.h>
+#include <osmocom/bsc/bsc_stats.h>
static struct osmo_fsm ts_fsm;
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/25275
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I58c5c1f8a5a09e9942aa6d1bdfe7f9766773963c
Gerrit-Change-Number: 25275
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210829/b7a5cda8/attachment.htm>