[PATCH] osmo-pcu[master]: Move all rate counter related code together

2017-10-25 Thread Max
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/4413

to look at the new patch set (#6).

Move all rate counter related code together

Change-Id: I795631752af3b9077a846c3123217e1deda52e86
Related: OS#1538
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac_sched.cpp
M src/gprs_rlcmac_ts_alloc.cpp
M src/llc.cpp
M src/pcu_ctr.h
M src/rlc.cpp
M src/sba.cpp
M src/tbf.cpp
M src/tbf_dl.cpp
M src/tbf_ul.cpp
11 files changed, 302 insertions(+), 376 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/13/4413/6

diff --git a/src/bts.cpp b/src/bts.cpp
index 0f7462a..16d9dba 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -30,6 +30,7 @@
 #include 
 
 extern "C" {
+   #include "pcu_ctr.h"
#include 
#include 
#include 
@@ -161,7 +162,7 @@
LOGP(DRLCMAC, LOGL_NOTICE,
"Late RLC block, FN delta: %d FN: %d curFN: %d\n",
delay, fn, current_frame_number());
-   rlc_late_block();
+   rlc_late_block(bts_data()->ctrs);
}
 
m_cur_blk_fn = fn;
@@ -506,10 +507,10 @@
uint16_t priority = 0;
bool failure = false;
 
-   rach_frame();
+   rach_frame(bts_data()->ctrs);
 
if (is_11bit)
-   rach_frame_11bit();
+   rach_frame_11bit(bts_data()->ctrs);
 
/* Determine full frame number */
Fn = rfn_to_fn(Fn);
@@ -590,7 +591,7 @@
plen = Encoding::write_immediate_assignment_reject(
immediate_assignment, ra, Fn,
burst_type);
-   immediate_assignment_reject();
+   immediate_assignment_reject(bts_data()->ctrs);
}
else {
LOGP(DRLCMAC, LOGL_DEBUG,
@@ -605,7 +606,7 @@
}
 
if (plen >= 0) {
-   immediate_assignment_ul_tbf();
+   immediate_assignment_ul_tbf(bts_data()->ctrs);
pcu_l1if_tx_agch(immediate_assignment, plen);
}
 
@@ -699,7 +700,7 @@
tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,
tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1);
if (plen >= 0) {
-   immediate_assignment_dl_tbf();
+   immediate_assignment_dl_tbf(bts_data()->ctrs);
pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
}
 
@@ -1026,7 +1027,7 @@
 
 static inline void sched_ul_ass_or_rej(BTS *bts, gprs_rlcmac_bts *bts_data, 
struct gprs_rlcmac_dl_tbf *tbf)
 {
-   bts->channel_request_description();
+   channel_request_description(bts->bts_data()->ctrs);
 
/* This call will register the new TBF with the MS on success */
gprs_rlcmac_ul_tbf *ul_tbf = tbf_alloc_ul(bts_data, tbf->trx->trx_no, 
tbf->ms_class(),
@@ -1356,7 +1357,7 @@
else
bts()->send_gsmtap(PCU_GSMTAP_C_UL_CTRL, true, trx_no(), ts_no, 
GSMTAP_CHANNEL_PACCH, fn, data, data_len);
 
-   bts()->rlc_rcvd_control();
+   rlc_rcvd_control(bts_data()->ctrs);
switch (ul_control_block->u.MESSAGE_TYPE) {
case MT_PACKET_CONTROL_ACK:

rcv_control_ack(_control_block->u.Packet_Control_Acknowledgement, fn);
@@ -1377,7 +1378,7 @@
/* ignoring it. change the SI to not force sending these? */
break;
default:
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMAC, LOGL_NOTICE,
"RX: [PCU <- BTS] unknown control block(%d) received\n",
ul_control_block->u.MESSAGE_TYPE);
@@ -1393,13 +1394,13 @@
 {
GprsCodingScheme cs = GprsCodingScheme::getBySizeUL(len);
if (!cs) {
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Dropping data block with invalid"
"length: %d)\n", len);
return -EINVAL;
}
 
-   bts()->rlc_ul_bytes(len);
+   rlc_ul_bytes(bts_data()->ctrs, len);
 
LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, "
"length: %d (%d))\n", cs.name(), len, cs.usedSizeUL());
@@ -1410,7 +1411,7 @@
if (cs.isEgprs())
return rcv_data_block(data, len, fn, meas, cs);
 
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Unsupported coding scheme %s\n",
cs.name());
return -EINVAL;
@@ -1447,7 +1448,7 @@
LOGP(DRLCMACUL, LOGL_ERROR,
"Got %s RLC block but header parsing has failed\n",
cs.name());
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
return rc;
}
 
