sba: Count SBA allocation, frees and timeouts

Add a warning about the receive message poking in the internal
of the sba. This will be cleaned up in a follow up commit
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 @@
 	{ "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 @@
 				} 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 @@
 				"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 @@
 		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 @@
 	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 @@
 	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 @@
 	sba->ta = ta;
 
 	llist_add(&sba->list, &m_sbas);
+	m_bts.sba_allocated();
 
 	*_trx = trx;
 	*_ts = ts;
@@ -124,6 +125,8 @@
 {
 	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 @@
 	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);
 		}
 	}