aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2016-12-02 03:42:07 +0100
committerAlexander Couzens <lynxis@fe80.eu>2016-12-02 03:42:10 +0100
commit1c939a98d075dceff259eabd5dabb2148ed404ed (patch)
tree6210cefb93fe29cbe8a6f7a94a289333d8184110
parentadc7a41209db17dba91218a9cbbe9f9534091d23 (diff)
rapid prototype: fix timeout on dl assignment over CCCH
-rw-r--r--src/bts.cpp4
-rw-r--r--src/tbf.cpp17
2 files changed, 18 insertions, 3 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 4928b333..8e60a571 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -503,7 +503,7 @@ int BTS::rcv_imm_ass_cnf(const uint8_t *data, uint32_t fn)
LOGP(DRLCMAC, LOGL_DEBUG, "Got IMM.ASS confirm for TLLI=%08x\n", tlli);
if (dl_tbf->m_wait_confirm)
- tbf_timer_start(dl_tbf, 0, Tassign_agch);
+ tbf_timer_start(dl_tbf, 1, Tassign_agch);
return 0;
}
@@ -525,7 +525,7 @@ int BTS::rcv_imm_ass_cnf_dt(uint32_t tlli, uint32_t fn)
LOGP(DRLCMAC, LOGL_DEBUG, "Got IMM.ASS confirm for TLLI=%08x\n", tlli);
if (dl_tbf->m_wait_confirm)
- tbf_timer_start(dl_tbf, 0, Tassign_agch);
+ tbf_timer_start(dl_tbf, 1, Tassign_agch);
return 0;
}
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 072d0afb..a9bad8e9 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -844,6 +844,21 @@ void gprs_rlcmac_tbf::handle_timeout()
}
if ((state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH))) {
gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(this);
+ if (dl_tbf->state_is(GPRS_RLCMAC_ASSIGN)) {
+ tbf_assign_control_ts(dl_tbf);
+
+ /* keep to flags */
+ dl_tbf->state_flags &= GPRS_RLCMAC_FLAG_TO_MASK;
+ dl_tbf->update();
+ dl_tbf->bts->trigger_dl_ass(dl_tbf, dl_tbf);
+
+ return;
+ }
+ }
+ break;
+ case 1:
+ if ((state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH))) {
+ gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(this);
dl_tbf->m_wait_confirm = 0;
if (dl_tbf->state_is(GPRS_RLCMAC_ASSIGN)) {
tbf_assign_control_ts(dl_tbf);
@@ -865,7 +880,7 @@ void gprs_rlcmac_tbf::handle_timeout()
dl_tbf->update();
- dl_tbf->bts->trigger_dl_ass(dl_tbf, dl_tbf);
+ dl_tbf->bts->trigger_dl_ass(dl_tbf, NULL);
} else
LOGP(DRLCMAC, LOGL_NOTICE, "%s Continue flow after "
"IMM.ASS confirm\n", tbf_name(dl_tbf));