tbf: Use plain old data structure (PODS) for llist management

The PODS struct has a back pointer to access the actual object.
llist_pods_for_each_entry traverses the list of struct llist_pods and
makes the entry available (through the back pointer).

Ticket: SYS#389
Sponsored-by: On-Waves ehf
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 1201642..2257018 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -286,7 +286,7 @@
 	#warning "TODO: Could/Should generate  bssgp_tx_llc_discarded"
 	tbf->m_llc.clear(tbf->bts);
 	tbf_unlink_pdch(tbf);
-	llist_del(&tbf->list);
+	llist_del(&tbf->list.list);
 
 	if (tbf->direction == GPRS_RLCMAC_UL_TBF)
 		tbf->bts->tbf_ul_freed();
@@ -491,6 +491,9 @@
 	if (!tbf)
 		return -1;
 
+	/* Back pointer for PODS llist compatibility */
+	tbf->list.back = tbf;
+
 	tbf->m_created_ts = time(NULL);
 	tbf->bts = bts->bts;
 	tbf->m_tfi = tfi;
@@ -548,7 +551,7 @@
 		return NULL;
 	}
 
-	llist_add(&tbf->list, &bts->ul_tbfs);
+	llist_add(&tbf->list.list, &bts->ul_tbfs);
 	tbf->bts->tbf_ul_created();
 
 	return tbf;
@@ -581,7 +584,7 @@
 		return NULL;
 	}
 
-	llist_add(&tbf->list, &bts->dl_tbfs);
+	llist_add(&tbf->list.list, &bts->dl_tbfs);
 	tbf->bts->tbf_dl_created();
 
 	return tbf;
@@ -1805,11 +1808,11 @@
 
 void gprs_rlcmac_tbf::rotate_in_list()
 {
-	llist_del(&list);
+	llist_del(&list.list);
 	if (direction == GPRS_RLCMAC_UL_TBF)
-		llist_add(&list, &bts->bts_data()->ul_tbfs);
+		llist_add(&list.list, &bts->bts_data()->ul_tbfs);
 	else
-		llist_add(&list, &bts->bts_data()->dl_tbfs);
+		llist_add(&list.list, &bts->bts_data()->dl_tbfs);
 }
 
 uint8_t gprs_rlcmac_tbf::tsc() const
@@ -1819,7 +1822,7 @@
 
 void tbf_print_vty_info(struct vty *vty, llist_head *ltbf)
 {
-	gprs_rlcmac_tbf *tbf = llist_entry(ltbf, gprs_rlcmac_tbf, list);
+	gprs_rlcmac_tbf *tbf = llist_pods_entry(ltbf, gprs_rlcmac_tbf);
 
 	vty_out(vty, "TBF: TFI=%d TLLI=0x%08x (%s) DIR=%s IMSI=%s%s", tbf->tfi(),
 			tbf->tlli(), tbf->is_tlli_valid() ? "valid" : "invalid",