<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>