diff --git a/src/bts.h b/src/bts.h
index 19d948a..128463e 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -253,94 +253,6 @@
 struct BTS {
 

[PATCH] osmo-pcu[master]: Move all rate counter related code together

2017-10-25 Thread Max
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/4413

to look at the new patch set (#5).

Move all rate counter related code together

Change-Id: I795631752af3b9077a846c3123217e1deda52e86
Related: OS#1538
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac_sched.cpp
M src/gprs_rlcmac_ts_alloc.cpp
M src/llc.cpp
M src/pcu_ctr.h
M src/rlc.cpp
M src/sba.cpp
M src/tbf.cpp
M src/tbf_dl.cpp
M src/tbf_ul.cpp
11 files changed, 302 insertions(+), 288 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/13/4413/5

diff --git a/src/bts.cpp b/src/bts.cpp
index 0f7462a..16d9dba 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -30,6 +30,7 @@
 #include 
 
 extern "C" {
+   #include "pcu_ctr.h"
#include 
#include 
#include 
@@ -161,7 +162,7 @@
LOGP(DRLCMAC, LOGL_NOTICE,
"Late RLC block, FN delta: %d FN: %d curFN: %d\n",
delay, fn, current_frame_number());
-   rlc_late_block();
+   rlc_late_block(bts_data()->ctrs);
}
 
m_cur_blk_fn = fn;
@@ -506,10 +507,10 @@
uint16_t priority = 0;
bool failure = false;
 
-   rach_frame();
+   rach_frame(bts_data()->ctrs);
 
if (is_11bit)
-   rach_frame_11bit();
+   rach_frame_11bit(bts_data()->ctrs);
 
/* Determine full frame number */
Fn = rfn_to_fn(Fn);
@@ -590,7 +591,7 @@
plen = Encoding::write_immediate_assignment_reject(
immediate_assignment, ra, Fn,
burst_type);
-   immediate_assignment_reject();
+   immediate_assignment_reject(bts_data()->ctrs);
}
else {
LOGP(DRLCMAC, LOGL_DEBUG,
@@ -605,7 +606,7 @@
}
 
if (plen >= 0) {
-   immediate_assignment_ul_tbf();
+   immediate_assignment_ul_tbf(bts_data()->ctrs);
pcu_l1if_tx_agch(immediate_assignment, plen);
}
 
@@ -699,7 +700,7 @@
tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,
tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1);
if (plen >= 0) {
-   immediate_assignment_dl_tbf();
+   immediate_assignment_dl_tbf(bts_data()->ctrs);
pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
}
 
@@ -1026,7 +1027,7 @@
 
 static inline void sched_ul_ass_or_rej(BTS *bts, gprs_rlcmac_bts *bts_data, 
struct gprs_rlcmac_dl_tbf *tbf)
 {
-   bts->channel_request_description();
+   channel_request_description(bts->bts_data()->ctrs);
 
/* This call will register the new TBF with the MS on success */
gprs_rlcmac_ul_tbf *ul_tbf = tbf_alloc_ul(bts_data, tbf->trx->trx_no, 
tbf->ms_class(),
@@ -1356,7 +1357,7 @@
else
bts()->send_gsmtap(PCU_GSMTAP_C_UL_CTRL, true, trx_no(), ts_no, 
GSMTAP_CHANNEL_PACCH, fn, data, data_len);
 
-   bts()->rlc_rcvd_control();
+   rlc_rcvd_control(bts_data()->ctrs);
switch (ul_control_block->u.MESSAGE_TYPE) {
case MT_PACKET_CONTROL_ACK:

rcv_control_ack(_control_block->u.Packet_Control_Acknowledgement, fn);
@@ -1377,7 +1378,7 @@
/* ignoring it. change the SI to not force sending these? */
break;
default:
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMAC, LOGL_NOTICE,
"RX: [PCU <- BTS] unknown control block(%d) received\n",
ul_control_block->u.MESSAGE_TYPE);
@@ -1393,13 +1394,13 @@
 {
GprsCodingScheme cs = GprsCodingScheme::getBySizeUL(len);
if (!cs) {
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Dropping data block with invalid"
"length: %d)\n", len);
return -EINVAL;
}
 
-   bts()->rlc_ul_bytes(len);
+   rlc_ul_bytes(bts_data()->ctrs, len);
 
LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, "
"length: %d (%d))\n", cs.name(), len, cs.usedSizeUL());
@@ -1410,7 +1411,7 @@
if (cs.isEgprs())
return rcv_data_block(data, len, fn, meas, cs);
 
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Unsupported coding scheme %s\n",
cs.name());
return -EINVAL;
@@ -1447,7 +1448,7 @@
LOGP(DRLCMACUL, LOGL_ERROR,
"Got %s RLC block but header parsing has failed\n",
cs.name());
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
return rc;
}
 
