aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bts.cpp7
-rw-r--r--src/bts.h40
-rw-r--r--src/sba.cpp4
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);
}
diff --git a/src/bts.h b/src/bts.h
index eec3493..3ffd219 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -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);
}
}