aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-01 20:59:04 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-09 23:09:59 +0100
commitf6dda6ce98c5ab7e4921e080b314875e207f6190 (patch)
tree96e7e5e02f577a2bc445cbd490ed54b60fba0a7f
parente6121c58925c01a937b3609381a6123f38b8f9b0 (diff)
tbf: Delay WAIT_ASSIGN (immediate assigment) to confirmation (TODO)
Currently the state on the TBF is set to WAIT_ASSIGN when teh immediate assigment is created in the moment when the assignment is really transmitted to the MS (which can take some time). This can take some time due to PCH and AGCH queueing while the TBF might be erroneously be considered as valid because the MS has not yet received the message. Delay the state change, until the BTS has confirmed it. TODO: - clarify when the BTS sends the confirmation. If it is sent when the message is passed to the DSP, it is fine. If it is sent when the message is enqueued, it doesn't help much. Sponsored-by: On-Waves ehf
-rw-r--r--src/bts.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 715fb515..f7b3f184 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -453,8 +453,10 @@ 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)
+ if (dl_tbf->m_wait_confirm) {
+ dl_tbf->set_state(GPRS_RLCMAC_WAIT_ASSIGN);
tbf_timer_start(dl_tbf, 0, Tassign_agch);
+ }
return 0;
}
@@ -544,11 +546,8 @@ int BTS::rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta)
m_bts.trx[trx_no].arfcn, ts_no, tsc, usf, 0, sb_fn,
m_bts.alpha, m_bts.gamma, -1);
- if (plen >= 0) {
+ if (plen >= 0)
pcu_l1if_tx_agch(immediate_assignment, plen);
- if (tbf)
- tbf->set_state(GPRS_RLCMAC_WAIT_ASSIGN);
- }
bitvec_free(immediate_assignment);
@@ -606,10 +605,8 @@ void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi)
(tbf->pdch[ts]->last_rts_fn + 21216) % 2715648, tbf->ta(),
tbf->trx->arfcn, ts, tbf->tsc(), 7, poll,
tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1);
- if (plen >= 0) {
+ if (plen >= 0)
pcu_l1if_tx_pch(immediate_assignment, plen, imsi);
- tbf->set_state(GPRS_RLCMAC_WAIT_ASSIGN);
- }
bitvec_free(immediate_assignment);
}