aboutsummaryrefslogtreecommitdiffstats
path: root/src/tbf_dl.cpp
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2018-01-02 14:17:04 +0100
committerHarald Welte <laforge@gnumonks.org>2018-01-12 14:17:52 +0000
commit8dce1de6d2669023b715945cc58813380ac7f322 (patch)
treead32dcb8b1b16689fc09b4990541372a749f9b3f /src/tbf_dl.cpp
parent5081806f4d41ceccf5b5421c9644113ac41e2524 (diff)
TBF: cleanup state flag handling
* introduce generic function to check whether particular flag was set for'a TBF and clear it if necessary. Use this instead of clear_poll_timeout_flag() * add function to explicitly set assignment and appropriate state flags Overall this makes the code easier to read and debug. Related: OS#1759 Change-Id: Ic4560280c72f91700f2e19c6c7f6658dc29625c2
Diffstat (limited to 'src/tbf_dl.cpp')
-rw-r--r--src/tbf_dl.cpp17
1 files changed, 4 insertions, 13 deletions
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index b871bc32..e3b0a9de 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -493,9 +493,7 @@ void gprs_rlcmac_dl_tbf::trigger_ass(struct gprs_rlcmac_tbf *old_tbf)
old_tbf->was_releasing = old_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE);
/* change state */
- set_state(GPRS_RLCMAC_ASSIGN);
- if (!(state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH)))
- state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+ set_assigned_on(GPRS_RLCMAC_FLAG_PACCH, true);
/* start timer */
T_START(this, T0, T_ASS_PACCH_SEC, 0, "assignment (PACCH)", true);
@@ -505,8 +503,7 @@ void gprs_rlcmac_dl_tbf::trigger_ass(struct gprs_rlcmac_tbf *old_tbf)
was_releasing = state_is(GPRS_RLCMAC_WAIT_RELEASE);
/* change state */
- set_state(GPRS_RLCMAC_ASSIGN);
- state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
+ set_assigned_on(GPRS_RLCMAC_FLAG_CCCH, false);
/* send immediate assignment */
bts->snd_dl_ass(this, 0, imsi());
@@ -634,18 +631,12 @@ int gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, GprsCodingScheme cs)
return bsn;
}
-void gprs_rlcmac_dl_tbf::clear_poll_timeout_flag()
-{
- state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
-}
-
bool gprs_rlcmac_dl_tbf::handle_ack_nack()
{
bool ack_recovered = false;
state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK);
- if ((state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {
- clear_poll_timeout_flag();
+ if (check_n_clear(GPRS_RLCMAC_FLAG_TO_DL_ACK)) {
ack_recovered = true;
}
@@ -856,7 +847,7 @@ struct msgb *gprs_rlcmac_dl_tbf::create_dl_acked_block(
if (is_final)
T_START(this, T3191, bts_data()->t3191, 0, "final block (DL-TBF)", true);
- clear_poll_timeout_flag();
+ state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK); /* clear poll timeout flag */
/* Clear request flag */
m_dl_ack_requested = false;