Add BTS level counters

Adds counters for MCS blocks, 11 bit Rach counters and others.

Change-Id: I605b0d66eb217decd35cbb8f87abfa577760245a
This commit is contained in:
Mrinal Mishra 2016-11-10 18:16:30 +05:30 committed by arvind.sirsikar
parent ed3413e397
commit f86307e1e4
6 changed files with 294 additions and 4 deletions

View File

@ -88,6 +88,46 @@ static const struct rate_ctr_desc bts_ctr_description[] = {
{ "llc.dl_bytes", "RLC encapsulated PDUs"},
{ "llc.ul_bytes", "full PDUs received "},
{ "rach.requests", "RACH requests "},
{ "11bit_rach.requests", "11BIT_RACH requests "},
{ "immediate.assignment_UL", "Immediate Assign UL "},
{ "immediate.assignment_DL", "Immediate Assign DL "},
{ "pkt.ul_assignment", "Packet UL Assignment "},
{ "pkt.dl_assignment", "Packet DL Assignment "},
{ "ul.control", "UL control Block "},
{ "ul.assignment_poll_timeout", "UL Assign Timeout "},
{ "ul.assignment_failed", "UL Assign Failed "},
{ "dl.assignment_timeout", "DL Assign Timeout "},
{ "dl.assignment_failed", "DL Assign Failed "},
{ "pkt.ul_ack_nack_timeout", "PUAN Poll Timeout "},
{ "pkt.ul_ack_nack_failed", "PUAN poll Failed "},
{ "pkt.dl_ack_nack_timeout", "PDAN poll Timeout "},
{ "pkt.dl_ack_nack_failed", "PDAN poll Failed "},
{ "gprs.downlink_cs1", "CS1 downlink "},
{ "gprs.downlink_cs2", "CS2 downlink "},
{ "gprs.downlink_cs3", "CS3 downlink "},
{ "gprs.downlink_cs4", "CS4 downlink "},
{ "egprs.downlink_mcs1", "MCS1 downlink "},
{ "egprs.downlink_mcs2", "MCS2 downlink "},
{ "egprs.downlink_mcs3", "MCS3 downlink "},
{ "egprs.downlink_mcs4", "MCS4 downlink "},
{ "egprs.downlink_mcs5", "MCS5 downlink "},
{ "egprs.downlink_mcs6", "MCS6 downlink "},
{ "egprs.downlink_mcs7", "MCS7 downlink "},
{ "egprs.downlink_mcs8", "MCS8 downlink "},
{ "egprs.downlink_mcs9", "MCS9 downlink "},
{ "gprs.uplink_cs1", "CS1 Uplink "},
{ "gprs.uplink_cs2", "CS2 Uplink "},
{ "gprs.uplink_cs3", "CS3 Uplink "},
{ "gprs.uplink_cs4", "CS4 Uplink "},
{ "egprs.uplink_mcs1", "MCS1 Uplink "},
{ "egprs.uplink_mcs2", "MCS2 Uplink "},
{ "egprs.uplink_mcs3", "MCS3 Uplink "},
{ "egprs.uplink_mcs4", "MCS4 Uplink "},
{ "egprs.uplink_mcs5", "MCS5 Uplink "},
{ "egprs.uplink_mcs6", "MCS6 Uplink "},
{ "egprs.uplink_mcs7", "MCS7 Uplink "},
{ "egprs.uplink_mcs8", "MCS8 Uplink "},
{ "egprs.uplink_mcs9", "MCS9 Uplink "},
};
static const struct rate_ctr_group_desc bts_ctrg_desc = {
@ -485,6 +525,9 @@ int BTS::rcv_rach(uint16_t ra, uint32_t Fn, int16_t qta, uint8_t is_11bit,
rach_frame();
if (is_11bit)
rach_frame_11bit();
LOGP(DRLCMAC, LOGL_DEBUG, "MS requests UL TBF on RACH, "
"so we provide one \n"
"ra=0x%02x Fn=%u qta=%d is_11bit=%d:\n", ra, Fn, qta, is_11bit);
@ -573,8 +616,10 @@ int BTS::rcv_rach(uint16_t ra, uint32_t Fn, int16_t qta, uint8_t is_11bit,
m_bts.alpha, m_bts.gamma, -1, burst_type, sb);
}
if (plen >= 0)
if (plen >= 0) {
immediate_assignment_ul_tbf();
pcu_l1if_tx_agch(immediate_assignment, plen);
}
bitvec_free(immediate_assignment);
@ -699,8 +744,11 @@ void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi)
(tbf->pdch[ts]->last_rts_fn + 21216) % 2715648, tbf->ta(),
tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,
tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1);
if (plen >= 0)
if (plen >= 0) {
immediate_assignment_dl_tbf();
pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
}
bitvec_free(immediate_assignment);
}
@ -1363,6 +1411,7 @@ int gprs_rlcmac_pdch::rcv_control_block(
decode_gsm_rlcmac_uplink(rlc_block, ul_control_block);
LOGPC(DCSN1, LOGL_NOTICE, "\n");
LOGP(DRLCMAC, LOGL_DEBUG, "------------------------- RX : Uplink Control Block -------------------------\n");
bts()->rlc_rcvd_control();
switch (ul_control_block->u.MESSAGE_TYPE) {
case MT_PACKET_CONTROL_ACK:
rcv_control_ack(&ul_control_block->u.Packet_Control_Acknowledgement, fn);

120
src/bts.h
View File

@ -265,6 +265,46 @@ public:
CTR_LLC_DL_BYTES,
CTR_LLC_UL_BYTES,
CTR_RACH_REQUESTS,
CTR_11BIT_RACH_REQUESTS,
CTR_IMMEDIATE_ASSIGN_UL_TBF,
CTR_IMMEDIATE_ASSIGN_DL_TBF,
CTR_PKT_UL_ASSIGNMENT,
CTR_PKT_DL_ASSIGNMENT,
CTR_RLC_RECV_CONTROL,
CTR_PUA_POLL_TIMEDOUT,
CTR_PUA_POLL_FAILED,
CTR_PDA_POLL_TIMEDOUT,
CTR_PDA_POLL_FAILED,
CTR_PUAN_POLL_TIMEDOUT,
CTR_PUAN_POLL_FAILED,
CTR_PDAN_POLL_TIMEDOUT,
CTR_PDAN_POLL_FAILED,
CTR_GPRS_DL_CS1,
CTR_GPRS_DL_CS2,
CTR_GPRS_DL_CS3,
CTR_GPRS_DL_CS4,
CTR_EGPRS_DL_MCS1,
CTR_EGPRS_DL_MCS2,
CTR_EGPRS_DL_MCS3,
CTR_EGPRS_DL_MCS4,
CTR_EGPRS_DL_MCS5,
CTR_EGPRS_DL_MCS6,
CTR_EGPRS_DL_MCS7,
CTR_EGPRS_DL_MCS8,
CTR_EGPRS_DL_MCS9,
CTR_GPRS_UL_CS1,
CTR_GPRS_UL_CS2,
CTR_GPRS_UL_CS3,
CTR_GPRS_UL_CS4,
CTR_EGPRS_UL_MCS1,
CTR_EGPRS_UL_MCS2,
CTR_EGPRS_UL_MCS3,
CTR_EGPRS_UL_MCS4,
CTR_EGPRS_UL_MCS5,
CTR_EGPRS_UL_MCS6,
CTR_EGPRS_UL_MCS7,
CTR_EGPRS_UL_MCS8,
CTR_EGPRS_UL_MCS9,
};
enum {
@ -352,6 +392,46 @@ public:
void llc_dl_bytes(int bytes);
void llc_ul_bytes(int bytes);
void rach_frame();
void rach_frame_11bit();
void immediate_assignment_ul_tbf();
void immediate_assignment_dl_tbf();
void pkt_ul_assignment();
void pkt_dl_assignemnt();
void rlc_rcvd_control();
void pua_poll_timedout();
void pua_poll_failed();
void pda_poll_timedout();
void pda_poll_failed();
void pkt_ul_ack_nack_poll_timedout();
void pkt_ul_ack_nack_poll_failed();
void pkt_dl_ack_nack_poll_timedout();
void pkt_dl_ack_nack_poll_failed();
void gprs_dl_cs1();
void gprs_dl_cs2();
void gprs_dl_cs3();
void gprs_dl_cs4();
void egprs_dl_mcs1();
void egprs_dl_mcs2();
void egprs_dl_mcs3();
void egprs_dl_mcs4();
void egprs_dl_mcs5();
void egprs_dl_mcs6();
void egprs_dl_mcs7();
void egprs_dl_mcs8();
void egprs_dl_mcs9();
void gprs_ul_cs1();
void gprs_ul_cs2();
void gprs_ul_cs3();
void gprs_ul_cs4();
void egprs_ul_mcs1();
void egprs_ul_mcs2();
void egprs_ul_mcs3();
void egprs_ul_mcs4();
void egprs_ul_mcs5();
void egprs_ul_mcs6();
void egprs_ul_mcs7();
void egprs_ul_mcs8();
void egprs_ul_mcs9();
void ms_present(int32_t n);
int32_t ms_present_get();
@ -505,6 +585,46 @@ 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);
CREATE_COUNT_INLINE(rach_frame_11bit, CTR_11BIT_RACH_REQUESTS);
CREATE_COUNT_INLINE(immediate_assignment_ul_tbf, CTR_IMMEDIATE_ASSIGN_UL_TBF);
CREATE_COUNT_INLINE(immediate_assignment_dl_tbf, CTR_IMMEDIATE_ASSIGN_DL_TBF);
CREATE_COUNT_INLINE(pkt_ul_assignment, CTR_PKT_UL_ASSIGNMENT);
CREATE_COUNT_INLINE(pkt_dl_assignemnt, CTR_PKT_DL_ASSIGNMENT);
CREATE_COUNT_INLINE(rlc_rcvd_control, CTR_RLC_RECV_CONTROL);
CREATE_COUNT_INLINE(pua_poll_timedout, CTR_PUA_POLL_TIMEDOUT);
CREATE_COUNT_INLINE(pua_poll_failed, CTR_PUA_POLL_FAILED);
CREATE_COUNT_INLINE(pda_poll_timedout, CTR_PDA_POLL_TIMEDOUT);
CREATE_COUNT_INLINE(pda_poll_failed, CTR_PDA_POLL_FAILED);
CREATE_COUNT_INLINE(pkt_ul_ack_nack_poll_timedout, CTR_PUAN_POLL_TIMEDOUT);
CREATE_COUNT_INLINE(pkt_ul_ack_nack_poll_failed, CTR_PUAN_POLL_FAILED);
CREATE_COUNT_INLINE(pkt_dl_ack_nack_poll_timedout, CTR_PDAN_POLL_TIMEDOUT);
CREATE_COUNT_INLINE(pkt_dl_ack_nack_poll_failed, CTR_PDAN_POLL_FAILED);
CREATE_COUNT_INLINE(gprs_dl_cs1, CTR_GPRS_DL_CS1);
CREATE_COUNT_INLINE(gprs_dl_cs2, CTR_GPRS_DL_CS2);
CREATE_COUNT_INLINE(gprs_dl_cs3, CTR_GPRS_DL_CS3);
CREATE_COUNT_INLINE(gprs_dl_cs4, CTR_GPRS_DL_CS4);
CREATE_COUNT_INLINE(egprs_dl_mcs1, CTR_EGPRS_DL_MCS1);
CREATE_COUNT_INLINE(egprs_dl_mcs2, CTR_EGPRS_DL_MCS2);
CREATE_COUNT_INLINE(egprs_dl_mcs3, CTR_EGPRS_DL_MCS3);
CREATE_COUNT_INLINE(egprs_dl_mcs4, CTR_EGPRS_DL_MCS4);
CREATE_COUNT_INLINE(egprs_dl_mcs5, CTR_EGPRS_DL_MCS5);
CREATE_COUNT_INLINE(egprs_dl_mcs6, CTR_EGPRS_DL_MCS6);
CREATE_COUNT_INLINE(egprs_dl_mcs7, CTR_EGPRS_DL_MCS7);
CREATE_COUNT_INLINE(egprs_dl_mcs8, CTR_EGPRS_DL_MCS8);
CREATE_COUNT_INLINE(egprs_dl_mcs9, CTR_EGPRS_DL_MCS9);
CREATE_COUNT_INLINE(gprs_ul_cs1, CTR_GPRS_UL_CS1);
CREATE_COUNT_INLINE(gprs_ul_cs2, CTR_GPRS_UL_CS2);
CREATE_COUNT_INLINE(gprs_ul_cs3, CTR_GPRS_UL_CS3);
CREATE_COUNT_INLINE(gprs_ul_cs4, CTR_GPRS_UL_CS4);
CREATE_COUNT_INLINE(egprs_ul_mcs1, CTR_EGPRS_UL_MCS1);
CREATE_COUNT_INLINE(egprs_ul_mcs2, CTR_EGPRS_UL_MCS2);
CREATE_COUNT_INLINE(egprs_ul_mcs3, CTR_EGPRS_UL_MCS3);
CREATE_COUNT_INLINE(egprs_ul_mcs4, CTR_EGPRS_UL_MCS4);
CREATE_COUNT_INLINE(egprs_ul_mcs5, CTR_EGPRS_UL_MCS5);
CREATE_COUNT_INLINE(egprs_ul_mcs6, CTR_EGPRS_UL_MCS6);
CREATE_COUNT_INLINE(egprs_ul_mcs7, CTR_EGPRS_UL_MCS7);
CREATE_COUNT_INLINE(egprs_ul_mcs8, CTR_EGPRS_UL_MCS8);
CREATE_COUNT_INLINE(egprs_ul_mcs9, CTR_EGPRS_UL_MCS9);
#undef CREATE_COUNT_INLINE

View File

@ -508,12 +508,14 @@ void gprs_rlcmac_tbf::poll_timeout()
}
ul_ack_state = GPRS_RLCMAC_UL_ACK_NONE;
bts->rlc_ack_timedout();
bts->pkt_ul_ack_nack_poll_timedout();
if (state_is(GPRS_RLCMAC_FINISHED)) {
gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(this);
ul_tbf->m_n3103++;
if (ul_tbf->m_n3103 == ul_tbf->bts->bts_data()->n3103) {
LOGP(DRLCMAC, LOGL_NOTICE,
"- N3103 exceeded\n");
bts->pkt_ul_ack_nack_poll_failed();
ul_tbf->set_state(GPRS_RLCMAC_RELEASING);
tbf_timer_start(ul_tbf, 3169, ul_tbf->bts->bts_data()->t3169, 0);
return;
@ -533,11 +535,13 @@ void gprs_rlcmac_tbf::poll_timeout()
ul_ass_state = GPRS_RLCMAC_UL_ASS_NONE;
n3105++;
bts->rlc_ass_timedout();
bts->pua_poll_timedout();
if (n3105 == bts_data()->n3105) {
LOGP(DRLCMAC, LOGL_NOTICE, "- N3105 exceeded\n");
set_state(GPRS_RLCMAC_RELEASING);
tbf_timer_start(this, 3195, bts_data()->t3195, 0);
bts->rlc_ass_failed();
bts->pua_poll_failed();
return;
}
/* reschedule UL assignment */
@ -553,11 +557,13 @@ void gprs_rlcmac_tbf::poll_timeout()
dl_ass_state = GPRS_RLCMAC_DL_ASS_NONE;
n3105++;
bts->rlc_ass_timedout();
bts->pda_poll_timedout();
if (n3105 == bts->bts_data()->n3105) {
LOGP(DRLCMAC, LOGL_NOTICE, "- N3105 exceeded\n");
set_state(GPRS_RLCMAC_RELEASING);
tbf_timer_start(this, 3195, bts_data()->t3195, 0);
bts->rlc_ass_failed();
bts->pda_poll_failed();
return;
}
/* reschedule DL assignment */
@ -574,12 +580,15 @@ void gprs_rlcmac_tbf::poll_timeout()
dl_tbf->n3105++;
if (dl_tbf->state_is(GPRS_RLCMAC_RELEASING))
bts->rlc_rel_timedout();
else
else {
bts->rlc_ack_timedout();
bts->pkt_dl_ack_nack_poll_timedout();
}
if (dl_tbf->n3105 == dl_tbf->bts->bts_data()->n3105) {
LOGP(DRLCMAC, LOGL_NOTICE, "- N3105 exceeded\n");
dl_tbf->set_state(GPRS_RLCMAC_RELEASING);
tbf_timer_start(dl_tbf, 3195, dl_tbf->bts_data()->t3195, 0);
bts->pkt_dl_ack_nack_poll_failed();
bts->rlc_ack_failed();
return;
}
@ -991,6 +1000,7 @@ struct msgb *gprs_rlcmac_tbf::create_dl_ass(uint32_t fn, uint8_t ts)
encode_gsm_rlcmac_downlink(ass_vec, mac_control_block);
LOGPC(DCSN1, LOGL_NOTICE, "\n");
LOGP(DRLCMAC, LOGL_DEBUG, "------------------------- TX : Packet Downlink Assignment -------------------------\n");
bts->pkt_dl_assignemnt();
bitvec_pack(ass_vec, msgb_put(msg, 23));
bitvec_free(ass_vec);
talloc_free(mac_control_block);
@ -1087,6 +1097,7 @@ struct msgb *gprs_rlcmac_tbf::create_ul_ass(uint32_t fn, uint8_t ts)
decode_gsm_rlcmac_downlink(ass_vec, mac_control_block);
LOGPC(DCSN1, LOGL_NOTICE, "\n");
LOGP(DRLCMAC, LOGL_DEBUG, "------------------------- TX : Packet Uplink Assignment -------------------------\n");
bts->pkt_ul_assignment();
bitvec_free(ass_vec);
talloc_free(mac_control_block);

View File

@ -379,6 +379,7 @@ struct gprs_rlcmac_dl_tbf : public gprs_rlcmac_tbf {
int abort();
void egprs_calc_window_size();
void update_coding_scheme_counter_dl(const GprsCodingScheme cs);
/* TODO: add the gettimeofday as parameter */
struct msgb *llc_dequeue(bssgp_bvc_ctx *bctx);
@ -467,6 +468,8 @@ struct gprs_rlcmac_ul_tbf : public gprs_rlcmac_tbf {
struct gprs_rlc_data *block,
uint8_t *data, const uint8_t block_idx);
void update_coding_scheme_counter_ul(const GprsCodingScheme cs);
/* Please note that all variables here will be reset when changing
* from WAIT RELEASE back to FLOW state (re-use of TBF).
* All states that need reset must be in this struct, so this is why

View File

@ -648,6 +648,7 @@ struct msgb *gprs_rlcmac_dl_tbf::create_dl_acked_block(
num_bsns += 1;
}
update_coding_scheme_counter_dl(cs);
/*
* if the intial mcs is 8 and retransmission mcs is either 6 or 3
* we have to include the padding of 6 octets in first segment
@ -1330,3 +1331,56 @@ void gprs_rlcmac_dl_tbf::egprs_calc_window_size()
m_window.set_ws(ws);
}
void gprs_rlcmac_dl_tbf::update_coding_scheme_counter_dl(const GprsCodingScheme cs)
{
uint8_t coding_scheme = 0;
coding_scheme = GprsCodingScheme::Scheme(cs);
if (cs.isGprs()) {
switch (coding_scheme) {
case GprsCodingScheme::CS1 :
bts->gprs_dl_cs1();
break;
case GprsCodingScheme::CS2 :
bts->gprs_dl_cs2();
break;
case GprsCodingScheme::CS3 :
bts->gprs_dl_cs3();
break;
case GprsCodingScheme::CS4 :
bts->gprs_dl_cs4();
break;
}
} else {
switch (coding_scheme) {
case GprsCodingScheme::MCS1 :
bts->egprs_dl_mcs1();
break;
case GprsCodingScheme::MCS2 :
bts->egprs_dl_mcs2();
break;
case GprsCodingScheme::MCS3 :
bts->egprs_dl_mcs3();
break;
case GprsCodingScheme::MCS4 :
bts->egprs_dl_mcs4();
break;
case GprsCodingScheme::MCS5 :
bts->egprs_dl_mcs5();
break;
case GprsCodingScheme::MCS6 :
bts->egprs_dl_mcs6();
break;
case GprsCodingScheme::MCS7 :
bts->egprs_dl_mcs7();
break;
case GprsCodingScheme::MCS8 :
bts->egprs_dl_mcs8();
break;
case GprsCodingScheme::MCS9 :
bts->egprs_dl_mcs9();
break;
}
}
}

View File

@ -175,7 +175,7 @@ int gprs_rlcmac_ul_tbf::rcv_data_block_acknowledged(
/* Increment RX-counter */
this->m_rx_counter++;
update_coding_scheme_counter_ul(rlc->cs);
/* Loop over num_blocks */
for (block_idx = 0; block_idx < rlc->num_data_blocks; block_idx++) {
int num_chunks;
@ -517,3 +517,56 @@ egprs_rlc_ul_reseg_bsn_state gprs_rlcmac_ul_tbf::handle_egprs_ul_spb(
}
return assemble_status;
}
void gprs_rlcmac_ul_tbf::update_coding_scheme_counter_ul(const GprsCodingScheme cs)
{
uint8_t coding_scheme = 0;
coding_scheme = GprsCodingScheme::Scheme(cs);
if (cs.isGprs()) {
switch (coding_scheme) {
case GprsCodingScheme::CS1 :
bts->gprs_ul_cs1();
break;
case GprsCodingScheme::CS2 :
bts->gprs_ul_cs2();
break;
case GprsCodingScheme::CS3 :
bts->gprs_ul_cs3();
break;
case GprsCodingScheme::CS4 :
bts->gprs_ul_cs4();
break;
}
} else {
switch (coding_scheme) {
case GprsCodingScheme::MCS1 :
bts->egprs_ul_mcs1();
break;
case GprsCodingScheme::MCS2 :
bts->egprs_ul_mcs2();
break;
case GprsCodingScheme::MCS3 :
bts->egprs_ul_mcs3();
break;
case GprsCodingScheme::MCS4 :
bts->egprs_ul_mcs4();
break;
case GprsCodingScheme::MCS5 :
bts->egprs_ul_mcs5();
break;
case GprsCodingScheme::MCS6 :
bts->egprs_ul_mcs6();
break;
case GprsCodingScheme::MCS7 :
bts->egprs_ul_mcs7();
break;
case GprsCodingScheme::MCS8 :
bts->egprs_ul_mcs8();
break;
case GprsCodingScheme::MCS9 :
bts->egprs_ul_mcs9();
break;
}
}
}