This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
sivasankari gerrit-no-reply at lists.osmocom.org
Review at https://gerrit.osmocom.org/1345
Add statistics in the ms and tbf level.
Adds DL throughput in show ms imsi <imsi_value>.
Adds the number of coding schemes counter and rlc nacked counter at TBf level.
Change-Id: Ia95b0404989b00db0e7ba416bc40d09ef41fde1c
---
M src/gprs_rlcmac_meas.cpp
M src/pcu_vty_functions.cpp
M src/rlc.cpp
M src/rlc.h
M src/tbf.cpp
M src/tbf.h
M src/tbf_dl.cpp
M tests/types/TypesTest.cpp
8 files changed, 95 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/45/1345/1
diff --git a/src/gprs_rlcmac_meas.cpp b/src/gprs_rlcmac_meas.cpp
index 5a2e38e..d6bbc19 100644
--- a/src/gprs_rlcmac_meas.cpp
+++ b/src/gprs_rlcmac_meas.cpp
@@ -179,6 +179,8 @@
if (elapsed < 128)
return 0;
+ tbf->m_bw.dl_throughput = (tbf->m_bw.dl_bw_octets/elapsed);
+
LOGP(DRLCMACMEAS, LOGL_INFO, "DL Bandwitdh of IMSI=%s / TLLI=0x%08x: "
"%d KBits/s\n", tbf->imsi(), tbf->tlli(),
tbf->m_bw.dl_bw_octets / elapsed);
diff --git a/src/pcu_vty_functions.cpp b/src/pcu_vty_functions.cpp
index ca7f7ad..416a074 100644
--- a/src/pcu_vty_functions.cpp
+++ b/src/pcu_vty_functions.cpp
@@ -76,6 +76,27 @@
vty_out(vty, " V(A)=%d V(S)=%d nBSN=%d%s",
win->v_a(), win->v_s(), win->resend_needed(),
win->window_stalled() ? " STALLED" : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ vty_out(vty, " RLC Nacked=%d", dl_tbf->m_rlc_nacked);
+ if (tbf->ms()->mode() == GprsCodingScheme::GPRS) {
+ vty_out(vty, " CS1=%d CS2=%d CS3=%d CS4=%d",
+ dl_tbf->statistics.cs1,
+ dl_tbf->statistics.cs2,
+ dl_tbf->statistics.cs3,
+ dl_tbf->statistics.cs4);
+ } else {
+ vty_out(vty, " MCS1=%d MCS2=%d MCS3=%d MCS4=%d MCS5=%d",
+ dl_tbf->statistics.mcs1,
+ dl_tbf->statistics.mcs2,
+ dl_tbf->statistics.mcs3,
+ dl_tbf->statistics.mcs4,
+ dl_tbf->statistics.mcs5);
+ vty_out(vty, " MCS6=%d MCS7=%d MCS8=%d MCS9=%d",
+ dl_tbf->statistics.mcs6,
+ dl_tbf->statistics.mcs7,
+ dl_tbf->statistics.mcs8,
+ dl_tbf->statistics.mcs9);
+ }
}
vty_out(vty, "%s%s", VTY_NEWLINE, VTY_NEWLINE);
}
@@ -176,11 +197,15 @@
ms->ul_tbf()->tfi(),
ms->ul_tbf()->state_name(),
VTY_NEWLINE);
- if (ms->dl_tbf())
+ if (ms->dl_tbf()) {
vty_out(vty, " Downlink TBF: TFI=%d, state=%s%s",
ms->dl_tbf()->tfi(),
ms->dl_tbf()->state_name(),
VTY_NEWLINE);
+ vty_out(vty, " Current DL Throughput: %d Kbits/sec %s",
+ ms->dl_tbf()->m_bw.dl_throughput,
+ VTY_NEWLINE);
+ }
llist_for_each(i_tbf, &ms->old_tbfs())
vty_out(vty, " Old %-19s TFI=%d, state=%s%s",
diff --git a/src/rlc.cpp b/src/rlc.cpp
index 2bffccb..5059e23 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -129,6 +129,7 @@
LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn);
m_v_b.mark_nacked(bsn);
bts->rlc_nacked();
+ dl_tbf.m_rlc_nacked++;
*lost += 1;
}
}
@@ -153,6 +154,7 @@
LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn);
m_v_b.mark_nacked(bsn);
bts->rlc_nacked();
+ dl_tbf.m_rlc_nacked++;
*lost += 1;
}
}
diff --git a/src/rlc.h b/src/rlc.h
index b2fcd95..14b8bbb 100644
--- a/src/rlc.h
+++ b/src/rlc.h
@@ -37,6 +37,7 @@
struct BTS;
struct gprs_rlc_v_n;
+struct gprs_rlcmac_dl_tbf;
/* The state of a BSN in the send/receive window */
enum gprs_rlc_ul_bsn_state {
@@ -318,8 +319,9 @@
uint16_t m_v_a; /* ack state */
gprs_rlc_v_b m_v_b;
+ gprs_rlcmac_dl_tbf &dl_tbf;
- gprs_rlc_dl_window();
+ gprs_rlc_dl_window(gprs_rlcmac_dl_tbf &tbf);
};
struct gprs_rlc_v_n {
@@ -498,9 +500,10 @@
return bsn & mod_sns();
}
-inline gprs_rlc_dl_window::gprs_rlc_dl_window()
+inline gprs_rlc_dl_window::gprs_rlc_dl_window(gprs_rlcmac_dl_tbf &tbf)
: m_v_s(0)
, m_v_a(0)
+ , dl_tbf(tbf)
{
}
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 25209e4..46f8268 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -49,6 +49,23 @@
timerclear(&rssi_tv);
}
+gprs_rlcmac_tbf::Statistics::Statistics() :
+ cs1(0),
+ cs2(0),
+ cs3(0),
+ cs4(0),
+ mcs1(0),
+ mcs2(0),
+ mcs3(0),
+ mcs4(0),
+ mcs5(0),
+ mcs6(0),
+ mcs7(0),
+ mcs8(0),
+ mcs9(0)
+{
+}
+
gprs_rlcmac_tbf::gprs_rlcmac_tbf(BTS *bts_, gprs_rlcmac_tbf_direction dir) :
state_flags(0),
direction(dir),
@@ -732,7 +749,8 @@
gprs_rlcmac_dl_tbf::BandWidth::BandWidth() :
dl_bw_octets(0),
dl_loss_lost(0),
- dl_loss_received(0)
+ dl_loss_received(0),
+ dl_throughput(0)
{
timerclear(&dl_bw_tv);
timerclear(&dl_loss_tv);
@@ -744,7 +762,8 @@
m_wait_confirm(0),
m_dl_ack_requested(false),
m_last_dl_poll_fn(0),
- m_last_dl_drained_fn(0)
+ m_last_dl_drained_fn(0),
+ m_window(*this)
{
memset(&m_llc_timer, 0, sizeof(m_llc_timer));
}
diff --git a/src/tbf.h b/src/tbf.h
index 1e98a24..97bad1d 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -225,6 +225,24 @@
uint8_t m_tfi;
time_t m_created_ts;
+ struct Statistics {
+ uint32_t cs1;
+ uint32_t cs2;
+ uint32_t cs3;
+ uint32_t cs4;
+ uint32_t mcs1;
+ uint32_t mcs2;
+ uint32_t mcs3;
+ uint32_t mcs4;
+ uint32_t mcs5;
+ uint32_t mcs6;
+ uint32_t mcs7;
+ uint32_t mcs8;
+ uint32_t mcs9;
+
+ Statistics();
+ } statistics;
+
protected:
gprs_rlcmac_bts *bts_data() const;
@@ -395,10 +413,12 @@
bool m_dl_ack_requested;
int32_t m_last_dl_poll_fn;
int32_t m_last_dl_drained_fn;
+ int32_t m_rlc_nacked;
struct BandWidth {
struct timeval dl_bw_tv; /* timestamp for dl bw calculation */
uint32_t dl_bw_octets; /* number of octets since bw_tv */
+ uint32_t dl_throughput; /* throughput to be displayed in stats */
struct timeval dl_loss_tv; /* timestamp for loss calculation */
uint16_t dl_loss_lost; /* sum of lost packets */
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index c6f3945..9dfffa3 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -1342,45 +1342,58 @@
switch (coding_scheme) {
case GprsCodingScheme::CS1 :
bts->gprs_dl_cs1();
+ statistics.cs1++;
break;
case GprsCodingScheme::CS2 :
bts->gprs_dl_cs2();
+ statistics.cs2++;
break;
case GprsCodingScheme::CS3 :
bts->gprs_dl_cs3();
+ statistics.cs3++;
break;
case GprsCodingScheme::CS4 :
bts->gprs_dl_cs4();
+ statistics.cs4++;
break;
}
} else {
switch (coding_scheme) {
case GprsCodingScheme::MCS1 :
bts->egprs_dl_mcs1();
+ statistics.mcs1++;
break;
case GprsCodingScheme::MCS2 :
bts->egprs_dl_mcs2();
+ statistics.mcs2++;
break;
case GprsCodingScheme::MCS3 :
bts->egprs_dl_mcs3();
+ statistics.mcs3++;
break;
case GprsCodingScheme::MCS4 :
bts->egprs_dl_mcs4();
+ statistics.mcs4++;
break;
case GprsCodingScheme::MCS5 :
bts->egprs_dl_mcs5();
+ statistics.mcs5++;
break;
case GprsCodingScheme::MCS6 :
bts->egprs_dl_mcs6();
+ statistics.mcs6++;
break;
case GprsCodingScheme::MCS7 :
bts->egprs_dl_mcs7();
+ statistics.mcs7++;
break;
case GprsCodingScheme::MCS8 :
bts->egprs_dl_mcs8();
+ statistics.mcs8++;
break;
case GprsCodingScheme::MCS9 :
bts->egprs_dl_mcs9();
+ statistics.mcs9++;
break;
}
}
diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp
index ee1c817..58ecc60 100644
--- a/tests/types/TypesTest.cpp
+++ b/tests/types/TypesTest.cpp
@@ -21,6 +21,7 @@
*/
#include "bts.h"
#include "tbf.h"
+#include "rlc.h"
#include "gprs_debug.h"
#include "encoding.h"
#include "decoding.h"
@@ -147,7 +148,9 @@
static void test_rlc_dl_ul_basic()
{
{
- gprs_rlc_dl_window dl_win;
+ struct BTS BTS;
+ gprs_rlcmac_dl_tbf dl_tbf(&BTS);
+ gprs_rlc_dl_window dl_win(dl_tbf);
OSMO_ASSERT(dl_win.window_empty());
OSMO_ASSERT(!dl_win.window_stalled());
OSMO_ASSERT(dl_win.distance() == 0);
@@ -346,7 +349,8 @@
char show_rbb[65];
uint8_t bits_data[8];
BTS dummy_bts;
- gprs_rlc_dl_window dl_win;
+ gprs_rlcmac_dl_tbf dl_tbf(&dummy_bts);
+ gprs_rlc_dl_window dl_win(dl_tbf);
bitvec bits;
int bsn_begin, bsn_end, num_blocks;
Ack_Nack_Description_t desc;
--
To view, visit https://gerrit.osmocom.org/1345
To unsubscribe, visit https://gerrit.osmocom.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia95b0404989b00db0e7ba416bc40d09ef41fde1c
Gerrit-PatchSet: 1
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: sivasankari <Sivasankari.Theerthagiri at radisys.com>