@@ -73,6 +73,10 @@
{ "rlc.late-block", "RLC Late Block "},
{ "rlc.sent-dummy", "RLC Sent Dummy "},
{ "rlc.sent-control", "RLC Sent Control "},
+ { "rlc.dl_bytes", "RLC DL Bytes "},
+ { "rlc.dl_payload_bytes", "RLC DL Payload Bytes "},
+ { "rlc.ul_bytes", "RLC UL Bytes "},
+ { "rlc.ul_payload_bytes", "RLC UL Payload Bytes "},
{ "decode.errors", "Decode Errors "},
{ "sba.allocated", "SBA Allocated "},
{ "sba.freed", "SBA Freed "},
@@ -80,6 +84,8 @@
{ "llc.timeout", "Timedout Frames "},
{ "llc.dropped", "Dropped Frames "},
{ "llc.scheduled", "Scheduled Frames "},
+ { "llc.dl_bytes", "RLC encapsulated PDUs"},
+ { "llc.ul_bytes", "full PDUs received "},
{ "rach.requests", "RACH requests "},
};
@@ -1302,6 +1308,8 @@
return -EINVAL;
}
+ bts()->rlc_ul_bytes(len);
+
LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, "
"length: %d (%d))\n", cs.name(), len, cs.usedSizeUL());
@@ -235,6 +235,10 @@
CTR_RLC_LATE_BLOCK,
CTR_RLC_SENT_DUMMY,
CTR_RLC_SENT_CONTROL,
+ CTR_RLC_DL_BYTES,
+ CTR_RLC_DL_PAYLOAD_BYTES,
+ CTR_RLC_UL_BYTES,
+ CTR_RLC_UL_PAYLOAD_BYTES,
CTR_DECODE_ERRORS,
CTR_SBA_ALLOCATED,
CTR_SBA_FREED,
@@ -242,6 +246,8 @@
CTR_LLC_FRAME_TIMEDOUT,
CTR_LLC_FRAME_DROPPED,
CTR_LLC_FRAME_SCHED,
+ CTR_LLC_DL_BYTES,
+ CTR_LLC_UL_BYTES,
CTR_RACH_REQUESTS,
};
@@ -313,6 +319,10 @@
void rlc_late_block();
void rlc_sent_dummy();
void rlc_sent_control();
+ void rlc_dl_bytes(int bytes);
+ void rlc_dl_payload_bytes(int bytes);
+ void rlc_ul_bytes(int bytes);
+ void rlc_ul_payload_bytes(int bytes);
void decode_error();
void sba_allocated();
void sba_freed();
@@ -320,6 +330,8 @@
void llc_timedout_frame();
void llc_dropped_frame();
void llc_frame_sched();
+ void llc_dl_bytes(int bytes);
+ void llc_ul_bytes(int bytes);
void rach_frame();
void ms_present(int32_t n);
@@ -427,6 +439,11 @@
return m_statg;
}
+#define CREATE_COUNT_ADD_INLINE(func_name, ctr_name) \
+ inline void BTS::func_name(int inc) {\
+ rate_ctr_add(&m_ratectrs->ctr[ctr_name], inc); \
+ }
+
#define CREATE_COUNT_INLINE(func_name, ctr_name) \
inline void BTS::func_name() {\
rate_ctr_inc(&m_ratectrs->ctr[ctr_name]); \
@@ -455,6 +472,10 @@
CREATE_COUNT_INLINE(rlc_late_block, CTR_RLC_LATE_BLOCK);
CREATE_COUNT_INLINE(rlc_sent_dummy, CTR_RLC_SENT_DUMMY);
CREATE_COUNT_INLINE(rlc_sent_control, CTR_RLC_SENT_CONTROL);
+CREATE_COUNT_ADD_INLINE(rlc_dl_bytes, CTR_RLC_DL_BYTES);
+CREATE_COUNT_ADD_INLINE(rlc_dl_payload_bytes, CTR_RLC_DL_PAYLOAD_BYTES);
+CREATE_COUNT_ADD_INLINE(rlc_ul_bytes, CTR_RLC_UL_BYTES);
+CREATE_COUNT_ADD_INLINE(rlc_ul_payload_bytes, CTR_RLC_UL_PAYLOAD_BYTES);
CREATE_COUNT_INLINE(decode_error, CTR_DECODE_ERRORS)
CREATE_COUNT_INLINE(sba_allocated, CTR_SBA_ALLOCATED)
CREATE_COUNT_INLINE(sba_freed, CTR_SBA_FREED)
@@ -462,6 +483,8 @@
CREATE_COUNT_INLINE(llc_timedout_frame, CTR_LLC_FRAME_TIMEDOUT);
CREATE_COUNT_INLINE(llc_dropped_frame, CTR_LLC_FRAME_DROPPED);
CREATE_COUNT_INLINE(llc_frame_sched, CTR_LLC_FRAME_SCHED);
+CREATE_COUNT_ADD_INLINE(llc_dl_bytes, CTR_LLC_DL_BYTES);
+CREATE_COUNT_ADD_INLINE(llc_ul_bytes, CTR_LLC_UL_BYTES);
CREATE_COUNT_INLINE(rach_frame, CTR_RACH_REQUESTS);
#undef CREATE_COUNT_INLINE
@@ -360,6 +360,7 @@
if (!msg)
return -ENOMEM;
/* msg is now available */
+ bts->bts->rlc_dl_bytes(msg->data_len);
/* set USF */
OSMO_ASSERT(msgb_length(msg) > 0);
@@ -513,6 +513,7 @@
do {
bool is_final;
+ int payload_written = 0;
if (m_llc.frame_length() == 0) {
/* nothing to sent - delay the release of the TBF */
@@ -540,7 +541,10 @@
is_final = llc_queue()->size() == 0 && !keep_open(fn);
ar = Encoding::rlc_data_to_dl_append(rdbi, cs,
- &m_llc, &write_offset, &num_chunks, data, is_final, NULL);
+ &m_llc, &write_offset, &num_chunks, data, is_final, &payload_written);
+
+ if (payload_written > 0)
+ bts->rlc_dl_payload_bytes(payload_written);
if (ar == Encoding::AR_NEED_MORE_BLOCKS)
break;
@@ -548,6 +552,7 @@
LOGP(DRLCMACDL, LOGL_INFO, "Complete DL frame for %s"
"len=%d\n", tbf_name(this), m_llc.frame_length());
gprs_rlcmac_dl_bw(this, m_llc.frame_length());
+ bts->llc_dl_bytes(m_llc.frame_length());
m_llc.reset();
if (is_final) {
@@ -67,6 +67,8 @@
for (i = 0; i < num_frames; i++) {
frame = frames + i;
+ bts->rlc_ul_payload_bytes(frame->length);
+
LOGP(DRLCMACUL, LOGL_DEBUG, "-- Frame %d starts at offset %d, "
"length=%d, is_complete=%d\n",
i + 1, frame->offset, frame->length, frame->is_complete);
@@ -79,6 +81,7 @@
LOGP(DRLCMACUL, LOGL_INFO, "%s complete UL frame len=%d\n",
tbf_name(this) , m_llc.frame_length());
snd_ul_ud();
+ bts->llc_ul_bytes(m_llc.frame_length());
m_llc.reset();
}
}