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/.
Max gerrit-no-reply at lists.osmocom.orgHello 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 <gprs_debug.h> extern "C" { + #include "pcu_ctr.h" #include <osmocom/core/talloc.h> #include <osmocom/core/msgb.h> #include <osmocom/core/stats.h> @@ -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(&ul_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 @@ uint8_t ts_no, uint8_t channel, uint32_t fn, const uint8_t *data, unsigned int len); - /* - * Statistics - */ - void tbf_dl_created(); - void tbf_dl_freed(); - void tbf_dl_aborted(); - void tbf_ul_created(); - void tbf_ul_freed(); - void tbf_ul_aborted(); - void tbf_reused(); - void tbf_alloc_algo_a(); - void tbf_alloc_algo_b(); - void tbf_failed_egprs_only(); - void rlc_sent(); - void rlc_resent(); - void rlc_restarted(); - void rlc_stalled(); - void rlc_nacked(); - void rlc_final_block_resent(); - void rlc_ass_timedout(); - void rlc_ass_failed(); - void rlc_ack_timedout(); - void rlc_ack_failed(); - void rlc_rel_timedout(); - 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(); - void sba_timedout(); - 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 rach_frame_11bit(); - void spb_uplink_first_segment(); - void spb_uplink_second_segment(); - void spb_downlink_first_segment(); - void spb_downlink_second_segment(); - void immediate_assignment_ul_tbf(); - void immediate_assignment_reject(); - void immediate_assignment_dl_tbf(); - void channel_request_description(); - void pkt_ul_assignment(); - void pkt_access_reject(); - 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(); @@ -575,106 +486,6 @@ { return m_statg; } - -#define CREATE_COUNT_ADD_INLINE(func_name, ctr_name) \ - inline void BTS::func_name(int inc) {\ - OSMO_ASSERT(m_bts.ctrs); \ - rate_ctr_add(&m_bts.ctrs->ctr[ctr_name], inc); \ - } - -#define CREATE_COUNT_INLINE(func_name, ctr_name) \ - inline void BTS::func_name() {\ - OSMO_ASSERT(m_bts.ctrs); \ - rate_ctr_inc(&m_bts.ctrs->ctr[ctr_name]); \ - } - -CREATE_COUNT_INLINE(tbf_dl_created, CTR_TBF_DL_ALLOCATED) -CREATE_COUNT_INLINE(tbf_dl_freed, CTR_TBF_DL_FREED) -CREATE_COUNT_INLINE(tbf_dl_aborted, CTR_TBF_DL_ABORTED) -CREATE_COUNT_INLINE(tbf_ul_created, CTR_TBF_UL_ALLOCATED) -CREATE_COUNT_INLINE(tbf_ul_freed, CTR_TBF_UL_FREED) -CREATE_COUNT_INLINE(tbf_ul_aborted, CTR_TBF_UL_ABORTED) -CREATE_COUNT_INLINE(tbf_reused, CTR_TBF_REUSED) -CREATE_COUNT_INLINE(tbf_alloc_algo_a, CTR_TBF_ALLOC_ALGO_A) -CREATE_COUNT_INLINE(tbf_alloc_algo_b, CTR_TBF_ALLOC_ALGO_B) -CREATE_COUNT_INLINE(tbf_failed_egprs_only, CTR_TBF_FAILED_EGPRS_ONLY) -CREATE_COUNT_INLINE(rlc_sent, CTR_RLC_SENT) -CREATE_COUNT_INLINE(rlc_resent, CTR_RLC_RESENT) -CREATE_COUNT_INLINE(rlc_restarted, CTR_RLC_RESTARTED) -CREATE_COUNT_INLINE(rlc_stalled, CTR_RLC_STALLED) -CREATE_COUNT_INLINE(rlc_nacked, CTR_RLC_NACKED) -CREATE_COUNT_INLINE(rlc_final_block_resent, CTR_RLC_FINAL_BLOCK_RESENT); -CREATE_COUNT_INLINE(rlc_ass_timedout, CTR_RLC_ASS_TIMEDOUT); -CREATE_COUNT_INLINE(rlc_ass_failed, CTR_RLC_ASS_FAILED); -CREATE_COUNT_INLINE(rlc_ack_timedout, CTR_RLC_ACK_TIMEDOUT); -CREATE_COUNT_INLINE(rlc_ack_failed, CTR_RLC_ACK_FAILED); -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) -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); -CREATE_COUNT_INLINE(rach_frame_11bit, CTR_11BIT_RACH_REQUESTS); -CREATE_COUNT_INLINE(spb_uplink_first_segment, CTR_SPB_UL_FIRST_SEGMENT); -CREATE_COUNT_INLINE(spb_uplink_second_segment, CTR_SPB_UL_SECOND_SEGMENT); -CREATE_COUNT_INLINE(spb_downlink_first_segment, CTR_SPB_DL_FIRST_SEGMENT); -CREATE_COUNT_INLINE(spb_downlink_second_segment, CTR_SPB_DL_SECOND_SEGMENT); -CREATE_COUNT_INLINE(immediate_assignment_ul_tbf, CTR_IMMEDIATE_ASSIGN_UL_TBF); -CREATE_COUNT_INLINE(immediate_assignment_reject, CTR_IMMEDIATE_ASSIGN_REJ); -CREATE_COUNT_INLINE(immediate_assignment_dl_tbf, CTR_IMMEDIATE_ASSIGN_DL_TBF); -CREATE_COUNT_INLINE(channel_request_description, CTR_CHANNEL_REQUEST_DESCRIPTION); -CREATE_COUNT_INLINE(pkt_ul_assignment, CTR_PKT_UL_ASSIGNMENT); -CREATE_COUNT_INLINE(pkt_access_reject, CTR_PKT_ACCESS_REJ); -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 #define CREATE_STAT_INLINE(func_name, func_name_get, stat_name) \ inline void BTS::func_name(int32_t val) {\ diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp index 2350808..838d6b2 100644 --- a/src/gprs_rlcmac_sched.cpp +++ b/src/gprs_rlcmac_sched.cpp @@ -25,6 +25,10 @@ #include "pcu_utils.h" +extern "C" { +#include "pcu_ctr.h" +} + static uint32_t sched_poll(BTS *bts, uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr, struct gprs_rlcmac_tbf **poll_tbf, @@ -316,18 +320,18 @@ switch(cat) { case PCU_GSMTAP_C_DL_CTRL: - bts->bts->rlc_sent_control(); + rlc_sent_control(bts->bts->bts_data()->ctrs); bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_CTRL, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data, msg->len); break; case PCU_GSMTAP_C_DL_DATA_GPRS: - bts->bts->rlc_sent(); + rlc_sent(bts->bts->bts_data()->ctrs); /* FIXME: distinguish between GPRS and EGPRS */ bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DATA_GPRS, false, trx, ts, GSMTAP_CHANNEL_PDTCH, fn, msg->data, msg->len); break; case PCU_GSMTAP_C_DL_DUMMY: - bts->bts->rlc_sent_dummy(); + rlc_sent_dummy(bts->bts->bts_data()->ctrs); bts->bts->send_gsmtap(PCU_GSMTAP_C_DL_DUMMY, false, trx, ts, GSMTAP_CHANNEL_PACCH, fn, msg->data, msg->len); break; @@ -403,7 +407,7 @@ if (!msg) return -ENOMEM; /* msg is now available */ - bts->bts->rlc_dl_bytes(msg->data_len); + rlc_dl_bytes(bts->bts->bts_data()->ctrs, msg->data_len); /* set USF */ OSMO_ASSERT(msgb_length(msg) > 0); diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp index 2b08cf6..e657f3a 100644 --- a/src/gprs_rlcmac_ts_alloc.cpp +++ b/src/gprs_rlcmac_ts_alloc.cpp @@ -29,6 +29,10 @@ #include <errno.h> #include <values.h> +extern "C" { +#include "pcu_ctr.h" +} + /* Consider a PDCH as idle if has at most this number of TBFs assigned to it */ #define PDCH_IDLE_TBF_THRESH 1 @@ -485,7 +489,7 @@ ms_->set_reserved_slots(trx, 1 << ts, 1 << ts); tbf_->upgrade_to_multislot = 0; - bts->bts->tbf_alloc_algo_a(); + tbf_alloc_algo_a(bts->bts->bts_data()->ctrs); return 0; } @@ -1021,7 +1025,7 @@ } } - bts->bts->tbf_alloc_algo_b(); + tbf_alloc_algo_b(bts->bts->bts_data()->ctrs); return 0; } diff --git a/src/llc.cpp b/src/llc.cpp index 79afc37..182fdfc 100644 --- a/src/llc.cpp +++ b/src/llc.cpp @@ -25,6 +25,7 @@ #include <stdio.h> extern "C" { +#include "pcu_ctr.h" #include <osmocom/core/msgb.h> } @@ -126,7 +127,7 @@ while ((msg = msgb_dequeue(&m_queue))) { if (bts) - bts->llc_dropped_frame(); + llc_dropped_frame(bts->bts_data()->ctrs); msgb_free(msg); } diff --git a/src/pcu_ctr.h b/src/pcu_ctr.h index d90785c..0baa543 100644 --- a/src/pcu_ctr.h +++ b/src/pcu_ctr.h @@ -22,9 +22,100 @@ #pragma once +#include <osmocom/core/utils.h> +#include <osmocom/core/rate_ctr.h> + #include <stdint.h> #include <stddef.h> #include <stdbool.h> + +enum { + CTR_TBF_DL_ALLOCATED, + CTR_TBF_DL_FREED, + CTR_TBF_DL_ABORTED, + CTR_TBF_UL_ALLOCATED, + CTR_TBF_UL_FREED, + CTR_TBF_UL_ABORTED, + CTR_TBF_REUSED, + CTR_TBF_ALLOC_ALGO_A, + CTR_TBF_ALLOC_ALGO_B, + CTR_TBF_FAILED_EGPRS_ONLY, + CTR_RLC_SENT, + CTR_RLC_RESENT, + CTR_RLC_RESTARTED, + CTR_RLC_STALLED, + CTR_RLC_NACKED, + CTR_RLC_FINAL_BLOCK_RESENT, + CTR_RLC_ASS_TIMEDOUT, + CTR_RLC_ASS_FAILED, + CTR_RLC_ACK_TIMEDOUT, + CTR_RLC_ACK_FAILED, + CTR_RLC_REL_TIMEDOUT, + 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, + CTR_SBA_TIMEDOUT, + CTR_LLC_FRAME_TIMEDOUT, + CTR_LLC_FRAME_DROPPED, + CTR_LLC_FRAME_SCHED, + CTR_LLC_DL_BYTES, + CTR_LLC_UL_BYTES, + CTR_RACH_REQUESTS, + CTR_11BIT_RACH_REQUESTS, + CTR_SPB_UL_FIRST_SEGMENT, + CTR_SPB_UL_SECOND_SEGMENT, + CTR_SPB_DL_FIRST_SEGMENT, + CTR_SPB_DL_SECOND_SEGMENT, + CTR_IMMEDIATE_ASSIGN_UL_TBF, + CTR_IMMEDIATE_ASSIGN_REJ, + CTR_IMMEDIATE_ASSIGN_DL_TBF, + CTR_CHANNEL_REQUEST_DESCRIPTION, + CTR_PKT_UL_ASSIGNMENT, + CTR_PKT_ACCESS_REJ, + 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, +}; static const struct rate_ctr_desc bts_ctr_description[] = { { "tbf.dl.alloc", "TBF DL Allocated "}, @@ -115,3 +206,101 @@ }; struct rate_ctr_group *pcu_ctr_init(); + +#define CREATE_COUNT_ADD_INLINE(func_name, ctr_name) \ + inline void func_name(struct rate_ctr_group *ctrs, int inc) { \ + OSMO_ASSERT(ctrs); \ + rate_ctr_add(&ctrs->ctr[ctr_name], inc); \ + } + +#define CREATE_COUNT_INLINE(func_name, ctr_name) \ + static inline void func_name(struct rate_ctr_group *ctrs) {\ + OSMO_ASSERT(ctrs); \ + rate_ctr_inc(&ctrs->ctr[ctr_name]); \ + } + +CREATE_COUNT_INLINE(tbf_dl_created, CTR_TBF_DL_ALLOCATED) +CREATE_COUNT_INLINE(tbf_dl_freed, CTR_TBF_DL_FREED) +CREATE_COUNT_INLINE(tbf_dl_aborted, CTR_TBF_DL_ABORTED) +CREATE_COUNT_INLINE(tbf_ul_created, CTR_TBF_UL_ALLOCATED) +CREATE_COUNT_INLINE(tbf_ul_freed, CTR_TBF_UL_FREED) +CREATE_COUNT_INLINE(tbf_ul_aborted, CTR_TBF_UL_ABORTED) +CREATE_COUNT_INLINE(tbf_reused, CTR_TBF_REUSED) +CREATE_COUNT_INLINE(tbf_alloc_algo_a, CTR_TBF_ALLOC_ALGO_A) +CREATE_COUNT_INLINE(tbf_alloc_algo_b, CTR_TBF_ALLOC_ALGO_B) +CREATE_COUNT_INLINE(tbf_failed_egprs_only, CTR_TBF_FAILED_EGPRS_ONLY) +CREATE_COUNT_INLINE(rlc_sent, CTR_RLC_SENT) +CREATE_COUNT_INLINE(rlc_resent, CTR_RLC_RESENT) +CREATE_COUNT_INLINE(rlc_restarted, CTR_RLC_RESTARTED) +CREATE_COUNT_INLINE(rlc_stalled, CTR_RLC_STALLED) +CREATE_COUNT_INLINE(rlc_nacked, CTR_RLC_NACKED) +CREATE_COUNT_INLINE(rlc_final_block_resent, CTR_RLC_FINAL_BLOCK_RESENT); +CREATE_COUNT_INLINE(rlc_ass_timedout, CTR_RLC_ASS_TIMEDOUT); +CREATE_COUNT_INLINE(rlc_ass_failed, CTR_RLC_ASS_FAILED); +CREATE_COUNT_INLINE(rlc_ack_timedout, CTR_RLC_ACK_TIMEDOUT); +CREATE_COUNT_INLINE(rlc_ack_failed, CTR_RLC_ACK_FAILED); +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) +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); +CREATE_COUNT_INLINE(rach_frame_11bit, CTR_11BIT_RACH_REQUESTS); +CREATE_COUNT_INLINE(spb_uplink_first_segment, CTR_SPB_UL_FIRST_SEGMENT); +CREATE_COUNT_INLINE(spb_uplink_second_segment, CTR_SPB_UL_SECOND_SEGMENT); +CREATE_COUNT_INLINE(spb_downlink_first_segment, CTR_SPB_DL_FIRST_SEGMENT); +CREATE_COUNT_INLINE(spb_downlink_second_segment, CTR_SPB_DL_SECOND_SEGMENT); +CREATE_COUNT_INLINE(immediate_assignment_ul_tbf, CTR_IMMEDIATE_ASSIGN_UL_TBF); +CREATE_COUNT_INLINE(immediate_assignment_reject, CTR_IMMEDIATE_ASSIGN_REJ); +CREATE_COUNT_INLINE(immediate_assignment_dl_tbf, CTR_IMMEDIATE_ASSIGN_DL_TBF); +CREATE_COUNT_INLINE(channel_request_description, CTR_CHANNEL_REQUEST_DESCRIPTION); +CREATE_COUNT_INLINE(pkt_ul_assignment, CTR_PKT_UL_ASSIGNMENT); +CREATE_COUNT_INLINE(pkt_access_reject, CTR_PKT_ACCESS_REJ); +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); diff --git a/src/rlc.cpp b/src/rlc.cpp index acd4169..560bbbf 100644 --- a/src/rlc.cpp +++ b/src/rlc.cpp @@ -23,6 +23,7 @@ #include <errno.h> extern "C" { +#include "pcu_ctr.h" #include <osmocom/core/utils.h> } @@ -154,7 +155,7 @@ } else { LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn); m_v_b.mark_nacked(bsn); - bts->rlc_nacked(); + rlc_nacked(bts->bts_data()->ctrs); *lost += 1; } } @@ -178,7 +179,7 @@ } else { LOGP(DRLCMACDL, LOGL_DEBUG, "- got NACK for BSN=%d\n", bsn); m_v_b.mark_nacked(bsn); - bts->rlc_nacked(); + rlc_nacked(bts->bts_data()->ctrs); *lost += 1; } } diff --git a/src/sba.cpp b/src/sba.cpp index 56a7543..450cdc6 100644 --- a/src/sba.cpp +++ b/src/sba.cpp @@ -26,6 +26,7 @@ #include <pcu_utils.h> extern "C" { +#include "pcu_ctr.h" #include <osmocom/core/talloc.h> #include <osmocom/gsm/protocol/gsm_04_08.h> } @@ -84,7 +85,7 @@ sba->ta = ta; llist_add(&sba->list, &m_sbas); - m_bts.sba_allocated(); + sba_allocated(m_bts.bts_data()->ctrs); *_trx = trx; *_ts = ts; @@ -130,14 +131,14 @@ LOGP(DRLCMAC, LOGL_NOTICE, "Poll timeout for SBA (TRX=%u, TS=%u, FN=%u, TA=%u)\n", sba->trx_no, sba->ts_no, sba->fn, sba->ta); - m_bts.sba_timedout(); + sba_timedout(m_bts.bts_data()->ctrs); free_sba(sba); return 0; } void SBAController::free_sba(gprs_rlcmac_sba *sba) { - m_bts.sba_freed(); + sba_freed(m_bts.bts_data()->ctrs); llist_del(&sba->list); talloc_free(sba); } diff --git a/src/tbf.cpp b/src/tbf.cpp index 8e54157..1dd190f 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -31,6 +31,7 @@ #include <pcu_utils.h> extern "C" { +#include "pcu_ctr.h" #include <osmocom/core/msgb.h> #include <osmocom/core/talloc.h> #include <osmocom/core/stats.h> @@ -421,9 +422,9 @@ /* update counters */ if (tbf->direction == GPRS_RLCMAC_UL_TBF) { gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(tbf); - tbf->bts->tbf_ul_freed(); + tbf_ul_freed(tbf->bts->bts_data()->ctrs); if (tbf->state_is(GPRS_RLCMAC_FLOW)) - tbf->bts->tbf_ul_aborted(); + tbf_ul_aborted(tbf->bts->bts_data()->ctrs); rate_ctr_group_free(ul_tbf->m_ul_egprs_ctrs); rate_ctr_group_free(ul_tbf->m_ul_gprs_ctrs); } else { @@ -433,9 +434,9 @@ } else { rate_ctr_group_free(dl_tbf->m_dl_gprs_ctrs); } - tbf->bts->tbf_dl_freed(); + tbf_dl_freed(tbf->bts->bts_data()->ctrs); if (tbf->state_is(GPRS_RLCMAC_FLOW)) - tbf->bts->tbf_dl_aborted(); + tbf_dl_aborted(tbf->bts->bts_data()->ctrs); } /* Give final measurement report */ @@ -653,14 +654,14 @@ LOGP(DRLCMAC, LOGL_NOTICE, "- Timeout for polling PACKET CONTROL ACK for PACKET UPLINK ACK\n"); rlcmac_diag(); } - bts->rlc_ack_timedout(); - bts->pkt_ul_ack_nack_poll_timedout(); + rlc_ack_timedout(bts->bts_data()->ctrs); + pkt_ul_ack_nack_poll_timedout(bts->bts_data()->ctrs); if (state_is(GPRS_RLCMAC_FINISHED)) { 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(); + pkt_ul_ack_nack_poll_failed(bts->bts_data()->ctrs); ul_tbf->set_state(GPRS_RLCMAC_RELEASING); tbf_timer_start(ul_tbf, 3169, ul_tbf->bts->bts_data()->t3169, 0); return; @@ -679,14 +680,14 @@ } ul_ass_state = GPRS_RLCMAC_UL_ASS_NONE; n3105++; - bts->rlc_ass_timedout(); - bts->pua_poll_timedout(); + rlc_ass_timedout(bts->bts_data()->ctrs); + pua_poll_timedout(bts->bts_data()->ctrs); 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(); + rlc_ass_failed(bts->bts_data()->ctrs); + pua_poll_failed(bts->bts_data()->ctrs); return; } /* reschedule UL assignment */ @@ -701,14 +702,14 @@ } dl_ass_state = GPRS_RLCMAC_DL_ASS_NONE; n3105++; - bts->rlc_ass_timedout(); - bts->pda_poll_timedout(); + rlc_ass_timedout(bts->bts_data()->ctrs); + pda_poll_timedout(bts->bts_data()->ctrs); 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(); + rlc_ass_failed(bts->bts_data()->ctrs); + pda_poll_failed(bts->bts_data()->ctrs); return; } /* reschedule DL assignment */ @@ -724,17 +725,17 @@ } dl_tbf->n3105++; if (dl_tbf->state_is(GPRS_RLCMAC_RELEASING)) - bts->rlc_rel_timedout(); + rlc_rel_timedout(bts->bts_data()->ctrs); else { - bts->rlc_ack_timedout(); - bts->pkt_dl_ack_nack_poll_timedout(); + rlc_ack_timedout(bts->bts_data()->ctrs); + pkt_dl_ack_nack_poll_timedout(bts->bts_data()->ctrs); } 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(); + pkt_dl_ack_nack_poll_failed(bts->bts_data()->ctrs); + rlc_ack_failed(bts->bts_data()->ctrs); return; } /* resend IMM.ASS on CCCH on timeout */ @@ -840,7 +841,7 @@ if (egprs_ms_class == 0 && bts->egprs_enabled) { LOGP(DRLCMAC, LOGL_NOTICE, "Not accepting non-EGPRS phone in EGPRS-only mode\n"); - bts->bts->tbf_failed_egprs_only(); + tbf_failed_egprs_only(bts->bts->bts_data()->ctrs); return NULL; } @@ -887,7 +888,7 @@ } llist_add(&tbf->list(), &bts->bts->ul_tbfs()); - tbf->bts->tbf_ul_created(); + tbf_ul_created(tbf->bts->bts_data()->ctrs); return tbf; } @@ -932,7 +933,7 @@ if (ms_class > 0) { LOGP(DRLCMAC, LOGL_NOTICE, "Not accepting non-EGPRS phone in EGPRS-only mode\n"); - bts->bts->tbf_failed_egprs_only(); + tbf_failed_egprs_only(bts->bts->bts_data()->ctrs); return NULL; } egprs_ms_class = 1; @@ -986,7 +987,7 @@ } llist_add(&tbf->list(), &bts->bts->dl_tbfs()); - tbf->bts->tbf_dl_created(); + tbf_dl_created(tbf->bts->bts_data()->ctrs); tbf->m_last_dl_poll_fn = -1; tbf->m_last_dl_drained_fn = -1; @@ -1180,7 +1181,7 @@ 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(); + pkt_dl_assignemnt(bts->bts_data()->ctrs); bitvec_pack(ass_vec, msgb_put(msg, 23)); bitvec_free(ass_vec); talloc_free(mac_control_block); @@ -1213,7 +1214,7 @@ Encoding::write_packet_access_reject( packet_access_rej, tlli()); - bts->pkt_access_reject(); + pkt_access_reject(bts->bts_data()->ctrs); bitvec_pack(packet_access_rej, msgb_put(msg, 23)); @@ -1279,7 +1280,7 @@ 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(); + pkt_ul_assignment(bts->bts_data()->ctrs); bitvec_free(ass_vec); talloc_free(mac_control_block); @@ -1312,7 +1313,7 @@ { struct gprs_rlcmac_dl_tbf *new_tbf = NULL; - bts->tbf_reused(); + tbf_reused(bts->bts_data()->ctrs); new_tbf = tbf_alloc_dl_tbf(bts->bts_data(), ms(), this->trx->trx_no, ms_class(), @@ -1468,7 +1469,7 @@ ms->set_tlli(tlli); llist_add(&ul_tbf->list(), &bts->bts->ul_tbfs()); - ul_tbf->bts->tbf_ul_created(); + tbf_ul_created(ul_tbf->bts->bts_data()->ctrs); ul_tbf->set_state(GPRS_RLCMAC_ASSIGN); ul_tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH); diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index 3d27883..deeb89e 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -32,6 +32,7 @@ #include "pcu_utils.h" extern "C" { +#include "pcu_ctr.h" #include <osmocom/core/msgb.h> #include <osmocom/core/talloc.h> #include <osmocom/gprs/gprs_bssgp_bss.h> @@ -295,12 +296,12 @@ break; } - bts->llc_timedout_frame(); + llc_timedout_frame(bts->bts_data()->ctrs); drop_frame: frames++; octets += msg->len; msgb_free(msg); - bts->llc_dropped_frame(); + llc_dropped_frame(bts->bts_data()->ctrs); continue; } @@ -407,19 +408,19 @@ LOGP(DRLCMACDL, LOGL_DEBUG, "- Resending BSN %d\n", bsn); /* re-send block with negative aknowlegement */ m_window.m_v_b.mark_unacked(bsn); - bts->rlc_resent(); + rlc_resent(bts->bts_data()->ctrs); } else if (state_is(GPRS_RLCMAC_FINISHED)) { LOGP(DRLCMACDL, LOGL_DEBUG, "- Restarting at BSN %d, " "because all blocks have been transmitted.\n", m_window.v_a()); - bts->rlc_restarted(); + rlc_restarted(bts->bts_data()->ctrs); if (restart_bsn_cycle()) return take_next_bsn(fn, previous_bsn, may_combine); } else if (dl_window_stalled()) { LOGP(DRLCMACDL, LOGL_NOTICE, "- Restarting at BSN %d, " "because the window is stalled.\n", m_window.v_a()); - bts->rlc_stalled(); + rlc_stalled(bts->bts_data()->ctrs); if (restart_bsn_cycle()) return take_next_bsn(fn, previous_bsn, may_combine); } else if (have_data()) { @@ -435,7 +436,7 @@ LOGP(DRLCMACDL, LOGL_DEBUG, "- Restarting at BSN %d, " "because all blocks have been transmitted (FLOW).\n", m_window.v_a()); - bts->rlc_restarted(); + rlc_restarted(bts->bts_data()->ctrs); if (restart_bsn_cycle()) return take_next_bsn(fn, previous_bsn, may_combine); } else { @@ -452,8 +453,8 @@ LOGP(DRLCMACDL, LOGL_DEBUG, "- Nothing else to send, Re-transmit final block!\n"); bsn = m_window.v_s_mod(-1); - bts->rlc_final_block_resent(); - bts->rlc_resent(); + rlc_final_block_resent(bts->bts_data()->ctrs); + rlc_resent(bts->bts_data()->ctrs); } *may_combine = m_rlc.block(bsn)->cs_current_trans.numDataBlocks() > 1; @@ -535,7 +536,7 @@ tbf_name(this), msg->len); m_llc.put_frame(msg->data, msg->len); - bts->llc_frame_sched(); + llc_frame_sched(bts->bts_data()->ctrs); msgb_free(msg); m_last_dl_drained_fn = -1; } @@ -611,7 +612,7 @@ &m_llc, &write_offset, &num_chunks, data, is_final, &payload_written); if (payload_written > 0) - bts->rlc_dl_payload_bytes(payload_written); + rlc_dl_payload_bytes(bts->bts_data()->ctrs, payload_written); if (ar == Encoding::AR_NEED_MORE_BLOCKS) break; @@ -619,7 +620,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()); + llc_dl_bytes(bts->bts_data()->ctrs, m_llc.frame_length()); m_llc.reset(); if (is_final) { @@ -1359,19 +1360,19 @@ if (block_status_dl == EGPRS_RESEG_FIRST_SEG_SENT) { /* statistics */ - bts->spb_downlink_second_segment(); + spb_downlink_second_segment(bts->bts_data()->ctrs); return EGPRS_RLCMAC_DL_SEC_SEG; } else if ((cs_init.headerTypeData() == GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_1) || (cs_init.headerTypeData() == GprsCodingScheme::HEADER_EGPRS_DATA_TYPE_2)) { - bts->spb_downlink_first_segment(); + spb_downlink_first_segment(bts->bts_data()->ctrs); return EGPRS_RLCMAC_DL_FIRST_SEG; } else if ((GprsCodingScheme::Scheme(cs_init) == GprsCodingScheme::MCS4) && (GprsCodingScheme::Scheme(cs_current_trans) == GprsCodingScheme::MCS1)) { - bts->spb_downlink_first_segment(); + spb_downlink_first_segment(bts->bts_data()->ctrs); return EGPRS_RLCMAC_DL_FIRST_SEG; } } @@ -1407,58 +1408,58 @@ if (cs.isGprs()) { switch (coding_scheme) { case GprsCodingScheme::CS1 : - bts->gprs_dl_cs1(); + gprs_dl_cs1(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS1]); break; case GprsCodingScheme::CS2 : - bts->gprs_dl_cs2(); + gprs_dl_cs2(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS2]); break; case GprsCodingScheme::CS3 : - bts->gprs_dl_cs3(); + gprs_dl_cs3(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS3]); break; case GprsCodingScheme::CS4 : - bts->gprs_dl_cs4(); + gprs_dl_cs4(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_gprs_ctrs->ctr[TBF_CTR_GPRS_DL_CS4]); break; } } else { switch (coding_scheme) { case GprsCodingScheme::MCS1 : - bts->egprs_dl_mcs1(); + egprs_dl_mcs1(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS1]); break; case GprsCodingScheme::MCS2 : - bts->egprs_dl_mcs2(); + egprs_dl_mcs2(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS2]); break; case GprsCodingScheme::MCS3 : - bts->egprs_dl_mcs3(); + egprs_dl_mcs3(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS3]); break; case GprsCodingScheme::MCS4 : - bts->egprs_dl_mcs4(); + egprs_dl_mcs4(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS4]); break; case GprsCodingScheme::MCS5 : - bts->egprs_dl_mcs5(); + egprs_dl_mcs5(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS5]); break; case GprsCodingScheme::MCS6 : - bts->egprs_dl_mcs6(); + egprs_dl_mcs6(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS6]); break; case GprsCodingScheme::MCS7 : - bts->egprs_dl_mcs7(); + egprs_dl_mcs7(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS7]); break; case GprsCodingScheme::MCS8 : - bts->egprs_dl_mcs8(); + egprs_dl_mcs8(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS8]); break; case GprsCodingScheme::MCS9 : - bts->egprs_dl_mcs9(); + egprs_dl_mcs9(bts->bts_data()->ctrs); rate_ctr_inc(&m_dl_egprs_ctrs->ctr[TBF_CTR_EGPRS_DL_MCS9]); break; } diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp index 81d3b24..1f8f0f6 100644 --- a/src/tbf_ul.cpp +++ b/src/tbf_ul.cpp @@ -32,6 +32,7 @@ #include "pcu_utils.h" extern "C" { +#include "pcu_ctr.h" #include <osmocom/core/msgb.h> #include <osmocom/core/talloc.h> } @@ -70,7 +71,7 @@ frame = frames + i; if (frame->length) { - bts->rlc_ul_payload_bytes(frame->length); + rlc_ul_payload_bytes(bts->bts_data()->ctrs, frame->length); LOGP(DRLCMACUL, LOGL_DEBUG, "-- Frame %d " "starts at offset %d, " @@ -87,7 +88,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()); + llc_ul_bytes(bts->bts_data()->ctrs, m_llc.frame_length()); m_llc.reset(); } } @@ -277,7 +278,7 @@ rdbi, rlc->cs, rlc_data, NULL, 0, &new_tlli); if (num_chunks < 0) { - bts->decode_error(); + decode_error(bts->bts_data()->ctrs); LOGP(DRLCMACUL, LOGL_NOTICE, "Failed to decode TLLI of %s UL DATA " "TFI=%d.\n", rlc->cs.name(), rlc->tfi); @@ -419,7 +420,7 @@ union split_block_status *spb_status = &block->spb_status; uint8_t *rlc_data = &block->block[0]; - bts->spb_uplink_second_segment(); + spb_uplink_second_segment(bts->bts_data()->ctrs); if (spb_status->block_status_ul & EGPRS_RESEG_FIRST_SEG_RXD) { @@ -457,7 +458,7 @@ uint8_t *rlc_data = &block->block[0]; union split_block_status *spb_status = &block->spb_status; - bts->spb_uplink_first_segment(); + spb_uplink_first_segment(bts->bts_data()->ctrs); if (spb_status->block_status_ul & EGPRS_RESEG_SECOND_SEG_RXD) { LOGP(DRLCMACUL, LOGL_DEBUG, @@ -552,58 +553,58 @@ if (cs.isGprs()) { switch (coding_scheme) { case GprsCodingScheme::CS1 : - bts->gprs_ul_cs1(); + gprs_ul_cs1(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS1]); break; case GprsCodingScheme::CS2 : - bts->gprs_ul_cs2(); + gprs_ul_cs2(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS2]); break; case GprsCodingScheme::CS3 : - bts->gprs_ul_cs3(); + gprs_ul_cs3(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS3]); break; case GprsCodingScheme::CS4 : - bts->gprs_ul_cs4(); + gprs_ul_cs4(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_gprs_ctrs->ctr[TBF_CTR_GPRS_UL_CS4]); break; } } else { switch (coding_scheme) { case GprsCodingScheme::MCS1 : - bts->egprs_ul_mcs1(); + egprs_ul_mcs1(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS1]); break; case GprsCodingScheme::MCS2 : - bts->egprs_ul_mcs2(); + egprs_ul_mcs2(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS2]); break; case GprsCodingScheme::MCS3 : - bts->egprs_ul_mcs3(); + egprs_ul_mcs3(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS3]); break; case GprsCodingScheme::MCS4 : - bts->egprs_ul_mcs4(); + egprs_ul_mcs4(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS4]); break; case GprsCodingScheme::MCS5 : - bts->egprs_ul_mcs5(); + egprs_ul_mcs5(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS5]); break; case GprsCodingScheme::MCS6 : - bts->egprs_ul_mcs6(); + egprs_ul_mcs6(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS6]); break; case GprsCodingScheme::MCS7 : - bts->egprs_ul_mcs7(); + egprs_ul_mcs7(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS7]); break; case GprsCodingScheme::MCS8 : - bts->egprs_ul_mcs8(); + egprs_ul_mcs8(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS8]); break; case GprsCodingScheme::MCS9 : - bts->egprs_ul_mcs9(); + egprs_ul_mcs9(bts->bts_data()->ctrs); rate_ctr_inc(&m_ul_egprs_ctrs->ctr[TBF_CTR_EGPRS_UL_MCS9]); break; } -- To view, visit https://gerrit.osmocom.org/4413 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I795631752af3b9077a846c3123217e1deda52e86 Gerrit-PatchSet: 3 Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Owner: Max <msuraev at sysmocom.de> Gerrit-Reviewer: Jenkins Builder