<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/18226">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  neels: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Drop specific functions to increase counters<br><br>It's super annoying seeing lots of functions being called everywhere<br>only to find out they are only incrementing a counter. Let's drop all<br>those functions and increment the counter so people looking at code<br>doesn't see dozens of code paths evyerwhere.<br><br>Most of the commit was generated by following sh snippet:<br>"""<br> #!/bin/bash<br>grep -r -l ^CREATE_COUNT_INLINE . | xargs cat | grep "^CREATE_COUNT_INLINE("| tr -d ",;" | tr "()" " " | awk '{ print $2 " " $3 }' >/tmp/hello<br><br>while read -r func_name ctr_name<br>do<br> #echo "$func_name -> $ctr_name"<br>files="$(grep -r -l "${func_name}()" .)"<br>for f in $files; do<br>echo "$f: $func_name -> $ctr_name";<br>sed -i "s#${func_name}()#do_rate_ctr_inc(${ctr_name})#g" $f<br>done;<br>done < /tmp/hello<br><br>grep -r -l "void do_rate_ctr_inc" | xargs sed -i "/void do_rate_ctr_inc(CTR/d"<br>grep -r -l "CREATE_COUNT_INLINE" | xargs sed -i "/^CREATE_COUNT_INLINE/d"<br>"""<br><br>Change-Id: I360e322a30edf639aefb3c0f0e4354d98c9035a3<br>---<br>M src/bts.cpp<br>M src/bts.h<br>M src/gprs_rlcmac_sched.cpp<br>M src/gprs_rlcmac_ts_alloc.cpp<br>M src/llc.cpp<br>M src/pdch.cpp<br>M src/rlc.cpp<br>M src/sba.cpp<br>M src/tbf.cpp<br>M src/tbf_dl.cpp<br>M src/tbf_ul.cpp<br>11 files changed, 186 insertions(+), 346 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/bts.cpp b/src/bts.cpp</span><br><span>index 2916ee7..2cf219a 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -344,7 +344,7 @@</span><br><span>            LOGP(DRLCMAC, LOGL_NOTICE,</span><br><span>                   "Late RLC block, FN delta: %d FN: %d curFN: %d\n",</span><br><span>                         delay, fn, current_frame_number());</span><br><span style="color: hsl(0, 100%, 40%);">-             rlc_late_block();</span><br><span style="color: hsl(120, 100%, 40%);">+             do_rate_ctr_inc(CTR_RLC_LATE_BLOCK);</span><br><span>         }</span><br><span> </span><br><span>        m_cur_blk_fn = fn;</span><br><span>@@ -755,10 +755,10 @@</span><br><span>   bool failure = false;</span><br><span>        GprsMs *ms;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- rach_frame();</span><br><span style="color: hsl(120, 100%, 40%);">+ do_rate_ctr_inc(CTR_RACH_REQUESTS);</span><br><span> </span><br><span>      if (is_11bit)</span><br><span style="color: hsl(0, 100%, 40%);">-           rach_frame_11bit();</span><br><span style="color: hsl(120, 100%, 40%);">+           do_rate_ctr_inc(CTR_11BIT_RACH_REQUESTS);</span><br><span> </span><br><span>        /* Determine full frame number */</span><br><span>    Fn = rfn_to_fn(Fn);</span><br><span>@@ -831,7 +831,7 @@</span><br><span>            plen = Encoding::write_immediate_assignment_reject(</span><br><span>                  immediate_assignment, ra, Fn,</span><br><span>                        burst_type);</span><br><span style="color: hsl(0, 100%, 40%);">-            immediate_assignment_reject();</span><br><span style="color: hsl(120, 100%, 40%);">+                do_rate_ctr_inc(CTR_IMMEDIATE_ASSIGN_REJ);</span><br><span>   }</span><br><span>    else {</span><br><span>               LOGP(DRLCMAC, LOGL_DEBUG,</span><br><span>@@ -845,7 +845,7 @@</span><br><span>      }</span><br><span> </span><br><span>        if (plen >= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-             immediate_assignment_ul_tbf();</span><br><span style="color: hsl(120, 100%, 40%);">+                do_rate_ctr_inc(CTR_IMMEDIATE_ASSIGN_UL_TBF);</span><br><span>                pcu_l1if_tx_agch(immediate_assignment, plen);</span><br><span>        }</span><br><span> </span><br><span>@@ -920,7 +920,7 @@</span><br><span>                                              tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1,</span><br><span>                                               GSM_L1_BURST_TYPE_ACCESS_0);</span><br><span>     if (plen >= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-             immediate_assignment_dl_tbf();</span><br><span style="color: hsl(120, 100%, 40%);">+                do_rate_ctr_inc(CTR_IMMEDIATE_ASSIGN_DL_TBF);</span><br><span>                pcu_l1if_tx_pch(immediate_assignment, plen, pgroup);</span><br><span>         }</span><br><span> </span><br><span>diff --git a/src/bts.h b/src/bts.h</span><br><span>index 4fddc0b..471ac2e 100644</span><br><span>--- a/src/bts.h</span><br><span>+++ b/src/bts.h</span><br><span>@@ -175,6 +175,94 @@</span><br><span>        uint32_t app_info_pending; /* Count of MS with active TBF, to which we did not send app_info yet */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_TBF_DL_ALLOCATED,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_TBF_DL_FREED,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_TBF_DL_ABORTED,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_TBF_UL_ALLOCATED,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_TBF_UL_FREED,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_TBF_UL_ABORTED,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_TBF_REUSED,</span><br><span style="color: hsl(120, 100%, 40%);">+       CTR_TBF_ALLOC_ALGO_A,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_TBF_ALLOC_ALGO_B,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_TBF_FAILED_EGPRS_ONLY,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_RLC_SENT,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_RLC_RESENT,</span><br><span style="color: hsl(120, 100%, 40%);">+       CTR_RLC_RESTARTED,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_RLC_STALLED,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_RLC_NACKED,</span><br><span style="color: hsl(120, 100%, 40%);">+       CTR_RLC_FINAL_BLOCK_RESENT,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_RLC_ASS_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_RLC_ASS_FAILED,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_RLC_ACK_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_RLC_ACK_FAILED,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_RLC_REL_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_RLC_LATE_BLOCK,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_RLC_SENT_DUMMY,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_RLC_SENT_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_RLC_DL_BYTES,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_RLC_DL_PAYLOAD_BYTES,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_RLC_UL_BYTES,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_RLC_UL_PAYLOAD_BYTES,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_DECODE_ERRORS,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_SBA_ALLOCATED,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_SBA_FREED,</span><br><span style="color: hsl(120, 100%, 40%);">+        CTR_SBA_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_LLC_FRAME_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+       CTR_LLC_FRAME_DROPPED,</span><br><span style="color: hsl(120, 100%, 40%);">+        CTR_LLC_FRAME_SCHED,</span><br><span style="color: hsl(120, 100%, 40%);">+  CTR_LLC_DL_BYTES,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_LLC_UL_BYTES,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_RACH_REQUESTS,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_11BIT_RACH_REQUESTS,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_SPB_UL_FIRST_SEGMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_SPB_UL_SECOND_SEGMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_SPB_DL_FIRST_SEGMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_SPB_DL_SECOND_SEGMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_IMMEDIATE_ASSIGN_UL_TBF,</span><br><span style="color: hsl(120, 100%, 40%);">+  CTR_IMMEDIATE_ASSIGN_REJ,</span><br><span style="color: hsl(120, 100%, 40%);">+     CTR_IMMEDIATE_ASSIGN_DL_TBF,</span><br><span style="color: hsl(120, 100%, 40%);">+  CTR_CHANNEL_REQUEST_DESCRIPTION,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_PKT_UL_ASSIGNMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+        CTR_PKT_ACCESS_REJ,</span><br><span style="color: hsl(120, 100%, 40%);">+   CTR_PKT_DL_ASSIGNMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+        CTR_RLC_RECV_CONTROL,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_PUA_POLL_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+        CTR_PUA_POLL_FAILED,</span><br><span style="color: hsl(120, 100%, 40%);">+  CTR_PDA_POLL_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+        CTR_PDA_POLL_FAILED,</span><br><span style="color: hsl(120, 100%, 40%);">+  CTR_PUAN_POLL_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+       CTR_PUAN_POLL_FAILED,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_PDAN_POLL_TIMEDOUT,</span><br><span style="color: hsl(120, 100%, 40%);">+       CTR_PDAN_POLL_FAILED,</span><br><span style="color: hsl(120, 100%, 40%);">+ CTR_GPRS_DL_CS1,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_GPRS_DL_CS2,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_GPRS_DL_CS3,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_GPRS_DL_CS4,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_EGPRS_DL_MCS1,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS2,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS3,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS4,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS5,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS6,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS7,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS8,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_DL_MCS9,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_GPRS_UL_CS1,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_GPRS_UL_CS2,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_GPRS_UL_CS3,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_GPRS_UL_CS4,</span><br><span style="color: hsl(120, 100%, 40%);">+      CTR_EGPRS_UL_MCS1,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS2,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS3,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS4,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS5,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS6,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS7,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS8,</span><br><span style="color: hsl(120, 100%, 40%);">+    CTR_EGPRS_UL_MCS9,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #ifdef __cplusplus</span><br><span> /**</span><br><span>  * I represent a GSM BTS. I have one or more TRX, I know the current</span><br><span>@@ -184,94 +272,6 @@</span><br><span> struct BTS {</span><br><span> public:</span><br><span>      enum {</span><br><span style="color: hsl(0, 100%, 40%);">-          CTR_TBF_DL_ALLOCATED,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_TBF_DL_FREED,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_TBF_DL_ABORTED,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_TBF_UL_ALLOCATED,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_TBF_UL_FREED,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_TBF_UL_ABORTED,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_TBF_REUSED,</span><br><span style="color: hsl(0, 100%, 40%);">-         CTR_TBF_ALLOC_ALGO_A,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_TBF_ALLOC_ALGO_B,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_TBF_FAILED_EGPRS_ONLY,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_RLC_SENT,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_RLC_RESENT,</span><br><span style="color: hsl(0, 100%, 40%);">-         CTR_RLC_RESTARTED,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_RLC_STALLED,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_RLC_NACKED,</span><br><span style="color: hsl(0, 100%, 40%);">-         CTR_RLC_FINAL_BLOCK_RESENT,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_RLC_ASS_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_RLC_ASS_FAILED,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_RLC_ACK_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_RLC_ACK_FAILED,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_RLC_REL_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_RLC_LATE_BLOCK,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_RLC_SENT_DUMMY,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_RLC_SENT_CONTROL,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_RLC_DL_BYTES,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_RLC_DL_PAYLOAD_BYTES,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_RLC_UL_BYTES,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_RLC_UL_PAYLOAD_BYTES,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_DECODE_ERRORS,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_SBA_ALLOCATED,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_SBA_FREED,</span><br><span style="color: hsl(0, 100%, 40%);">-          CTR_SBA_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_LLC_FRAME_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-         CTR_LLC_FRAME_DROPPED,</span><br><span style="color: hsl(0, 100%, 40%);">-          CTR_LLC_FRAME_SCHED,</span><br><span style="color: hsl(0, 100%, 40%);">-            CTR_LLC_DL_BYTES,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_LLC_UL_BYTES,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_RACH_REQUESTS,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_11BIT_RACH_REQUESTS,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_SPB_UL_FIRST_SEGMENT,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_SPB_UL_SECOND_SEGMENT,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_SPB_DL_FIRST_SEGMENT,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_SPB_DL_SECOND_SEGMENT,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_IMMEDIATE_ASSIGN_UL_TBF,</span><br><span style="color: hsl(0, 100%, 40%);">-            CTR_IMMEDIATE_ASSIGN_REJ,</span><br><span style="color: hsl(0, 100%, 40%);">-               CTR_IMMEDIATE_ASSIGN_DL_TBF,</span><br><span style="color: hsl(0, 100%, 40%);">-            CTR_CHANNEL_REQUEST_DESCRIPTION,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_PKT_UL_ASSIGNMENT,</span><br><span style="color: hsl(0, 100%, 40%);">-          CTR_PKT_ACCESS_REJ,</span><br><span style="color: hsl(0, 100%, 40%);">-             CTR_PKT_DL_ASSIGNMENT,</span><br><span style="color: hsl(0, 100%, 40%);">-          CTR_RLC_RECV_CONTROL,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_PUA_POLL_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-          CTR_PUA_POLL_FAILED,</span><br><span style="color: hsl(0, 100%, 40%);">-            CTR_PDA_POLL_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-          CTR_PDA_POLL_FAILED,</span><br><span style="color: hsl(0, 100%, 40%);">-            CTR_PUAN_POLL_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-         CTR_PUAN_POLL_FAILED,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_PDAN_POLL_TIMEDOUT,</span><br><span style="color: hsl(0, 100%, 40%);">-         CTR_PDAN_POLL_FAILED,</span><br><span style="color: hsl(0, 100%, 40%);">-           CTR_GPRS_DL_CS1,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_GPRS_DL_CS2,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_GPRS_DL_CS3,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_GPRS_DL_CS4,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_EGPRS_DL_MCS1,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS2,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS3,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS4,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS5,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS6,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS7,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS8,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_DL_MCS9,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_GPRS_UL_CS1,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_GPRS_UL_CS2,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_GPRS_UL_CS3,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_GPRS_UL_CS4,</span><br><span style="color: hsl(0, 100%, 40%);">-                CTR_EGPRS_UL_MCS1,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS2,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS3,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS4,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS5,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS6,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS7,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS8,</span><br><span style="color: hsl(0, 100%, 40%);">-              CTR_EGPRS_UL_MCS9,</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%);">-      enum {</span><br><span>               STAT_MS_PRESENT,</span><br><span>     };</span><br><span> </span><br><span>@@ -320,91 +320,12 @@</span><br><span>       /*</span><br><span>    * Statistics</span><br><span>         */</span><br><span style="color: hsl(0, 100%, 40%);">-     void tbf_dl_created();</span><br><span style="color: hsl(0, 100%, 40%);">-  void tbf_dl_freed();</span><br><span style="color: hsl(0, 100%, 40%);">-    void tbf_dl_aborted();</span><br><span style="color: hsl(0, 100%, 40%);">-  void tbf_ul_created();</span><br><span style="color: hsl(0, 100%, 40%);">-  void tbf_ul_freed();</span><br><span style="color: hsl(0, 100%, 40%);">-    void tbf_ul_aborted();</span><br><span style="color: hsl(0, 100%, 40%);">-  void tbf_reused();</span><br><span style="color: hsl(0, 100%, 40%);">-      void tbf_alloc_algo_a();</span><br><span style="color: hsl(0, 100%, 40%);">-        void tbf_alloc_algo_b();</span><br><span style="color: hsl(0, 100%, 40%);">-        void tbf_failed_egprs_only();</span><br><span style="color: hsl(0, 100%, 40%);">-   void rlc_sent();</span><br><span style="color: hsl(0, 100%, 40%);">-        void rlc_resent();</span><br><span style="color: hsl(0, 100%, 40%);">-      void rlc_restarted();</span><br><span style="color: hsl(0, 100%, 40%);">-   void rlc_stalled();</span><br><span style="color: hsl(0, 100%, 40%);">-     void rlc_nacked();</span><br><span style="color: hsl(0, 100%, 40%);">-      void rlc_final_block_resent();</span><br><span style="color: hsl(0, 100%, 40%);">-  void rlc_ass_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-        void rlc_ass_failed();</span><br><span style="color: hsl(0, 100%, 40%);">-  void rlc_ack_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-        void rlc_ack_failed();</span><br><span style="color: hsl(0, 100%, 40%);">-  void rlc_rel_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-        void rlc_late_block();</span><br><span style="color: hsl(0, 100%, 40%);">-  void rlc_sent_dummy();</span><br><span style="color: hsl(0, 100%, 40%);">-  void rlc_sent_control();</span><br><span>     void rlc_dl_bytes(int bytes);</span><br><span>        void rlc_dl_payload_bytes(int bytes);</span><br><span>        void rlc_ul_bytes(int bytes);</span><br><span>        void rlc_ul_payload_bytes(int bytes);</span><br><span style="color: hsl(0, 100%, 40%);">-   void decode_error();</span><br><span style="color: hsl(0, 100%, 40%);">-    void sba_allocated();</span><br><span style="color: hsl(0, 100%, 40%);">-   void sba_freed();</span><br><span style="color: hsl(0, 100%, 40%);">-       void sba_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-    void llc_timedout_frame();</span><br><span style="color: hsl(0, 100%, 40%);">-      void llc_dropped_frame();</span><br><span style="color: hsl(0, 100%, 40%);">-       void llc_frame_sched();</span><br><span>      void llc_dl_bytes(int bytes);</span><br><span>        void llc_ul_bytes(int bytes);</span><br><span style="color: hsl(0, 100%, 40%);">-   void rach_frame();</span><br><span style="color: hsl(0, 100%, 40%);">-      void rach_frame_11bit();</span><br><span style="color: hsl(0, 100%, 40%);">-        void spb_uplink_first_segment();</span><br><span style="color: hsl(0, 100%, 40%);">-        void spb_uplink_second_segment();</span><br><span style="color: hsl(0, 100%, 40%);">-       void spb_downlink_first_segment();</span><br><span style="color: hsl(0, 100%, 40%);">-      void spb_downlink_second_segment();</span><br><span style="color: hsl(0, 100%, 40%);">-     void immediate_assignment_ul_tbf();</span><br><span style="color: hsl(0, 100%, 40%);">-     void immediate_assignment_reject();</span><br><span style="color: hsl(0, 100%, 40%);">-     void immediate_assignment_dl_tbf();</span><br><span style="color: hsl(0, 100%, 40%);">-     void channel_request_description();</span><br><span style="color: hsl(0, 100%, 40%);">-     void pkt_ul_assignment();</span><br><span style="color: hsl(0, 100%, 40%);">-       void pkt_access_reject();</span><br><span style="color: hsl(0, 100%, 40%);">-       void pkt_dl_assignemnt();</span><br><span style="color: hsl(0, 100%, 40%);">-       void rlc_rcvd_control();</span><br><span style="color: hsl(0, 100%, 40%);">-        void pua_poll_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-       void pua_poll_failed();</span><br><span style="color: hsl(0, 100%, 40%);">- void pda_poll_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-       void pda_poll_failed();</span><br><span style="color: hsl(0, 100%, 40%);">- void pkt_ul_ack_nack_poll_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-   void pkt_ul_ack_nack_poll_failed();</span><br><span style="color: hsl(0, 100%, 40%);">-     void pkt_dl_ack_nack_poll_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-   void pkt_dl_ack_nack_poll_failed();</span><br><span style="color: hsl(0, 100%, 40%);">-     void gprs_dl_cs1();</span><br><span style="color: hsl(0, 100%, 40%);">-     void gprs_dl_cs2();</span><br><span style="color: hsl(0, 100%, 40%);">-     void gprs_dl_cs3();</span><br><span style="color: hsl(0, 100%, 40%);">-     void gprs_dl_cs4();</span><br><span style="color: hsl(0, 100%, 40%);">-     void egprs_dl_mcs1();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs2();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs3();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs4();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs5();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs6();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs7();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs8();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_dl_mcs9();</span><br><span style="color: hsl(0, 100%, 40%);">-   void gprs_ul_cs1();</span><br><span style="color: hsl(0, 100%, 40%);">-     void gprs_ul_cs2();</span><br><span style="color: hsl(0, 100%, 40%);">-     void gprs_ul_cs3();</span><br><span style="color: hsl(0, 100%, 40%);">-     void gprs_ul_cs4();</span><br><span style="color: hsl(0, 100%, 40%);">-     void egprs_ul_mcs1();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs2();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs3();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs4();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs5();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs6();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs7();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs8();</span><br><span style="color: hsl(0, 100%, 40%);">-   void egprs_ul_mcs9();</span><br><span> </span><br><span>    void ms_present(int32_t n);</span><br><span>  int32_t ms_present_get();</span><br><span>@@ -414,6 +335,7 @@</span><br><span>       */</span><br><span>  struct rate_ctr_group *rate_counters() const;</span><br><span>        struct osmo_stat_item_group *stat_items() const;</span><br><span style="color: hsl(120, 100%, 40%);">+      void do_rate_ctr_inc(unsigned int ctr_id);</span><br><span> </span><br><span>       LListHead<gprs_rlcmac_tbf>& ul_tbfs();</span><br><span>     LListHead<gprs_rlcmac_tbf>& dl_tbfs();</span><br><span>@@ -483,103 +405,21 @@</span><br><span>    return m_statg;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+inline void BTS::do_rate_ctr_inc(unsigned int ctr_id) {</span><br><span style="color: hsl(120, 100%, 40%);">+     rate_ctr_inc(&m_ratectrs->ctr[ctr_id]);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define CREATE_COUNT_ADD_INLINE(func_name, ctr_name) \</span><br><span>        inline void BTS::func_name(int inc) {\</span><br><span>               rate_ctr_add(&m_ratectrs->ctr[ctr_name], inc); \</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define CREATE_COUNT_INLINE(func_name, ctr_name) \</span><br><span style="color: hsl(0, 100%, 40%);">- inline void BTS::func_name() {\</span><br><span style="color: hsl(0, 100%, 40%);">-         rate_ctr_inc(&m_ratectrs->ctr[ctr_name]); \</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%);">-CREATE_COUNT_INLINE(tbf_dl_created, CTR_TBF_DL_ALLOCATED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_dl_freed, CTR_TBF_DL_FREED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_dl_aborted, CTR_TBF_DL_ABORTED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_ul_created, CTR_TBF_UL_ALLOCATED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_ul_freed, CTR_TBF_UL_FREED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_ul_aborted, CTR_TBF_UL_ABORTED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_reused, CTR_TBF_REUSED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_alloc_algo_a, CTR_TBF_ALLOC_ALGO_A)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_alloc_algo_b, CTR_TBF_ALLOC_ALGO_B)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(tbf_failed_egprs_only, CTR_TBF_FAILED_EGPRS_ONLY)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_sent, CTR_RLC_SENT)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_resent, CTR_RLC_RESENT)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_restarted, CTR_RLC_RESTARTED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_stalled, CTR_RLC_STALLED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_nacked, CTR_RLC_NACKED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_final_block_resent, CTR_RLC_FINAL_BLOCK_RESENT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_ass_timedout, CTR_RLC_ASS_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_ass_failed, CTR_RLC_ASS_FAILED);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_ack_timedout, CTR_RLC_ACK_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_ack_failed, CTR_RLC_ACK_FAILED);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_rel_timedout, CTR_RLC_REL_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_late_block, CTR_RLC_LATE_BLOCK);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_sent_dummy, CTR_RLC_SENT_DUMMY);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_sent_control, CTR_RLC_SENT_CONTROL);</span><br><span> CREATE_COUNT_ADD_INLINE(rlc_dl_bytes, CTR_RLC_DL_BYTES);</span><br><span> CREATE_COUNT_ADD_INLINE(rlc_dl_payload_bytes, CTR_RLC_DL_PAYLOAD_BYTES);</span><br><span> CREATE_COUNT_ADD_INLINE(rlc_ul_bytes, CTR_RLC_UL_BYTES);</span><br><span> CREATE_COUNT_ADD_INLINE(rlc_ul_payload_bytes, CTR_RLC_UL_PAYLOAD_BYTES);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(decode_error, CTR_DECODE_ERRORS)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(sba_allocated, CTR_SBA_ALLOCATED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(sba_freed, CTR_SBA_FREED)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(sba_timedout, CTR_SBA_TIMEDOUT)</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(llc_timedout_frame, CTR_LLC_FRAME_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(llc_dropped_frame, CTR_LLC_FRAME_DROPPED);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(llc_frame_sched, CTR_LLC_FRAME_SCHED);</span><br><span> CREATE_COUNT_ADD_INLINE(llc_dl_bytes, CTR_LLC_DL_BYTES);</span><br><span> CREATE_COUNT_ADD_INLINE(llc_ul_bytes, CTR_LLC_UL_BYTES);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rach_frame, CTR_RACH_REQUESTS);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rach_frame_11bit, CTR_11BIT_RACH_REQUESTS);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(spb_uplink_first_segment, CTR_SPB_UL_FIRST_SEGMENT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(spb_uplink_second_segment, CTR_SPB_UL_SECOND_SEGMENT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(spb_downlink_first_segment, CTR_SPB_DL_FIRST_SEGMENT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(spb_downlink_second_segment, CTR_SPB_DL_SECOND_SEGMENT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(immediate_assignment_ul_tbf, CTR_IMMEDIATE_ASSIGN_UL_TBF);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(immediate_assignment_reject, CTR_IMMEDIATE_ASSIGN_REJ);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(immediate_assignment_dl_tbf, CTR_IMMEDIATE_ASSIGN_DL_TBF);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(channel_request_description, CTR_CHANNEL_REQUEST_DESCRIPTION);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pkt_ul_assignment, CTR_PKT_UL_ASSIGNMENT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pkt_access_reject, CTR_PKT_ACCESS_REJ);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pkt_dl_assignemnt, CTR_PKT_DL_ASSIGNMENT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(rlc_rcvd_control, CTR_RLC_RECV_CONTROL);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pua_poll_timedout, CTR_PUA_POLL_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pua_poll_failed, CTR_PUA_POLL_FAILED);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pda_poll_timedout, CTR_PDA_POLL_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pda_poll_failed, CTR_PDA_POLL_FAILED);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pkt_ul_ack_nack_poll_timedout, CTR_PUAN_POLL_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pkt_ul_ack_nack_poll_failed, CTR_PUAN_POLL_FAILED);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pkt_dl_ack_nack_poll_timedout, CTR_PDAN_POLL_TIMEDOUT);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(pkt_dl_ack_nack_poll_failed, CTR_PDAN_POLL_FAILED);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_dl_cs1, CTR_GPRS_DL_CS1);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_dl_cs2, CTR_GPRS_DL_CS2);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_dl_cs3, CTR_GPRS_DL_CS3);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_dl_cs4, CTR_GPRS_DL_CS4);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs1, CTR_EGPRS_DL_MCS1);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs2, CTR_EGPRS_DL_MCS2);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs3, CTR_EGPRS_DL_MCS3);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs4, CTR_EGPRS_DL_MCS4);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs5, CTR_EGPRS_DL_MCS5);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs6, CTR_EGPRS_DL_MCS6);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs7, CTR_EGPRS_DL_MCS7);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs8, CTR_EGPRS_DL_MCS8);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_dl_mcs9, CTR_EGPRS_DL_MCS9);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_ul_cs1, CTR_GPRS_UL_CS1);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_ul_cs2, CTR_GPRS_UL_CS2);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_ul_cs3, CTR_GPRS_UL_CS3);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(gprs_ul_cs4, CTR_GPRS_UL_CS4);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs1, CTR_EGPRS_UL_MCS1);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs2, CTR_EGPRS_UL_MCS2);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs3, CTR_EGPRS_UL_MCS3);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs4, CTR_EGPRS_UL_MCS4);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs5, CTR_EGPRS_UL_MCS5);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs6, CTR_EGPRS_UL_MCS6);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs7, CTR_EGPRS_UL_MCS7);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs8, CTR_EGPRS_UL_MCS8);</span><br><span style="color: hsl(0, 100%, 40%);">-CREATE_COUNT_INLINE(egprs_ul_mcs9, CTR_EGPRS_UL_MCS9);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#undef CREATE_COUNT_INLINE</span><br><span> </span><br><span> #define CREATE_STAT_INLINE(func_name, func_name_get, stat_name) \</span><br><span>   inline void BTS::func_name(int32_t val) {\</span><br><span>diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp</span><br><span>index fe6f159..6a53468 100644</span><br><span>--- a/src/gprs_rlcmac_sched.cpp</span><br><span>+++ b/src/gprs_rlcmac_sched.cpp</span><br><span>@@ -357,18 +357,18 @@</span><br><span> </span><br><span>      switch(cat) {</span><br><span>        case PCU_GSMTAP_C_DL_CTRL:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->bts->rlc_sent_control();</span><br><span style="color: hsl(120, 100%, 40%);">+           bts->bts->do_rate_ctr_inc(CTR_RLC_SENT_CONTROL);</span><br><span>               bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_CTRL, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data,</span><br><span>                                  msg->len);</span><br><span>          break;</span><br><span>       case PCU_GSMTAP_C_DL_DATA_GPRS:</span><br><span style="color: hsl(0, 100%, 40%);">-         bts->bts->rlc_sent();</span><br><span style="color: hsl(120, 100%, 40%);">+           bts->bts->do_rate_ctr_inc(CTR_RLC_SENT);</span><br><span>               /* FIXME: distinguish between GPRS and EGPRS */</span><br><span>              bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DATA_GPRS, false, trx, ts, GSMTAP_CHANNEL_PDTCH, fn, msg->data,</span><br><span>                                     msg->len);</span><br><span>          break;</span><br><span>       case PCU_GSMTAP_C_DL_DUMMY:</span><br><span style="color: hsl(0, 100%, 40%);">-             bts->bts->rlc_sent_dummy();</span><br><span style="color: hsl(120, 100%, 40%);">+             bts->bts->do_rate_ctr_inc(CTR_RLC_SENT_DUMMY);</span><br><span>                 bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DUMMY, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data,</span><br><span>                                 msg->len);</span><br><span>          break;</span><br><span>diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp</span><br><span>index cf3f9a9..c4fbbad 100644</span><br><span>--- a/src/gprs_rlcmac_ts_alloc.cpp</span><br><span>+++ b/src/gprs_rlcmac_ts_alloc.cpp</span><br><span>@@ -423,7 +423,7 @@</span><br><span>    ms_->set_reserved_slots(trx, 1 << ts, 1 << ts);</span><br><span> </span><br><span>   tbf_->upgrade_to_multislot = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-      bts->bts->tbf_alloc_algo_a();</span><br><span style="color: hsl(120, 100%, 40%);">+   bts->bts->do_rate_ctr_inc(CTR_TBF_ALLOC_ALGO_A);</span><br><span>       return 0;</span><br><span> }</span><br><span> </span><br><span>@@ -950,7 +950,7 @@</span><br><span>     else</span><br><span>                 assign_ul_tbf_slots(as_ul_tbf(tbf_), trx, ul_slots, tfi, usf);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      bts->bts->tbf_alloc_algo_b();</span><br><span style="color: hsl(120, 100%, 40%);">+   bts->bts->do_rate_ctr_inc(CTR_TBF_ALLOC_ALGO_B);</span><br><span> </span><br><span>   return 0;</span><br><span> }</span><br><span>diff --git a/src/llc.cpp b/src/llc.cpp</span><br><span>index 8ef7a53..e2d01c2 100644</span><br><span>--- a/src/llc.cpp</span><br><span>+++ b/src/llc.cpp</span><br><span>@@ -128,7 +128,7 @@</span><br><span> </span><br><span>    while ((msg = msgb_dequeue(&m_queue))) {</span><br><span>                 if (bts)</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->llc_dropped_frame();</span><br><span style="color: hsl(120, 100%, 40%);">+                  bts->do_rate_ctr_inc(CTR_LLC_FRAME_DROPPED);</span><br><span>              msgb_free(msg);</span><br><span>      }</span><br><span> </span><br><span>diff --git a/src/pdch.cpp b/src/pdch.cpp</span><br><span>index 88d5d31..202f642 100644</span><br><span>--- a/src/pdch.cpp</span><br><span>+++ b/src/pdch.cpp</span><br><span>@@ -115,7 +115,7 @@</span><br><span> </span><br><span> static inline void sched_ul_ass_or_rej(BTS *bts, gprs_rlcmac_bts *bts_data, struct gprs_rlcmac_dl_tbf *tbf)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        bts->channel_request_description();</span><br><span style="color: hsl(120, 100%, 40%);">+        bts->do_rate_ctr_inc(CTR_CHANNEL_REQUEST_DESCRIPTION);</span><br><span> </span><br><span>        /* This call will register the new TBF with the MS on success */</span><br><span>     gprs_rlcmac_ul_tbf *ul_tbf = tbf_alloc_ul(bts_data, tbf->ms(), tbf->trx->trx_no, tbf->tlli());</span><br><span>@@ -715,7 +715,7 @@</span><br><span>     }</span><br><span>    LOGP(DRLCMAC, LOGL_DEBUG, "------------------------- RX : Uplink Control Block -------------------------\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     bts()->rlc_rcvd_control();</span><br><span style="color: hsl(120, 100%, 40%);">+ bts()->do_rate_ctr_inc(CTR_RLC_RECV_CONTROL);</span><br><span>     switch (ul_control_block->u.MESSAGE_TYPE) {</span><br><span>       case MT_PACKET_CONTROL_ACK:</span><br><span>          rcv_control_ack(&ul_control_block->u.Packet_Control_Acknowledgement, fn);</span><br><span>@@ -736,7 +736,7 @@</span><br><span>               /* ignoring it. change the SI to not force sending these? */</span><br><span>                 break;</span><br><span>       default:</span><br><span style="color: hsl(0, 100%, 40%);">-                bts()->decode_error();</span><br><span style="color: hsl(120, 100%, 40%);">+             bts()->do_rate_ctr_inc(CTR_DECODE_ERRORS);</span><br><span>                LOGP(DRLCMAC, LOGL_NOTICE,</span><br><span>                   "RX: [PCU <- BTS] unknown control block(%d) received\n",</span><br><span>                        ul_control_block->u.MESSAGE_TYPE);</span><br><span>@@ -753,7 +753,7 @@</span><br><span> {</span><br><span>     GprsCodingScheme cs = GprsCodingScheme::getBySizeUL(len);</span><br><span>    if (!cs) {</span><br><span style="color: hsl(0, 100%, 40%);">-              bts()->decode_error();</span><br><span style="color: hsl(120, 100%, 40%);">+             bts()->do_rate_ctr_inc(CTR_DECODE_ERRORS);</span><br><span>                LOGP(DRLCMACUL, LOGL_ERROR, "Dropping data block with invalid"</span><br><span>                     "length: %d)\n", len);</span><br><span>             return -EINVAL;</span><br><span>@@ -770,7 +770,7 @@</span><br><span>        if (mcs_is_edge(cs))</span><br><span>                 return rcv_data_block(data, len, fn, meas, cs);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     bts()->decode_error();</span><br><span style="color: hsl(120, 100%, 40%);">+     bts()->do_rate_ctr_inc(CTR_DECODE_ERRORS);</span><br><span>        LOGP(DRLCMACUL, LOGL_ERROR, "Unsupported coding scheme %s\n",</span><br><span>              mcs_name(cs));</span><br><span>       return -EINVAL;</span><br><span>@@ -809,7 +809,7 @@</span><br><span>                LOGP(DRLCMACUL, LOGL_ERROR,</span><br><span>                  "Got %s RLC block but header parsing has failed\n",</span><br><span>                        mcs_name(cs));</span><br><span style="color: hsl(0, 100%, 40%);">-          bts()->decode_error();</span><br><span style="color: hsl(120, 100%, 40%);">+             bts()->do_rate_ctr_inc(CTR_DECODE_ERRORS);</span><br><span>                return rc;</span><br><span>   }</span><br><span> </span><br><span>diff --git a/src/rlc.cpp b/src/rlc.cpp</span><br><span>index c6d4330..c44d27e 100644</span><br><span>--- a/src/rlc.cpp</span><br><span>+++ b/src/rlc.cpp</span><br><span>@@ -159,7 +159,7 @@</span><br><span>                 } else {</span><br><span>                     LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn);</span><br><span>                       m_v_b.mark_nacked(bsn);</span><br><span style="color: hsl(0, 100%, 40%);">-                 bts->rlc_nacked();</span><br><span style="color: hsl(120, 100%, 40%);">+                 bts->do_rate_ctr_inc(CTR_RLC_NACKED);</span><br><span>                     *lost += 1;</span><br><span>          }</span><br><span>    }</span><br><span>@@ -183,7 +183,7 @@</span><br><span>              } else {</span><br><span>                     LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn);</span><br><span>                       m_v_b.mark_nacked(bsn);</span><br><span style="color: hsl(0, 100%, 40%);">-                 bts->rlc_nacked();</span><br><span style="color: hsl(120, 100%, 40%);">+                 bts->do_rate_ctr_inc(CTR_RLC_NACKED);</span><br><span>                     *lost += 1;</span><br><span>          }</span><br><span>    }</span><br><span>diff --git a/src/sba.cpp b/src/sba.cpp</span><br><span>index 32735e8..cc58405 100644</span><br><span>--- a/src/sba.cpp</span><br><span>+++ b/src/sba.cpp</span><br><span>@@ -86,7 +86,7 @@</span><br><span>       sba->ta = ta;</span><br><span> </span><br><span>         llist_add(&sba->list, &m_sbas);</span><br><span style="color: hsl(0, 100%, 40%);">-      m_bts.sba_allocated();</span><br><span style="color: hsl(120, 100%, 40%);">+        m_bts.do_rate_ctr_inc(CTR_SBA_ALLOCATED);</span><br><span> </span><br><span>        *_trx = trx;</span><br><span>         *_ts = ts;</span><br><span>@@ -132,14 +132,14 @@</span><br><span>   LOGP(DRLCMAC, LOGL_NOTICE,</span><br><span>        "Poll timeout for SBA (TRX=%u, TS=%u, FN=%u, TA=%u)\n", sba->trx_no,</span><br><span>            sba->ts_no, sba->fn, sba->ta);</span><br><span style="color: hsl(0, 100%, 40%);">-    m_bts.sba_timedout();</span><br><span style="color: hsl(120, 100%, 40%);">+ m_bts.do_rate_ctr_inc(CTR_SBA_TIMEDOUT);</span><br><span>     free_sba(sba);</span><br><span>       return 0;</span><br><span> }</span><br><span> </span><br><span> void SBAController::free_sba(gprs_rlcmac_sba *sba)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   m_bts.sba_freed();</span><br><span style="color: hsl(120, 100%, 40%);">+    m_bts.do_rate_ctr_inc(CTR_SBA_FREED);</span><br><span>        llist_del(&sba->list);</span><br><span>        talloc_free(sba);</span><br><span> }</span><br><span>diff --git a/src/tbf.cpp b/src/tbf.cpp</span><br><span>index 2693223..ccf257d 100644</span><br><span>--- a/src/tbf.cpp</span><br><span>+++ b/src/tbf.cpp</span><br><span>@@ -456,9 +456,9 @@</span><br><span>        /* update counters */</span><br><span>        if (tbf->direction == GPRS_RLCMAC_UL_TBF) {</span><br><span>               gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(tbf);</span><br><span style="color: hsl(0, 100%, 40%);">-            tbf->bts->tbf_ul_freed();</span><br><span style="color: hsl(120, 100%, 40%);">+               tbf->bts->do_rate_ctr_inc(CTR_TBF_UL_FREED);</span><br><span>           if (tbf->state_is(GPRS_RLCMAC_FLOW))</span><br><span style="color: hsl(0, 100%, 40%);">-                 tbf->bts->tbf_ul_aborted();</span><br><span style="color: hsl(120, 100%, 40%);">+                     tbf->bts->do_rate_ctr_inc(CTR_TBF_UL_ABORTED);</span><br><span>                 rate_ctr_group_free(ul_tbf->m_ul_egprs_ctrs);</span><br><span>             rate_ctr_group_free(ul_tbf->m_ul_gprs_ctrs);</span><br><span>      } else {</span><br><span>@@ -468,9 +468,9 @@</span><br><span>               } else {</span><br><span>                     rate_ctr_group_free(dl_tbf->m_dl_gprs_ctrs);</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               tbf->bts->tbf_dl_freed();</span><br><span style="color: hsl(120, 100%, 40%);">+               tbf->bts->do_rate_ctr_inc(CTR_TBF_DL_FREED);</span><br><span>           if (tbf->state_is(GPRS_RLCMAC_FLOW))</span><br><span style="color: hsl(0, 100%, 40%);">-                 tbf->bts->tbf_dl_aborted();</span><br><span style="color: hsl(120, 100%, 40%);">+                     tbf->bts->do_rate_ctr_inc(CTR_TBF_DL_ABORTED);</span><br><span>         }</span><br><span> </span><br><span>        /* Give final measurement report */</span><br><span>@@ -821,11 +821,11 @@</span><br><span>                  LOGPTBF(this, LOGL_NOTICE, "Timeout for polling PACKET CONTROL ACK for PACKET UPLINK ACK\n");</span><br><span>                      rlcmac_diag();</span><br><span>               }</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->rlc_ack_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-             bts->pkt_ul_ack_nack_poll_timedout();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_RLC_ACK_TIMEDOUT);</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_PUAN_POLL_TIMEDOUT);</span><br><span>             if (state_is(GPRS_RLCMAC_FINISHED)) {</span><br><span>                        if (ul_tbf->n_inc(N3103)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          bts->pkt_ul_ack_nack_poll_failed();</span><br><span style="color: hsl(120, 100%, 40%);">+                                bts->do_rate_ctr_inc(CTR_PUAN_POLL_FAILED);</span><br><span>                               TBF_SET_STATE(ul_tbf, GPRS_RLCMAC_RELEASING);</span><br><span>                                T_START(ul_tbf, T3169, 3169, "MAX N3103 reached", false);</span><br><span>                          return;</span><br><span>@@ -842,13 +842,13 @@</span><br><span>                      state_flags |= (1 << GPRS_RLCMAC_FLAG_TO_UL_ASS);</span><br><span>              }</span><br><span>            ul_ass_state = GPRS_RLCMAC_UL_ASS_NONE;</span><br><span style="color: hsl(0, 100%, 40%);">-         bts->rlc_ass_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-             bts->pua_poll_timedout();</span><br><span style="color: hsl(120, 100%, 40%);">+          bts->do_rate_ctr_inc(CTR_RLC_ASS_TIMEDOUT);</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_PUA_POLL_TIMEDOUT);</span><br><span>              if (n_inc(N3105)) {</span><br><span>                  TBF_SET_STATE(this, GPRS_RLCMAC_RELEASING);</span><br><span>                  T_START(this, T3195, 3195, "MAX N3105 reached", true);</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->rlc_ass_failed();</span><br><span style="color: hsl(0, 100%, 40%);">-                       bts->pua_poll_failed();</span><br><span style="color: hsl(120, 100%, 40%);">+                    bts->do_rate_ctr_inc(CTR_RLC_ASS_FAILED);</span><br><span style="color: hsl(120, 100%, 40%);">+                  bts->do_rate_ctr_inc(CTR_PUA_POLL_FAILED);</span><br><span>                        return;</span><br><span>              }</span><br><span>            /* reschedule UL assignment */</span><br><span>@@ -861,13 +861,13 @@</span><br><span>                       state_flags |= (1 << GPRS_RLCMAC_FLAG_TO_DL_ASS);</span><br><span>              }</span><br><span>            dl_ass_state = GPRS_RLCMAC_DL_ASS_NONE;</span><br><span style="color: hsl(0, 100%, 40%);">-         bts->rlc_ass_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-             bts->pda_poll_timedout();</span><br><span style="color: hsl(120, 100%, 40%);">+          bts->do_rate_ctr_inc(CTR_RLC_ASS_TIMEDOUT);</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_PDA_POLL_TIMEDOUT);</span><br><span>              if (n_inc(N3105)) {</span><br><span>                  TBF_SET_STATE(this, GPRS_RLCMAC_RELEASING);</span><br><span>                  T_START(this, T3195, 3195, "MAX N3105 reached", true);</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->rlc_ass_failed();</span><br><span style="color: hsl(0, 100%, 40%);">-                       bts->pda_poll_failed();</span><br><span style="color: hsl(120, 100%, 40%);">+                    bts->do_rate_ctr_inc(CTR_RLC_ASS_FAILED);</span><br><span style="color: hsl(120, 100%, 40%);">+                  bts->do_rate_ctr_inc(CTR_PDA_POLL_FAILED);</span><br><span>                        return;</span><br><span>              }</span><br><span>            /* reschedule DL assignment */</span><br><span>@@ -883,17 +883,17 @@</span><br><span>               }</span><br><span> </span><br><span>                if (dl_tbf->state_is(GPRS_RLCMAC_RELEASING))</span><br><span style="color: hsl(0, 100%, 40%);">-                 bts->rlc_rel_timedout();</span><br><span style="color: hsl(120, 100%, 40%);">+                   bts->do_rate_ctr_inc(CTR_RLC_REL_TIMEDOUT);</span><br><span>               else {</span><br><span style="color: hsl(0, 100%, 40%);">-                  bts->rlc_ack_timedout();</span><br><span style="color: hsl(0, 100%, 40%);">-                     bts->pkt_dl_ack_nack_poll_timedout();</span><br><span style="color: hsl(120, 100%, 40%);">+                      bts->do_rate_ctr_inc(CTR_RLC_ACK_TIMEDOUT);</span><br><span style="color: hsl(120, 100%, 40%);">+                        bts->do_rate_ctr_inc(CTR_PDAN_POLL_TIMEDOUT);</span><br><span>             }</span><br><span> </span><br><span>                if (dl_tbf->n_inc(N3105)) {</span><br><span>                       TBF_SET_STATE(dl_tbf, GPRS_RLCMAC_RELEASING);</span><br><span>                        T_START(dl_tbf, T3195, 3195, "MAX N3105 reached", true);</span><br><span style="color: hsl(0, 100%, 40%);">-                      bts->pkt_dl_ack_nack_poll_failed();</span><br><span style="color: hsl(0, 100%, 40%);">-                  bts->rlc_ack_failed();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bts->do_rate_ctr_inc(CTR_PDAN_POLL_FAILED);</span><br><span style="color: hsl(120, 100%, 40%);">+                        bts->do_rate_ctr_inc(CTR_RLC_ACK_FAILED);</span><br><span>                         return;</span><br><span>              }</span><br><span>            /* resend IMM.ASS on CCCH on timeout */</span><br><span>@@ -984,7 +984,7 @@</span><br><span> </span><br><span>    if (ms->egprs_ms_class() == 0 && bts->egprs_enabled) {</span><br><span>                 LOGP(DTBF, LOGL_NOTICE, "Not accepting non-EGPRS phone in EGPRS-only mode\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                bts->bts->tbf_failed_egprs_only();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->bts->do_rate_ctr_inc(CTR_TBF_FAILED_EGPRS_ONLY);</span><br><span>          return NULL;</span><br><span>         }</span><br><span> </span><br><span>@@ -1026,7 +1026,7 @@</span><br><span>        }</span><br><span> </span><br><span>        llist_add(&tbf->list(), &bts->bts->ul_tbfs());</span><br><span style="color: hsl(0, 100%, 40%);">- tbf->bts->tbf_ul_created();</span><br><span style="color: hsl(120, 100%, 40%);">+     tbf->bts->do_rate_ctr_inc(CTR_TBF_UL_ALLOCATED);</span><br><span> </span><br><span>   return tbf;</span><br><span> }</span><br><span>@@ -1057,7 +1057,7 @@</span><br><span>     if (ms->egprs_ms_class() == 0 && bts->egprs_enabled) {</span><br><span>                 if (ms->ms_class() > 0) {</span><br><span>                      LOGP(DTBF, LOGL_NOTICE, "Not accepting non-EGPRS phone in EGPRS-only mode\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->bts->tbf_failed_egprs_only();</span><br><span style="color: hsl(120, 100%, 40%);">+                      bts->bts->do_rate_ctr_inc(CTR_TBF_FAILED_EGPRS_ONLY);</span><br><span>                  return NULL;</span><br><span>                 }</span><br><span>            ms->set_egprs_ms_class(1);</span><br><span>@@ -1109,7 +1109,7 @@</span><br><span>        }</span><br><span> </span><br><span>        llist_add(&tbf->list(), &bts->bts->dl_tbfs());</span><br><span style="color: hsl(0, 100%, 40%);">- tbf->bts->tbf_dl_created();</span><br><span style="color: hsl(120, 100%, 40%);">+     tbf->bts->do_rate_ctr_inc(CTR_TBF_DL_ALLOCATED);</span><br><span> </span><br><span>   tbf->m_last_dl_poll_fn = -1;</span><br><span>      tbf->m_last_dl_drained_fn = -1;</span><br><span>@@ -1276,7 +1276,7 @@</span><br><span>           goto free_ret;</span><br><span>       }</span><br><span>    LOGP(DTBF, LOGL_DEBUG, "------------------------- TX : Packet Downlink Assignment -------------------------\n");</span><br><span style="color: hsl(0, 100%, 40%);">-      bts->pkt_dl_assignemnt();</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->do_rate_ctr_inc(CTR_PKT_DL_ASSIGNMENT);</span><br><span>      bitvec_pack(ass_vec, msgb_put(msg, 23));</span><br><span> </span><br><span>         if (poll_ass_dl) {</span><br><span>@@ -1315,7 +1315,7 @@</span><br><span>   Encoding::write_packet_access_reject(</span><br><span>                packet_access_rej, tlli());</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- bts->pkt_access_reject();</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->do_rate_ctr_inc(CTR_PKT_ACCESS_REJ);</span><br><span> </span><br><span>     bitvec_pack(packet_access_rej, msgb_put(msg, 23));</span><br><span> </span><br><span>@@ -1382,7 +1382,7 @@</span><br><span>               goto free_ret;</span><br><span>       }</span><br><span>    LOGP(DTBF, LOGL_DEBUG, "------------------------- TX : Packet Uplink Assignment -------------------------\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        bts->pkt_ul_assignment();</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->do_rate_ctr_inc(CTR_PKT_UL_ASSIGNMENT);</span><br><span> </span><br><span>  set_polling(new_poll_fn, ts, GPRS_RLCMAC_POLL_UL_ASS);</span><br><span> </span><br><span>@@ -1422,7 +1422,7 @@</span><br><span> {</span><br><span>      struct gprs_rlcmac_dl_tbf *new_tbf = NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  bts->tbf_reused();</span><br><span style="color: hsl(120, 100%, 40%);">+ bts->do_rate_ctr_inc(CTR_TBF_REUSED);</span><br><span> </span><br><span>         new_tbf = tbf_alloc_dl_tbf(bts->bts_data(), ms(),</span><br><span>                 this->trx->trx_no, false);</span><br><span>@@ -1577,7 +1577,7 @@</span><br><span>     ms->set_tlli(tlli);</span><br><span> </span><br><span>   llist_add(&ul_tbf->list(), &bts->bts->ul_tbfs());</span><br><span style="color: hsl(0, 100%, 40%);">-      ul_tbf->bts->tbf_ul_created();</span><br><span style="color: hsl(120, 100%, 40%);">+  ul_tbf->bts->do_rate_ctr_inc(CTR_TBF_UL_ALLOCATED);</span><br><span>    TBF_SET_ASS_ON(ul_tbf, GPRS_RLCMAC_FLAG_PACCH, false);</span><br><span> </span><br><span>   ul_tbf->set_ms(ms);</span><br><span>diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp</span><br><span>index 591f460..5197717 100644</span><br><span>--- a/src/tbf_dl.cpp</span><br><span>+++ b/src/tbf_dl.cpp</span><br><span>@@ -313,12 +313,12 @@</span><br><span>                          break;</span><br><span>               }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           bts->llc_timedout_frame();</span><br><span style="color: hsl(120, 100%, 40%);">+         bts->do_rate_ctr_inc(CTR_LLC_FRAME_TIMEDOUT);</span><br><span> drop_frame:</span><br><span>              frames++;</span><br><span>            octets += msg->len;</span><br><span>               msgb_free(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-         bts->llc_dropped_frame();</span><br><span style="color: hsl(120, 100%, 40%);">+          bts->do_rate_ctr_inc(CTR_LLC_FRAME_DROPPED);</span><br><span>              continue;</span><br><span>    }</span><br><span> </span><br><span>@@ -424,7 +424,7 @@</span><br><span>          LOGPTBFDL(this, LOGL_DEBUG, "Resending BSN %d\n", bsn);</span><br><span>            /* re-send block with negative aknowlegement */</span><br><span>              m_window.m_v_b.mark_unacked(bsn);</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->rlc_resent();</span><br><span style="color: hsl(120, 100%, 40%);">+         bts->do_rate_ctr_inc(CTR_RLC_RESENT);</span><br><span>     } else if (state_is(GPRS_RLCMAC_FINISHED)) {</span><br><span>                 /* If the TBF is in finished, we already sent all packages at least once.</span><br><span>             * If any packages could have been sent (because of unacked) it should have</span><br><span>@@ -432,7 +432,7 @@</span><br><span>            LOGPTBFDL(this, LOGL_DEBUG,</span><br><span>                    "Restarting at BSN %d, because all blocks have been transmitted.\n",</span><br><span>                       m_window.v_a());</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->rlc_restarted();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_RLC_RESTARTED);</span><br><span>          if (restart_bsn_cycle())</span><br><span>                     return take_next_bsn(fn, previous_bsn, may_combine);</span><br><span>         } else if (dl_window_stalled()) {</span><br><span>@@ -441,7 +441,7 @@</span><br><span>              LOGPTBFDL(this, LOGL_NOTICE,</span><br><span>                           "Restarting at BSN %d, because the window is stalled.\n",</span><br><span>                          m_window.v_a());</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->rlc_stalled();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_RLC_STALLED);</span><br><span>            if (restart_bsn_cycle())</span><br><span>                     return take_next_bsn(fn, previous_bsn, may_combine);</span><br><span>         } else if (have_data()) {</span><br><span>@@ -459,7 +459,7 @@</span><br><span>              LOGPTBFDL(this, LOGL_DEBUG,</span><br><span>                    "Restarting at BSN %d, because all blocks have been transmitted (FLOW).\n",</span><br><span>                        m_window.v_a());</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->rlc_restarted();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_RLC_RESTARTED);</span><br><span>          if (restart_bsn_cycle())</span><br><span>                     return take_next_bsn(fn, previous_bsn, may_combine);</span><br><span>         } else {</span><br><span>@@ -476,8 +476,8 @@</span><br><span>               LOGPTBFDL(this, LOGL_DEBUG,</span><br><span>                    "Nothing else to send, Re-transmit final block!\n");</span><br><span>             bsn = m_window.v_s_mod(-1);</span><br><span style="color: hsl(0, 100%, 40%);">-             bts->rlc_final_block_resent();</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->rlc_resent();</span><br><span style="color: hsl(120, 100%, 40%);">+         bts->do_rate_ctr_inc(CTR_RLC_FINAL_BLOCK_RESENT);</span><br><span style="color: hsl(120, 100%, 40%);">+          bts->do_rate_ctr_inc(CTR_RLC_RESENT);</span><br><span>     }</span><br><span> </span><br><span>        *may_combine = num_data_blocks(m_rlc.block(bsn)->cs_current_trans.headerTypeData()) > 1;</span><br><span>@@ -556,7 +556,7 @@</span><br><span>         LOGPTBFDL(this, LOGL_DEBUG, "Dequeue next LLC (len=%d)\n", msg->len);</span><br><span> </span><br><span>       m_llc.put_frame(msg->data, msg->len);</span><br><span style="color: hsl(0, 100%, 40%);">-     bts->llc_frame_sched();</span><br><span style="color: hsl(120, 100%, 40%);">+    bts->do_rate_ctr_inc(CTR_LLC_FRAME_SCHED);</span><br><span>        msgb_free(msg);</span><br><span>      m_last_dl_drained_fn = -1;</span><br><span> }</span><br><span>@@ -1360,15 +1360,15 @@</span><br><span>             */</span><br><span>          if (block_status_dl == EGPRS_RESEG_FIRST_SEG_SENT) {</span><br><span>                         /* statistics */</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->spb_downlink_second_segment();</span><br><span style="color: hsl(120, 100%, 40%);">+                        bts->do_rate_ctr_inc(CTR_SPB_DL_SECOND_SEGMENT);</span><br><span>                  return EGPRS_RLCMAC_DL_SEC_SEG;</span><br><span>              } else if ((ht_cs_init == HEADER_EGPRS_DATA_TYPE_1) ||</span><br><span>                          (ht_cs_init == HEADER_EGPRS_DATA_TYPE_2)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  bts->spb_downlink_first_segment();</span><br><span style="color: hsl(120, 100%, 40%);">+                 bts->do_rate_ctr_inc(CTR_SPB_DL_FIRST_SEGMENT);</span><br><span>                   return EGPRS_RLCMAC_DL_FIRST_SEG;</span><br><span>            } else if ((cs_init == MCS4) &&</span><br><span>                         (cs_current_trans == MCS1)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->spb_downlink_first_segment();</span><br><span style="color: hsl(120, 100%, 40%);">+                 bts->do_rate_ctr_inc(CTR_SPB_DL_FIRST_SEGMENT);</span><br><span>                   return EGPRS_RLCMAC_DL_FIRST_SEG;</span><br><span>            }</span><br><span>    }</span><br><span>@@ -1390,55 +1390,55 @@</span><br><span> {</span><br><span>     switch (cs) {</span><br><span>        case CS1:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_dl_cs1();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_DL_CS1);</span><br><span>            rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS1]);</span><br><span>              break;</span><br><span>       case CS2:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_dl_cs2();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_DL_CS2);</span><br><span>            rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS2]);</span><br><span>              break;</span><br><span>       case CS3:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_dl_cs3();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_DL_CS3);</span><br><span>            rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS3]);</span><br><span>              break;</span><br><span>       case CS4:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_dl_cs4();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_DL_CS4);</span><br><span>            rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS4]);</span><br><span>              break;</span><br><span>       case MCS1:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs1();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS1);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS1]);</span><br><span>           break;</span><br><span>       case MCS2:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs2();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS2);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS2]);</span><br><span>           break;</span><br><span>       case MCS3:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs3();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS3);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS3]);</span><br><span>           break;</span><br><span>       case MCS4:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs4();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS4);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS4]);</span><br><span>           break;</span><br><span>       case MCS5:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs5();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS5);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS5]);</span><br><span>           break;</span><br><span>       case MCS6:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs6();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS6);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS6]);</span><br><span>           break;</span><br><span>       case MCS7:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs7();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS7);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS7]);</span><br><span>           break;</span><br><span>       case MCS8:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs8();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS8);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS8]);</span><br><span>           break;</span><br><span>       case MCS9:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_dl_mcs9();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_DL_MCS9);</span><br><span>          rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS9]);</span><br><span>           break;</span><br><span>       default:</span><br><span>diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp</span><br><span>index 020285e..90cbf8d 100644</span><br><span>--- a/src/tbf_ul.cpp</span><br><span>+++ b/src/tbf_ul.cpp</span><br><span>@@ -288,7 +288,7 @@</span><br><span>                          rdbi, rlc->cs, rlc_data, NULL, 0, &new_tlli);</span><br><span> </span><br><span>                     if (num_chunks < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                bts->decode_error();</span><br><span style="color: hsl(120, 100%, 40%);">+                               bts->do_rate_ctr_inc(CTR_DECODE_ERRORS);</span><br><span>                          LOGPTBFUL(this, LOGL_NOTICE,</span><br><span>                                           "Failed to decode TLLI of %s UL DATA TFI=%d.\n",</span><br><span>                                           mcs_name(rlc->cs), rlc->tfi);</span><br><span>@@ -428,7 +428,7 @@</span><br><span>  union split_block_status *spb_status = &block->spb_status;</span><br><span>    uint8_t *rlc_data = &block->block[0];</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        bts->spb_uplink_second_segment();</span><br><span style="color: hsl(120, 100%, 40%);">+        bts->do_rate_ctr_inc(CTR_SPB_UL_SECOND_SEGMENT);</span><br><span> </span><br><span>        if (spb_status->block_status_ul &</span><br><span>                             EGPRS_RESEG_FIRST_SEG_RXD) {</span><br><span>@@ -461,7 +461,7 @@</span><br><span>   uint8_t *rlc_data = &block->block[0];</span><br><span>         union split_block_status *spb_status = &block->spb_status;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   bts->spb_uplink_first_segment();</span><br><span style="color: hsl(120, 100%, 40%);">+   bts->do_rate_ctr_inc(CTR_SPB_UL_FIRST_SEGMENT);</span><br><span> </span><br><span>       if (spb_status->block_status_ul & EGPRS_RESEG_SECOND_SEG_RXD) {</span><br><span>               LOGPTBFUL(this, LOGL_DEBUG,</span><br><span>@@ -541,55 +541,55 @@</span><br><span> {</span><br><span>     switch (cs) {</span><br><span>        case CS1:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_ul_cs1();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_UL_CS1);</span><br><span>            rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS1]);</span><br><span>              break;</span><br><span>       case CS2:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_ul_cs2();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_UL_CS2);</span><br><span>            rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS2]);</span><br><span>              break;</span><br><span>       case CS3:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_ul_cs3();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_UL_CS3);</span><br><span>            rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS3]);</span><br><span>              break;</span><br><span>       case CS4:</span><br><span style="color: hsl(0, 100%, 40%);">-               bts->gprs_ul_cs4();</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->do_rate_ctr_inc(CTR_GPRS_UL_CS4);</span><br><span>            rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS4]);</span><br><span>              break;</span><br><span>       case MCS1:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs1();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS1);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS1]);</span><br><span>           break;</span><br><span>       case MCS2:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs2();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS2);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS2]);</span><br><span>           break;</span><br><span>       case MCS3:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs3();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS3);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS3]);</span><br><span>           break;</span><br><span>       case MCS4:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs4();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS4);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS4]);</span><br><span>           break;</span><br><span>       case MCS5:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs5();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS5);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS5]);</span><br><span>           break;</span><br><span>       case MCS6:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs6();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS6);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS6]);</span><br><span>           break;</span><br><span>       case MCS7:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs7();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS7);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS7]);</span><br><span>           break;</span><br><span>       case MCS8:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs8();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS8);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS8]);</span><br><span>           break;</span><br><span>       case MCS9:</span><br><span style="color: hsl(0, 100%, 40%);">-              bts->egprs_ul_mcs9();</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->do_rate_ctr_inc(CTR_EGPRS_UL_MCS9);</span><br><span>          rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS9]);</span><br><span>           break;</span><br><span>       default:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/18226">change 18226</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-pcu/+/18226"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I360e322a30edf639aefb3c0f0e4354d98c9035a3 </div>
<div style="display:none"> Gerrit-Change-Number: 18226 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>