aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2016-05-21 19:45:23 +0200
committerHolger Freyther <holger@freyther.de>2016-06-07 10:56:25 +0000
commit7fdbf89ef3cc14bc806ffbbfa0c7a78b24079581 (patch)
tree1390c9e458f936bc6bc3ca0e05cab753e1c38eba
parent6f0dc96929d1d4b979ba26d09434e84365290802 (diff)
add KPI counter to count bytes for RLC and LLC frames
rlc.dl_bytes bytes before sending rlc rlc.dl_payload_bytes count data w/o LI rlc.ul_bytes bytes when received rlc (only valid) rlc.ul_payload_bytes count data fragments w/o LI llc.dl_bytes complete encapsulated LLC PDUs llc.ul_bytes complete received LLC PDUs Change-Id: I9a98a5a375d39b3f4990360056c4d6145e755f4d Reviewed-on: https://gerrit.osmocom.org/145 Reviewed-by: Harald Welte <laforge@gnumonks.org> Reviewed-by: Holger Freyther <holger@freyther.de> Tested-by: Jenkins Builder
-rw-r--r--src/bts.cpp8
-rw-r--r--src/bts.h23
-rw-r--r--src/gprs_rlcmac_sched.cpp1
-rw-r--r--src/tbf_dl.cpp7
-rw-r--r--src/tbf_ul.cpp3
5 files changed, 41 insertions, 1 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 953ac4d3..9e91b870 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -73,6 +73,10 @@ static const struct rate_ctr_desc bts_ctr_description[] = {
{ "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 @@ static const struct rate_ctr_desc bts_ctr_description[] = {
{ "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 @@ int gprs_rlcmac_pdch::rcv_block(uint8_t *data, uint8_t len, uint32_t fn,
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());
diff --git a/src/bts.h b/src/bts.h
index 35f24d1e..a713c46d 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -235,6 +235,10 @@ public:
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 @@ public:
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 @@ public:
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 @@ public:
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 @@ inline struct osmo_stat_item_group *BTS::stat_items() const
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_rel_timedout, CTR_RLC_REL_TIMEDOUT);
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(sba_timedout, CTR_SBA_TIMEDOUT)
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
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp
index fce3aafa..0367ad02 100644
--- a/src/gprs_rlcmac_sched.cpp
+++ b/src/gprs_rlcmac_sched.cpp
@@ -360,6 +360,7 @@ int gprs_rlcmac_rcv_rts_block(struct gprs_rlcmac_bts *bts,
if (!msg)
return -ENOMEM;
/* msg is now available */
+ bts->bts->rlc_dl_bytes(msg->data_len);
/* set USF */
OSMO_ASSERT(msgb_length(msg) > 0);
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 66f747b9..59316763 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -513,6 +513,7 @@ int gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, GprsCodingScheme cs)
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 @@ int gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, GprsCodingScheme cs)
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 @@ int gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, GprsCodingScheme cs)
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) {
diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp
index e7c64ada..98962d17 100644
--- a/src/tbf_ul.cpp
+++ b/src/tbf_ul.cpp
@@ -67,6 +67,8 @@ int gprs_rlcmac_ul_tbf::assemble_forward_llc(const gprs_rlc_data *_data)
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 @@ int gprs_rlcmac_ul_tbf::assemble_forward_llc(const gprs_rlc_data *_data)
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();
}
}