diff --git a/src/bts.h b/src/bts.h
index 19d948a..d20f633 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -390,95 +390,6 @@

[PATCH] osmo-pcu[master]: Move all rate counter related code together

2017-10-25 Thread Max
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/4413

to look at the new patch set (#4).

Move all rate counter related code together

Change-Id: I795631752af3b9077a846c3123217e1deda52e86
Related: OS#1538
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac_sched.cpp
M src/gprs_rlcmac_ts_alloc.cpp
M src/llc.cpp
M src/pcu_ctr.h
M src/rlc.cpp
M src/sba.cpp
M src/tbf.cpp
M src/tbf_dl.cpp
M src/tbf_ul.cpp
11 files changed, 300 insertions(+), 288 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/13/4413/4

diff --git a/src/bts.cpp b/src/bts.cpp
index 0f7462a..16d9dba 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -30,6 +30,7 @@
 #include 
 
 extern "C" {
+   #include "pcu_ctr.h"
#include 
#include 
#include 
@@ -161,7 +162,7 @@
LOGP(DRLCMAC, LOGL_NOTICE,
"Late RLC block, FN delta: %d FN: %d curFN: %d\n",
delay, fn, current_frame_number());
-   rlc_late_block();
+   rlc_late_block(bts_data()->ctrs);
}
 
m_cur_blk_fn = fn;
@@ -506,10 +507,10 @@
uint16_t priority = 0;
bool failure = false;
 
-   rach_frame();
+   rach_frame(bts_data()->ctrs);
 
if (is_11bit)
-   rach_frame_11bit();
+   rach_frame_11bit(bts_data()->ctrs);
 
/* Determine full frame number */
Fn = rfn_to_fn(Fn);
@@ -590,7 +591,7 @@
plen = Encoding::write_immediate_assignment_reject(
immediate_assignment, ra, Fn,
burst_type);
-   immediate_assignment_reject();
+   immediate_assignment_reject(bts_data()->ctrs);
}
else {
LOGP(DRLCMAC, LOGL_DEBUG,
@@ -605,7 +606,7 @@
}
 
if (plen >= 0) {
-   immediate_assignment_ul_tbf();
+   immediate_assignment_ul_tbf(bts_data()->ctrs);
pcu_l1if_tx_agch(immediate_assignment, plen);
}
 
@@ -699,7 +700,7 @@
tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,
tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1);
if (plen >= 0) {
-   immediate_assignment_dl_tbf();
+   immediate_assignment_dl_tbf(bts_data()->ctrs);
pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
}
 
