tbf: Make the tlli "private" and update the updating code

Now all updates to the tlli/tlli_valid are in one place. If we
implement the policy to update the matching/linked TBF we can
now to do it in a single place. Add a todo item for that as I
am waiting for feedback from the mailinglist.
diff --git a/src/bts.cpp b/src/bts.cpp
index 2357e07..261b5d2 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -216,13 +216,13 @@
 	if (dir == GPRS_RLCMAC_UL_TBF) {
 		llist_for_each_entry(tbf, &m_bts.ul_tbfs, list) {
 			if (tbf->state_is_not(GPRS_RLCMAC_RELEASING)
-			 && tbf->tlli == tlli && tbf->tlli_valid)
+			 && tbf->tlli() == tlli && tbf->is_tlli_valid())
 				return tbf;
 		}
 	} else {
 		llist_for_each_entry(tbf, &m_bts.dl_tbfs, list) {
 			if (tbf->state_is_not(GPRS_RLCMAC_RELEASING)
-			 && tbf->tlli == tlli)
+			 && tbf->tlli() == tlli)
 				return tbf;
 		}
 	}
@@ -499,7 +499,7 @@
 	 * so the assignment will not conflict with possible RACH requests. */
 	plen = Encoding::write_immediate_assignment(&m_bts, immediate_assignment, 1, 125,
 		(tbf->pdch[tbf->first_ts]->last_rts_fn + 21216) % 2715648, tbf->ta,
-		tbf->trx->arfcn, tbf->first_ts, tbf->tsc, tbf->tfi, 0, tbf->tlli, poll,
+		tbf->trx->arfcn, tbf->first_ts, tbf->tsc, tbf->tfi, 0, tbf->tlli(), poll,
 		tbf->poll_fn, 0, m_bts.alpha, m_bts.gamma, -1);
 	pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
 	bitvec_free(immediate_assignment);
@@ -690,8 +690,9 @@
 	gprs_rlcmac_rssi(tbf, rssi);
 
 	/* get TLLI */
-	if (!tbf->tlli_valid) {
+	if (!tbf->is_tlli_valid()) {
 		struct gprs_rlcmac_tbf *dl_tbf, *ul_tbf;
+		uint32_t tlli;
 
 		/* no TLLI yet */
 		if (!rh->ti) {
@@ -699,36 +700,36 @@
 				"TLLI, but no TLLI received yet\n", rh->tfi);
 			return 0;
 		}
-#warning "Silent TLLI change possible.. Should update TA.."
-		rc = Decoding::tlli_from_ul_data(data, len, &tbf->tlli);
+		rc = Decoding::tlli_from_ul_data(data, len, &tlli);
 		if (rc) {
 			bts()->decode_error();
 			LOGP(DRLCMACUL, LOGL_NOTICE, "Failed to decode TLLI "
 				"of UL DATA TFI=%d.\n", rh->tfi);
 			return 0;
 		}
+		tbf->update_tlli(tlli);
 		LOGP(DRLCMACUL, LOGL_INFO, "Decoded premier TLLI=0x%08x of "
-			"UL DATA TFI=%d.\n", tbf->tlli, rh->tfi);
-		if ((dl_tbf = bts()->tbf_by_tlli(tbf->tlli, GPRS_RLCMAC_DL_TBF))) {
+			"UL DATA TFI=%d.\n", tbf->tlli(), rh->tfi);
+		if ((dl_tbf = bts()->tbf_by_tlli(tbf->tlli(), GPRS_RLCMAC_DL_TBF))) {
 			LOGP(DRLCMACUL, LOGL_NOTICE, "Got RACH from "
 				"TLLI=0x%08x while DL TFI=%d still exists. "
-				"Killing pending DL TBF\n", tbf->tlli,
+				"Killing pending DL TBF\n", tbf->tlli(),
 				dl_tbf->tfi);
 			tbf_free(dl_tbf);
 		}
 		/* tbf_by_tlli will not find your TLLI, because it is not
 		 * yet marked valid */
-		if ((ul_tbf = bts()->tbf_by_tlli(tbf->tlli, GPRS_RLCMAC_UL_TBF))) {
+		if ((ul_tbf = bts()->tbf_by_tlli(tbf->tlli(), GPRS_RLCMAC_UL_TBF))) {
 			LOGP(DRLCMACUL, LOGL_NOTICE, "Got RACH from "
-				"TLLI=0x%08x while UL TFI=%d still exists. "
-				"Killing pending UL TBF\n", tbf->tlli,
-				ul_tbf->tfi);
+				"TLLI=0x%08x while %s still exists. "
+				"Killing pending UL TBF\n", tbf->tlli(),
+				tbf_name(ul_tbf));
 			tbf_free(ul_tbf);
 		}
 		/* mark TLLI valid now */
-		tbf->tlli_valid = 1;
+		tbf->tlli_mark_valid();
 		/* store current timing advance */
-		bts()->timing_advance()->remember(tbf->tlli, tbf->ta);
+		bts()->timing_advance()->remember(tbf->tlli(), tbf->ta);
 	/* already have TLLI, but we stille get another one */
 	} else if (rh->ti) {
 		uint32_t tlli;
@@ -738,7 +739,7 @@
 				"of UL DATA TFI=%d.\n", rh->tfi);
 			return 0;
 		}
