diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bts.cpp | 7 | ||||
-rw-r--r-- | src/bts.h | 40 | ||||
-rw-r--r-- | src/sba.cpp | 4 |
3 files changed, 30 insertions, 21 deletions
diff --git a/src/bts.cpp b/src/bts.cpp index 39c1fd5..9c0fea2 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -54,6 +54,9 @@ static const struct rate_ctr_desc bts_ctr_description[] = { { "tbf.ul.alloc", "TBF UL Allocated "}, { "tbf.ul.freed", "TBF UL Freed "}, { "decode.errors", "Decode Errors "}, + { "sba.allocated", "SBA Allocated "}, + { "sba.freed", "SBA Freed "}, + { "sba.timedout", "SBA Timeout "}, }; static const struct rate_ctr_group_desc bts_ctrg_desc = { @@ -1049,6 +1052,8 @@ int gprs_rlcmac_pdch::rcv_control_block( } else { ta = sba->ta; bts()->timing_advance()->remember(tlli, ta); +#warning "SBA deleted inline.. enforce capsulation" + bts()->sba_freed(); llist_del(&sba->list); talloc_free(sba); } @@ -1096,7 +1101,9 @@ int gprs_rlcmac_pdch::rcv_control_block( "block, but there is no resource request " "scheduled!\n"); } else { + #warning "SBA deleted inline.. enforce capsulation" bts()->timing_advance()->remember(ul_control_block->u.Packet_Measurement_Report.TLLI, sba->ta); + bts()->sba_freed(); llist_del(&sba->list); talloc_free(sba); } @@ -154,6 +154,9 @@ public: CTR_TBF_UL_ALLOCATED, CTR_TBF_UL_FREED, CTR_DECODE_ERRORS, + CTR_SBA_ALLOCATED, + CTR_SBA_FREED, + CTR_SBA_TIMEDOUT, }; BTS(); @@ -192,6 +195,9 @@ public: void tbf_ul_created(); void tbf_ul_freed(); void decode_error(); + void sba_allocated(); + void sba_freed(); + void sba_timedout(); /* * Below for C interface for the VTY @@ -237,30 +243,22 @@ inline struct rate_ctr_group *BTS::rate_counters() const return m_ratectrs; } -inline void BTS::tbf_dl_created() -{ - rate_ctr_inc(&m_ratectrs->ctr[CTR_TBF_DL_ALLOCATED]); -} +#define CREATE_COUNT_INLINE(func_name, ctr_name) \ + inline void BTS::func_name() {\ + rate_ctr_inc(&m_ratectrs->ctr[ctr_name]); \ + } -inline void BTS::tbf_dl_freed() -{ - rate_ctr_inc(&m_ratectrs->ctr[CTR_TBF_DL_FREED]); -} +CREATE_COUNT_INLINE(tbf_dl_created, CTR_TBF_DL_ALLOCATED) +CREATE_COUNT_INLINE(tbf_dl_freed, CTR_TBF_DL_FREED) +CREATE_COUNT_INLINE(tbf_ul_created, CTR_TBF_UL_ALLOCATED) +CREATE_COUNT_INLINE(tbf_ul_freed, CTR_TBF_UL_FREED) +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) -inline void BTS::tbf_ul_created() -{ - rate_ctr_inc(&m_ratectrs->ctr[CTR_TBF_UL_ALLOCATED]); -} +#undef CREATE_COUNT_INLINE -inline void BTS::tbf_ul_freed() -{ - rate_ctr_inc(&m_ratectrs->ctr[CTR_TBF_UL_FREED]); -} - -inline void BTS::decode_error() -{ - rate_ctr_inc(&m_ratectrs->ctr[CTR_DECODE_ERRORS]); -} inline gprs_rlcmac_bts *gprs_rlcmac_pdch::bts_data() const { diff --git a/src/sba.cpp b/src/sba.cpp index d87a9a3..ddcbe52 100644 --- a/src/sba.cpp +++ b/src/sba.cpp @@ -79,6 +79,7 @@ int SBAController::alloc( sba->ta = ta; llist_add(&sba->list, &m_sbas); + m_bts.sba_allocated(); *_trx = trx; *_ts = ts; @@ -124,6 +125,8 @@ int SBAController::timeout(struct gprs_rlcmac_sba *sba) { LOGP(DRLCMAC, LOGL_NOTICE, "Poll timeout for SBA\n"); llist_del(&sba->list); + m_bts.sba_timedout(); + m_bts.sba_freed(); talloc_free(sba); return 0; @@ -138,6 +141,7 @@ void SBAController::free_resources(struct gprs_rlcmac_pdch *pdch) llist_for_each_entry_safe(sba, sba2, &m_sbas, list) { if (sba->trx_no == trx_no && sba->ts_no == ts_no) { llist_del(&sba->list); + m_bts.sba_freed(); talloc_free(sba); } } |