@@ -1026,7 +1027,7 @@
 
 static inline void sched_ul_ass_or_rej(BTS *bts, gprs_rlcmac_bts *bts_data, 
struct gprs_rlcmac_dl_tbf *tbf)
 {
-   bts->channel_request_description();
+   channel_request_description(bts->bts_data()->ctrs);
 
/* This call will register the new TBF with the MS on success */
gprs_rlcmac_ul_tbf *ul_tbf = tbf_alloc_ul(bts_data, tbf->trx->trx_no, 
tbf->ms_class(),
@@ -1356,7 +1357,7 @@
else
bts()->send_gsmtap(PCU_GSMTAP_C_UL_CTRL, true, trx_no(), ts_no, 
GSMTAP_CHANNEL_PACCH, fn, data, data_len);
 
-   bts()->rlc_rcvd_control();
+   rlc_rcvd_control(bts_data()->ctrs);
switch (ul_control_block->u.MESSAGE_TYPE) {
case MT_PACKET_CONTROL_ACK:

rcv_control_ack(_control_block->u.Packet_Control_Acknowledgement, fn);
@@ -1377,7 +1378,7 @@
/* ignoring it. change the SI to not force sending these? */
break;
default:
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMAC, LOGL_NOTICE,
"RX: [PCU <- BTS] unknown control block(%d) received\n",
ul_control_block->u.MESSAGE_TYPE);
@@ -1393,13 +1394,13 @@
 {
GprsCodingScheme cs = GprsCodingScheme::getBySizeUL(len);
if (!cs) {
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Dropping data block with invalid"
"length: %d)\n", len);
return -EINVAL;
}
 
-   bts()->rlc_ul_bytes(len);
+   rlc_ul_bytes(bts_data()->ctrs, len);
 
LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, "
"length: %d (%d))\n", cs.name(), len, cs.usedSizeUL());
@@ -1410,7 +1411,7 @@
if (cs.isEgprs())
return rcv_data_block(data, len, fn, meas, cs);
 
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Unsupported coding scheme %s\n",
cs.name());
return -EINVAL;
@@ -1447,7 +1448,7 @@
LOGP(DRLCMACUL, LOGL_ERROR,
"Got %s RLC block but header parsing has failed\n",
cs.name());
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
return rc;
}
 
diff --git a/src/bts.h b/src/bts.h
index 19d948a..d20f633 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -390,95 +390,6 @@

[PATCH] osmo-pcu[master]: Move all rate counter related code together

2017-10-25 Thread Max
Hello Jenkins Builder,

I'd like you to reexamine a change.  Please visit

https://gerrit.osmocom.org/4413

to look at the new patch set (#3).

Move all rate counter related code together

Change-Id: I795631752af3b9077a846c3123217e1deda52e86
Related: OS#1538
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac_sched.cpp
M src/gprs_rlcmac_ts_alloc.cpp
M src/llc.cpp
M src/pcu_ctr.h
M src/rlc.cpp
M src/sba.cpp
M src/tbf.cpp
M src/tbf_dl.cpp
M src/tbf_ul.cpp
11 files changed, 303 insertions(+), 288 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/13/4413/3

diff --git a/src/bts.cpp b/src/bts.cpp
index 0f7462a..16d9dba 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -30,6 +30,7 @@
 #include 
 
 extern "C" {
+   #include "pcu_ctr.h"
#include 
#include 
#include 
@@ -161,7 +162,7 @@
LOGP(DRLCMAC, LOGL_NOTICE,
"Late RLC block, FN delta: %d FN: %d curFN: %d\n",
delay, fn, current_frame_number());
-   rlc_late_block();
+   rlc_late_block(bts_data()->ctrs);
}
 
m_cur_blk_fn = fn;
@@ -506,10 +507,10 @@
uint16_t priority = 0;
bool failure = false;
 
-   rach_frame();
+   rach_frame(bts_data()->ctrs);
 
if (is_11bit)
-   rach_frame_11bit();
+   rach_frame_11bit(bts_data()->ctrs);
 
/* Determine full frame number */
Fn = rfn_to_fn(Fn);
@@ -590,7 +591,7 @@
plen = Encoding::write_immediate_assignment_reject(
immediate_assignment, ra, Fn,
burst_type);
-   immediate_assignment_reject();
+   immediate_assignment_reject(bts_data()->ctrs);
}
else {
LOGP(DRLCMAC, LOGL_DEBUG,
@@ -605,7 +606,7 @@
}
 
if (plen >= 0) {
-   immediate_assignment_ul_tbf();
+   immediate_assignment_ul_tbf(bts_data()->ctrs);
pcu_l1if_tx_agch(immediate_assignment, plen);
}
 
@@ -699,7 +700,7 @@
tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,
tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1);
if (plen >= 0) {
-   immediate_assignment_dl_tbf();
+   immediate_assignment_dl_tbf(bts_data()->ctrs);
pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
}
 
