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