-		if (tlli != tbf->tlli) {
+		if (tlli != tbf->tlli()) {
 			LOGP(DRLCMACUL, LOGL_NOTICE, "TLLI mismatch on UL "
 				"DATA TFI=%d. (Ignoring due to contention "
 				"resolution)\n", rh->tfi);
@@ -877,12 +878,7 @@
 			fn, tlli, trx_no(), ts_no);
 		return;
 	}
-	if (tlli != tbf->tlli) {
-		LOGP(DRLCMAC, LOGL_INFO, "Phone changed TLLI to "
-			"0x%08x\n", tlli);
-#warning "Silent TLLI changes... update TA.. and other structs"
-		tbf->tlli = tlli;
-	}
+	tbf->update_tlli(tlli);
 	LOGP(DRLCMAC, LOGL_DEBUG, "RX: [PCU <- BTS] %s Packet Control Ack\n", tbf_name(tbf));
 	tbf->poll_state = GPRS_RLCMAC_POLL_NONE;
 
@@ -908,7 +904,7 @@
 		tbf->dl_ass_state = GPRS_RLCMAC_DL_ASS_NONE;
 		debug_diagram(bts(), tbf->diag, "got CTL-ACK DL-ASS");
 		if (tbf->direction == GPRS_RLCMAC_UL_TBF)
-			tbf = bts()->tbf_by_tlli(tbf->tlli,
+			tbf = bts()->tbf_by_tlli(tbf->tlli(),
 						GPRS_RLCMAC_DL_TBF);
 #warning "TBF is changing on the way... *sigh*"
 		if (!tbf) {
@@ -937,7 +933,7 @@
 		debug_diagram(bts(), tbf->diag, "got CTL-AC UL-ASS");
 #warning "TBF is changing on the way... *sigh*"
 		if (tbf->direction == GPRS_RLCMAC_DL_TBF)
-			tbf = bts()->tbf_by_tlli(tbf->tlli,
+			tbf = bts()->tbf_by_tlli(tbf->tlli(),
 						GPRS_RLCMAC_UL_TBF);
 		if (!tbf) {
 			LOGP(DRLCMAC, LOGL_ERROR, "Got ACK, but UL "
@@ -1003,7 +999,7 @@
 	if (ack_nack->Exist_Channel_Request_Description) {
 		LOGP(DRLCMAC, LOGL_DEBUG, "MS requests UL TBF in ack "
 			"message, so we provide one:\n");
-		tbf_alloc_ul(bts_data(), tbf->trx->trx_no, tbf->ms_class, tbf->tlli, tbf->ta, tbf);
+		tbf_alloc_ul(bts_data(), tbf->trx->trx_no, tbf->ms_class, tbf->tlli(), tbf->ta, tbf);
 		/* schedule uplink assignment */
 		tbf->ul_ass_state = GPRS_RLCMAC_UL_ASS_SEND_ASS;
 	}