@@ -1026,7 +1027,7 @@
 
 static inline void sched_ul_ass_or_rej(BTS *bts, gprs_rlcmac_bts *bts_data, 
struct gprs_rlcmac_dl_tbf *tbf)
 {
-   bts->channel_request_description();
+   channel_request_description(bts->bts_data()->ctrs);
 
/* This call will register the new TBF with the MS on success */
gprs_rlcmac_ul_tbf *ul_tbf = tbf_alloc_ul(bts_data, tbf->trx->trx_no, 
tbf->ms_class(),
@@ -1356,7 +1357,7 @@
else
bts()->send_gsmtap(PCU_GSMTAP_C_UL_CTRL, true, trx_no(), ts_no, 
GSMTAP_CHANNEL_PACCH, fn, data, data_len);
 
-   bts()->rlc_rcvd_control();
+   rlc_rcvd_control(bts_data()->ctrs);
switch (ul_control_block->u.MESSAGE_TYPE) {
case MT_PACKET_CONTROL_ACK:

rcv_control_ack(_control_block->u.Packet_Control_Acknowledgement, fn);
@@ -1377,7 +1378,7 @@
/* ignoring it. change the SI to not force sending these? */
break;
default:
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMAC, LOGL_NOTICE,
"RX: [PCU <- BTS] unknown control block(%d) received\n",
ul_control_block->u.MESSAGE_TYPE);
@@ -1393,13 +1394,13 @@
 {
GprsCodingScheme cs = GprsCodingScheme::getBySizeUL(len);
if (!cs) {
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Dropping data block with invalid"
"length: %d)\n", len);
return -EINVAL;
}
 
-   bts()->rlc_ul_bytes(len);
+   rlc_ul_bytes(bts_data()->ctrs, len);
 
LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, "
"length: %d (%d))\n", cs.name(), len, cs.usedSizeUL());
@@ -1410,7 +1411,7 @@
if (cs.isEgprs())
return rcv_data_block(data, len, fn, meas, cs);
 
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Unsupported coding scheme %s\n",
cs.name());
return -EINVAL;
@@ -1447,7 +1448,7 @@
LOGP(DRLCMACUL, LOGL_ERROR,
"Got %s RLC block but header parsing has failed\n",
cs.name());
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
return rc;
}
 
diff --git a/src/bts.h b/src/bts.h
index 19d948a..d20f633 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -390,95 +390,6 @@

[PATCH] osmo-pcu[master]: Move all rate counter related code together

2017-10-25 Thread Max

Review at  https://gerrit.osmocom.org/4413

Move all rate counter related code together

Change-Id: I795631752af3b9077a846c3123217e1deda52e86
Related: OS#1541
---
M src/bts.cpp
M src/bts.h
M src/gprs_rlcmac_sched.cpp
M src/gprs_rlcmac_ts_alloc.cpp
M src/llc.cpp
M src/pcu_ctr.h
M src/rlc.cpp
M src/sba.cpp
M src/tbf.cpp
M src/tbf_dl.cpp
M src/tbf_ul.cpp
11 files changed, 303 insertions(+), 288 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/13/4413/1

diff --git a/src/bts.cpp b/src/bts.cpp
index 0f7462a..16d9dba 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -30,6 +30,7 @@
 #include 
 
 extern "C" {
+   #include "pcu_ctr.h"
#include 
#include 
#include 
@@ -161,7 +162,7 @@
LOGP(DRLCMAC, LOGL_NOTICE,
"Late RLC block, FN delta: %d FN: %d curFN: %d\n",
delay, fn, current_frame_number());
-   rlc_late_block();
+   rlc_late_block(bts_data()->ctrs);
}
 
