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