aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-26 20:27:44 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2013-10-30 21:24:11 +0100
commit24c1a5ba29998d4293f7337a195a664d1845f673 (patch)
tree02ffa68de69ea2242d48c14f0847771feb1f1250 /src
parent42de18f347fe72bedf39a2498bc0f40db78d3468 (diff)
bts: Move gprs_rlcmac_trigger_downlink_assignment into BTS
Diffstat (limited to 'src')
-rw-r--r--src/bts.cpp38
-rw-r--r--src/bts.h1
-rw-r--r--src/gprs_rlcmac.h4
-rw-r--r--src/gprs_rlcmac_data.cpp41
-rw-r--r--src/tbf.cpp4
5 files changed, 42 insertions, 46 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 8bb0f26e..9fd4fc3e 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -331,6 +331,44 @@ int BTS::rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn)
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 608f215e..00d81731 100644
--- a/src/bts.h
+++ b/src/bts.h
@@ -170,6 +170,7 @@ public:
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 6184a515..80673792 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -102,10 +102,6 @@ struct msgb *gprs_rlcmac_send_packet_uplink_assignment(
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 27e51d0e..004ac93f 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -722,8 +722,7 @@ int gprs_rlcmac_downlink_ack(
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 @@ struct msgb *gprs_rlcmac_send_packet_downlink_assignment(
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 73b8b1c8..f8e1dcb4 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -86,7 +86,7 @@ static int tbf_append_data(struct gprs_rlcmac_tbf *tbf,
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 @@ static int tbf_new_dl_assignment(struct gprs_rlcmac_bts *bts,
* 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);