m_cur_blk_fn = fn;
@@ -506,10 +507,10 @@
uint16_t priority = 0;
bool failure = false;
 
-   rach_frame();
+   rach_frame(bts_data()->ctrs);
 
if (is_11bit)
-   rach_frame_11bit();
+   rach_frame_11bit(bts_data()->ctrs);
 
/* Determine full frame number */
Fn = rfn_to_fn(Fn);
@@ -590,7 +591,7 @@
plen = Encoding::write_immediate_assignment_reject(
immediate_assignment, ra, Fn,
burst_type);
-   immediate_assignment_reject();
+   immediate_assignment_reject(bts_data()->ctrs);
}
else {
LOGP(DRLCMAC, LOGL_DEBUG,
@@ -605,7 +606,7 @@
}
 
if (plen >= 0) {
-   immediate_assignment_ul_tbf();
+   immediate_assignment_ul_tbf(bts_data()->ctrs);
pcu_l1if_tx_agch(immediate_assignment, plen);
}
 
@@ -699,7 +700,7 @@
tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,
tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1);
if (plen >= 0) {
-   immediate_assignment_dl_tbf();
+   immediate_assignment_dl_tbf(bts_data()->ctrs);
pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
}
 
@@ -1026,7 +1027,7 @@
 
 static inline void sched_ul_ass_or_rej(BTS *bts, gprs_rlcmac_bts *bts_data, 
struct gprs_rlcmac_dl_tbf *tbf)
 {
-   bts->channel_request_description();
+   channel_request_description(bts->bts_data()->ctrs);
 
/* This call will register the new TBF with the MS on success */
gprs_rlcmac_ul_tbf *ul_tbf = tbf_alloc_ul(bts_data, tbf->trx->trx_no, 
tbf->ms_class(),
@@ -1356,7 +1357,7 @@
else
bts()->send_gsmtap(PCU_GSMTAP_C_UL_CTRL, true, trx_no(), ts_no, 
GSMTAP_CHANNEL_PACCH, fn, data, data_len);
 
-   bts()->rlc_rcvd_control();
+   rlc_rcvd_control(bts_data()->ctrs);
switch (ul_control_block->u.MESSAGE_TYPE) {
case MT_PACKET_CONTROL_ACK:

rcv_control_ack(_control_block->u.Packet_Control_Acknowledgement, fn);
@@ -1377,7 +1378,7 @@
/* ignoring it. change the SI to not force sending these? */
break;
default:
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMAC, LOGL_NOTICE,
"RX: [PCU <- BTS] unknown control block(%d) received\n",
ul_control_block->u.MESSAGE_TYPE);
@@ -1393,13 +1394,13 @@
 {
GprsCodingScheme cs = GprsCodingScheme::getBySizeUL(len);
if (!cs) {
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Dropping data block with invalid"
"length: %d)\n", len);
return -EINVAL;
}
 
-   bts()->rlc_ul_bytes(len);
+   rlc_ul_bytes(bts_data()->ctrs, len);
 
LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, "
"length: %d (%d))\n", cs.name(), len, cs.usedSizeUL());
@@ -1410,7 +1411,7 @@
if (cs.isEgprs())
return rcv_data_block(data, len, fn, meas, cs);
 
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
LOGP(DRLCMACUL, LOGL_ERROR, "Unsupported coding scheme %s\n",
cs.name());
return -EINVAL;
@@ -1447,7 +1448,7 @@
LOGP(DRLCMACUL, LOGL_ERROR,
"Got %s RLC block but header parsing has failed\n",
cs.name());
-   bts()->decode_error();
+   decode_error(bts_data()->ctrs);
return rc;
}
 
diff --git a/src/bts.h b/src/bts.h
index c2177ae..ec02b8c 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -387,95 +387,6 @@
  uint8_t ts_no, uint8_t channel, uint32_t fn,
  const uint8_t