bts: Move gprs_rlcmac_trigger_downlink_assignment into BTS
diff --git a/src/bts.cpp b/src/bts.cpp
index 8bb0f26..9fd4fc3 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -331,6 +331,44 @@
 	return 0;
 }
 
+/* depending on the current TBF, we assign on PACCH or AGCH */
+void BTS::trigger_dl_ass(
+	struct gprs_rlcmac_tbf *tbf,
+	struct gprs_rlcmac_tbf *old_tbf, const char *imsi)
+{
+	/* stop pending timer */
+	tbf->stop_timer();
+
+	/* check for downlink tbf:  */
+	if (old_tbf) {
+		LOGP(DRLCMAC, LOGL_DEBUG, "Send dowlink assignment on "
+			"PACCH, because %s TBF=%d exists for TLLI=0x%08x\n",
+			(old_tbf->direction == GPRS_RLCMAC_UL_TBF)
+				? "UL" : "DL", old_tbf->tfi, old_tbf->tlli);
+		old_tbf->dl_ass_state = GPRS_RLCMAC_DL_ASS_SEND_ASS;
+		/* use TA from old TBF */
+		tbf->ta = old_tbf->ta;
+		/* change state */
+		tbf_new_state(tbf, GPRS_RLCMAC_ASSIGN);
+		tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+		/* start timer */
+		tbf_timer_start(tbf, 0, Tassign_pacch);
+	} else {
+		LOGP(DRLCMAC, LOGL_DEBUG, "Send dowlink assignment for TBF=%d on PCH, no TBF exist (IMSI=%s)\n", tbf->tfi, imsi);
+		if (!imsi || strlen(imsi) < 3) {
+			LOGP(DRLCMAC, LOGL_ERROR, "No valid IMSI!\n");
+			return;
+		}
+		/* change state */
+		tbf_new_state(tbf, GPRS_RLCMAC_ASSIGN);
+		tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
+		strncpy(tbf->dir.dl.imsi, imsi, sizeof(tbf->dir.dl.imsi));
+		/* send immediate assignment */
+		tbf->bts->snd_dl_ass(tbf, 0, imsi);
+		tbf->dir.dl.wait_confirm = 1;
+	}
+}
+
 void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi)
 {
 	int plen;
diff --git a/src/bts.h b/src/bts.h
index 608f215..00d8173 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -170,6 +170,7 @@
 
 	int rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn);
 
+	void trigger_dl_ass(gprs_rlcmac_tbf *tbf, gprs_rlcmac_tbf *old_tbf, const char *imsi);
 	void snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi);
 
 private:
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index 6184a51..8067379 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -102,10 +102,6 @@
 struct msgb *gprs_rlcmac_send_packet_downlink_assignment(
         struct gprs_rlcmac_tbf *tbf, uint32_t fn);
 
-void gprs_rlcmac_trigger_downlink_assignment(
-	struct gprs_rlcmac_tbf *tbf,
-        struct gprs_rlcmac_tbf *old_tbf, const char *imsi);
-
 int gprs_rlcmac_downlink_ack(
 	struct gprs_rlcmac_tbf *tbf, uint8_t final,
         uint8_t ssn, uint8_t *rbb);
diff --git a/src/gprs_rlcmac_data.cpp b/src/gprs_rlcmac_data.cpp
index 27e51d0..004ac93 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -722,8 +722,7 @@
 	tbf->state_flags &= GPRS_RLCMAC_FLAG_TO_MASK; /* keep TO flags */
 	tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
 	tbf->update();
-	gprs_rlcmac_trigger_downlink_assignment(tbf, tbf, NULL);
-
+	tbf->bts->trigger_dl_ass(tbf, tbf, NULL);
 	return 0;
 }
 
@@ -819,41 +818,3 @@
 	return msg;
 }
 
-/* depending on the current TBF, we assign on PACCH or AGCH */
-void gprs_rlcmac_trigger_downlink_assignment(
-	struct gprs_rlcmac_tbf *tbf,
-	struct gprs_rlcmac_tbf *old_tbf, const char *imsi)
-{
-	/* stop pending timer */
-	tbf->stop_timer();
-
-	/* check for downlink tbf:  */
-	if (old_tbf) {
-		LOGP(DRLCMAC, LOGL_DEBUG, "Send dowlink assignment on "
-			"PACCH, because %s TBF=%d exists for TLLI=0x%08x\n",
-			(old_tbf->direction == GPRS_RLCMAC_UL_TBF)
-				? "UL" : "DL", old_tbf->tfi, old_tbf->tlli);
-		old_tbf->dl_ass_state = GPRS_RLCMAC_DL_ASS_SEND_ASS;
-		/* use TA from old TBF */
-		tbf->ta = old_tbf->ta;
-		/* change state */
-		tbf_new_state(tbf, GPRS_RLCMAC_ASSIGN);
-		tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
-		/* start timer */
-		tbf_timer_start(tbf, 0, Tassign_pacch);
-	} else {
-		LOGP(DRLCMAC, LOGL_DEBUG, "Send dowlink assignment for TBF=%d on PCH, no TBF exist (IMSI=%s)\n", tbf->tfi, imsi);
-		if (!imsi || strlen(imsi) < 3) {
-			LOGP(DRLCMAC, LOGL_ERROR, "No valid IMSI!\n");
-			return;
-		}
-		/* change state */
-		tbf_new_state(tbf, GPRS_RLCMAC_ASSIGN);
-		tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
-		strncpy(tbf->dir.dl.imsi, imsi, sizeof(tbf->dir.dl.imsi));
-		/* send immediate assignment */
-		tbf->bts->snd_dl_ass(tbf, 0, imsi);
-		tbf->dir.dl.wait_confirm = 1;
-	}
-}
-
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 73b8b1c..f8e1dcb 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -86,7 +86,7 @@
 		tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
 		tbf_update_ms_class(tbf, ms_class);
 		tbf->update();
-		gprs_rlcmac_trigger_downlink_assignment(tbf, tbf, NULL);
+		tbf->bts->trigger_dl_ass(tbf, tbf, NULL);
 	} else {
 		/* the TBF exists, so we must write it in the queue
 		 * we prepend lifetime in front of PDU */
@@ -192,7 +192,7 @@
 	 * we don't use old_downlink, so the possible uplink is used
 	 * to trigger downlink assignment. if there is no uplink,
 	 * AGCH is used. */
-	gprs_rlcmac_trigger_downlink_assignment(tbf, old_tbf, imsi);
+	tbf->bts->trigger_dl_ass(tbf, old_tbf, imsi);
 
 	/* store IMSI for debugging purpose. TODO: it is more than debugging */
 	tbf_assign_imsi(tbf, imsi);