Review at  https://gerrit.osmocom.org/2858

Cleanup TBF state handling

Use OSMO_BIT_* macros for manipulating TBF state flags to improve code
readability and make state change tracking easier.

Change-Id: Icca5ce3273799e0165adcc062db8a4b71dd9fb04
Related: OS#1524
---
M src/bts.cpp
M src/tbf.cpp
M src/tbf.h
M src/tbf_dl.cpp
M src/tbf_ul.cpp
5 files changed, 44 insertions(+), 50 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/58/2858/1

diff --git a/src/bts.cpp b/src/bts.cpp
index 1d27284..b805bf7 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -651,7 +651,7 @@
                } else {
                        tbf->set_ta(ta);
                        tbf->set_state(GPRS_RLCMAC_FLOW);
-                       tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
+                       OSMO_BIT_SET(tbf->state_flags, GPRS_RLCMAC_FLAG_CCCH);
                        tbf_timer_start(tbf, 3169, m_bts.t3169, 0);
                        LOGP(DRLCMAC, LOGL_DEBUG, "%s [UPLINK] START\n",
                                        tbf_name(tbf));
@@ -788,8 +788,8 @@
 
                /* change state */
                dl_tbf->set_state(GPRS_RLCMAC_ASSIGN);
-               if (!(dl_tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH)))
-                       dl_tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+               if (!OSMO_BIT_GET(dl_tbf->state_flags, GPRS_RLCMAC_FLAG_CCCH))
+                       OSMO_BIT_SET(dl_tbf->state_flags, 
GPRS_RLCMAC_FLAG_PACCH);
                /* start timer */
                tbf_timer_start(dl_tbf, 0, Tassign_pacch);
        } else {
@@ -797,7 +797,7 @@
                dl_tbf->was_releasing = 
dl_tbf->state_is(GPRS_RLCMAC_WAIT_RELEASE);
                /* change state */
                dl_tbf->set_state(GPRS_RLCMAC_ASSIGN);
-               dl_tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_CCCH);
+               OSMO_BIT_SET(dl_tbf->state_flags, GPRS_RLCMAC_FLAG_CCCH);
                /* send immediate assignment */
                dl_tbf->bts->snd_dl_ass(dl_tbf, 0, dl_tbf->imsi());
                dl_tbf->m_wait_confirm = 1;
@@ -1007,10 +1007,8 @@
        if (tbf->ul_ack_state == GPRS_RLCMAC_UL_ACK_WAIT_ACK) {
                LOGP(DRLCMAC, LOGL_DEBUG, "TBF: [UPLINK] END %s\n", 
tbf_name(tbf));
                tbf->ul_ack_state = GPRS_RLCMAC_UL_ACK_NONE;
-               if ((tbf->state_flags &
-                       (1 << GPRS_RLCMAC_FLAG_TO_UL_ACK))) {
-                       tbf->state_flags &=
-                               ~(1 << GPRS_RLCMAC_FLAG_TO_UL_ACK);
+               if (OSMO_BIT_GET(tbf->state_flags, GPRS_RLCMAC_FLAG_TO_UL_ACK)) 
{
+                       OSMO_BIT_CLEAR(tbf->state_flags, 
GPRS_RLCMAC_FLAG_TO_UL_ACK);
                                LOGP(DRLCMAC, LOGL_NOTICE, "Recovered uplink "
                                        "ack for UL %s\n", tbf_name(tbf));
                }
@@ -1033,22 +1031,20 @@
                                tbf->direction == new_tbf->direction)
                        tbf_free(tbf);
 
-               if ((new_tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH))) {
+               if (OSMO_BIT_GET(new_tbf->state_flags, GPRS_RLCMAC_FLAG_CCCH)) {
                        /* We now know that the PACCH really existed */
                        LOGP(DRLCMAC, LOGL_INFO,
                                "The TBF has been confirmed on the PACCH, "
                                "changed type from CCCH to PACCH for %s\n",
                                tbf_name(new_tbf));
-                       new_tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
-                       new_tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+                       OSMO_BIT_CLEAR(new_tbf->state_flags, 
GPRS_RLCMAC_FLAG_CCCH);
+                       OSMO_BIT_SET(new_tbf->state_flags, 
GPRS_RLCMAC_FLAG_PACCH);
                }
                new_tbf->set_state(GPRS_RLCMAC_FLOW);
                /* stop pending assignment timer */
                new_tbf->stop_timer();
-               if ((new_tbf->state_flags &
-                       (1 << GPRS_RLCMAC_FLAG_TO_DL_ASS))) {
-                       new_tbf->state_flags &=
-                               ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ASS);
+               if (OSMO_BIT_GET(new_tbf->state_flags, 
GPRS_RLCMAC_FLAG_TO_DL_ASS)) {
+                       OSMO_BIT_CLEAR(new_tbf->state_flags, 
GPRS_RLCMAC_FLAG_TO_DL_ASS);
                        LOGP(DRLCMAC, LOGL_NOTICE, "Recovered downlink "
                                "assignment for %s\n", tbf_name(new_tbf));
                }
@@ -1072,10 +1068,8 @@
                        tbf_free(tbf);
 
                new_tbf->set_state(GPRS_RLCMAC_FLOW);
-               if ((new_tbf->state_flags &
-                       (1 << GPRS_RLCMAC_FLAG_TO_UL_ASS))) {
-                       new_tbf->state_flags &=
-                               ~(1 << GPRS_RLCMAC_FLAG_TO_UL_ASS);
+               if (OSMO_BIT_GET(new_tbf->state_flags, 
GPRS_RLCMAC_FLAG_TO_UL_ASS)) {
+                       OSMO_BIT_CLEAR(new_tbf->state_flags, 
GPRS_RLCMAC_FLAG_TO_UL_ASS);
                        LOGP(DRLCMAC, LOGL_NOTICE, "Recovered uplink "
                                "assignment for UL %s\n", tbf_name(new_tbf));
                }
@@ -1175,9 +1169,9 @@
                        "wrong TFI=%d, ignoring!\n", tfi);
                return;
        }
-       tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK);
-       if ((tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {
-               tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
+       OSMO_BIT_SET(tbf->state_flags, GPRS_RLCMAC_FLAG_DL_ACK);
+       if (OSMO_BIT_GET(tbf->state_flags, GPRS_RLCMAC_FLAG_TO_DL_ACK)) {
+               OSMO_BIT_CLEAR(tbf->state_flags, GPRS_RLCMAC_FLAG_TO_DL_ACK);
                LOGP(DRLCMAC, LOGL_NOTICE, "Recovered downlink ack "
                        "for %s\n", tbf_name(tbf));
        }
@@ -1263,9 +1257,9 @@
                        "wrong TFI=%d, ignoring!\n", tfi);
                return;
        }
-       tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK);
-       if ((tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {
-               tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
+       OSMO_BIT_SET(tbf->state_flags, GPRS_RLCMAC_FLAG_DL_ACK);
+       if (OSMO_BIT_GET(tbf->state_flags, GPRS_RLCMAC_FLAG_TO_DL_ACK)) {
+               OSMO_BIT_CLEAR(tbf->state_flags, GPRS_RLCMAC_FLAG_TO_DL_ACK);
                LOGP(DRLCMAC, LOGL_NOTICE, "Recovered EGPRS downlink ack "
                        "for %s\n", tbf_name(tbf));
        }
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 48e8289..5a38c49 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -393,7 +393,7 @@
        }
        tbf->m_contention_resolution_done = 1;
        tbf->set_state(GPRS_RLCMAC_ASSIGN);
-       tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+       OSMO_BIT_SET(tbf->state_flags, GPRS_RLCMAC_FLAG_PACCH);
        tbf_timer_start(tbf, 3169, bts->t3169, 0);
        tbf->update_ms(tlli, GPRS_RLCMAC_UL_TBF);
        OSMO_ASSERT(tbf->ms());
@@ -613,11 +613,11 @@
        poll_state = GPRS_RLCMAC_POLL_NONE;
 
        if (ul_ack_state == GPRS_RLCMAC_UL_ACK_WAIT_ACK) {
-               if (!(state_flags & (1 << GPRS_RLCMAC_FLAG_TO_UL_ACK))) {
+               if (!OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_TO_UL_ACK)) {
                        LOGP(DRLCMAC, LOGL_NOTICE, "- Timeout for polling "
                                "PACKET CONTROL ACK for PACKET UPLINK ACK\n");
                        rlcmac_diag();
-                       state_flags |= (1 << GPRS_RLCMAC_FLAG_TO_UL_ACK);
+                       OSMO_BIT_SET(state_flags, GPRS_RLCMAC_FLAG_TO_UL_ACK);
                }
                ul_ack_state = GPRS_RLCMAC_UL_ACK_NONE;
                bts->rlc_ack_timedout();
@@ -638,12 +638,12 @@
                }
 
        } else if (ul_ass_state == GPRS_RLCMAC_UL_ASS_WAIT_ACK) {
-               if (!(state_flags & (1 << GPRS_RLCMAC_FLAG_TO_UL_ASS))) {
+               if (!OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_TO_UL_ASS)) {
                        LOGP(DRLCMAC, LOGL_NOTICE, "- Timeout for polling "
                                "PACKET CONTROL ACK for PACKET UPLINK "
                                "ASSIGNMENT.\n");
                        rlcmac_diag();
-                       state_flags |= (1 << GPRS_RLCMAC_FLAG_TO_UL_ASS);
+                       OSMO_BIT_SET(state_flags, GPRS_RLCMAC_FLAG_TO_UL_ASS);
                }
                ul_ass_state = GPRS_RLCMAC_UL_ASS_NONE;
                n3105++;
@@ -660,12 +660,12 @@
                /* reschedule UL assignment */
                ul_ass_state = GPRS_RLCMAC_UL_ASS_SEND_ASS;
        } else if (dl_ass_state == GPRS_RLCMAC_DL_ASS_WAIT_ACK) {
-               if (!(state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ASS))) {
+               if (!OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_TO_DL_ASS)) {
                        LOGP(DRLCMAC, LOGL_NOTICE, "- Timeout for polling "
                                "PACKET CONTROL ACK for PACKET DOWNLINK "
                                "ASSIGNMENT.\n");
                        rlcmac_diag();
-                       state_flags |= (1 << GPRS_RLCMAC_FLAG_TO_DL_ASS);
+                       OSMO_BIT_SET(state_flags, GPRS_RLCMAC_FLAG_TO_DL_ASS);
                }
                dl_ass_state = GPRS_RLCMAC_DL_ASS_NONE;
                n3105++;
@@ -684,11 +684,11 @@
        } else if (direction == GPRS_RLCMAC_DL_TBF) {
                gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(this);
 
-               if (!(dl_tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) 
{
+               if (!OSMO_BIT_GET(dl_tbf->state_flags, 
GPRS_RLCMAC_FLAG_TO_DL_ACK)) {
                        LOGP(DRLCMAC, LOGL_NOTICE, "- Timeout for polling "
                                "PACKET DOWNLINK ACK.\n");
                        dl_tbf->rlcmac_diag();
-                       dl_tbf->state_flags |= (1 << 
GPRS_RLCMAC_FLAG_TO_DL_ACK);
+                       OSMO_BIT_SET(dl_tbf->state_flags, 
GPRS_RLCMAC_FLAG_TO_DL_ACK);
                }
                dl_tbf->n3105++;
                if (dl_tbf->state_is(GPRS_RLCMAC_RELEASING))
@@ -706,8 +706,8 @@
                        return;
                }
                /* resend IMM.ASS on CCCH on timeout */
-               if ((dl_tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH))
-                && !(dl_tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_DL_ACK))) {
+               if (OSMO_BIT_GET(dl_tbf->state_flags, GPRS_RLCMAC_FLAG_CCCH)
+                   && !OSMO_BIT_GET(dl_tbf->state_flags, 
GPRS_RLCMAC_FLAG_DL_ACK)) {
                        LOGP(DRLCMAC, LOGL_DEBUG, "Re-send dowlink assignment "
                                "for %s on PCH (IMSI=%s)\n",
                                tbf_name(dl_tbf),
@@ -961,7 +961,7 @@
 
        switch (T) {
        case 0: /* assignment */
-               if ((state_flags & (1 << GPRS_RLCMAC_FLAG_PACCH))) {
+               if (OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_PACCH)) {
                        if (state_is(GPRS_RLCMAC_ASSIGN)) {
                                LOGP(DRLCMAC, LOGL_NOTICE, "%s releasing due to 
"
                                        "PACCH assignment timeout.\n", 
tbf_name(this));
@@ -971,7 +971,7 @@
                                LOGP(DRLCMAC, LOGL_ERROR, "Error: %s is not "
                                        "in assign state\n", tbf_name(this));
                }
-               if ((state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH))) {
+               if (OSMO_BIT_GET(state_flags, 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)) {
@@ -1022,15 +1022,15 @@
 
 int gprs_rlcmac_tbf::rlcmac_diag()
 {
-       if ((state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH)))
+       if (OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_CCCH))
                LOGP(DRLCMAC, LOGL_NOTICE, "- Assignment was on CCCH\n");
-       if ((state_flags & (1 << GPRS_RLCMAC_FLAG_PACCH)))
+       if (OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_PACCH))
                LOGP(DRLCMAC, LOGL_NOTICE, "- Assignment was on PACCH\n");
-       if ((state_flags & (1 << GPRS_RLCMAC_FLAG_UL_DATA)))
+       if (OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_UL_DATA))
                LOGP(DRLCMAC, LOGL_NOTICE, "- Uplink data was received\n");
        else if (direction == GPRS_RLCMAC_UL_TBF)
                LOGP(DRLCMAC, LOGL_NOTICE, "- No uplink data received yet\n");
-       if ((state_flags & (1 << GPRS_RLCMAC_FLAG_DL_ACK)))
+       if (OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_DL_ACK))
                LOGP(DRLCMAC, LOGL_NOTICE, "- Downlink ACK was received\n");
        else if (direction == GPRS_RLCMAC_DL_TBF)
                LOGP(DRLCMAC, LOGL_NOTICE, "- No downlink ACK received yet\n");
@@ -1427,7 +1427,7 @@
        llist_add(&ul_tbf->list(), &bts->bts->ul_tbfs());
        ul_tbf->bts->tbf_ul_created();
        ul_tbf->set_state(GPRS_RLCMAC_ASSIGN);
-       ul_tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+       OSMO_BIT_SET(ul_tbf->state_flags, GPRS_RLCMAC_FLAG_PACCH);
 
        ul_tbf->set_ms(ms);
        ul_tbf->update_ms(tlli, GPRS_RLCMAC_UL_TBF);
diff --git a/src/tbf.h b/src/tbf.h
index 09e3122..46c43a2 100644
--- a/src/tbf.h
+++ b/src/tbf.h
@@ -377,7 +377,7 @@
        return state > GPRS_RLCMAC_ASSIGN ||
                (direction == GPRS_RLCMAC_DL_TBF &&
                 state == GPRS_RLCMAC_ASSIGN &&
-                (state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH)));
+                OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_CCCH));
 }
 
 inline uint8_t gprs_rlcmac_tbf::tfi() const
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 24c6385..0efa893 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -777,7 +777,7 @@
        if (m_last_dl_poll_fn < 0)
                m_last_dl_poll_fn = fn;
 
-       need_poll = state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
+       need_poll = OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_TO_DL_ACK);
 
        /* poll after POLL_ACK_AFTER_FRAMES frames, or when final block is tx.
         */
@@ -808,7 +808,7 @@
                                tbf_timer_start(this, 3191, bts_data()->t3191, 
0);
 
                        /* Clear poll timeout flag */
-                       state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
+                       OSMO_BIT_CLEAR(state_flags, GPRS_RLCMAC_FLAG_TO_DL_ACK);
 
                        /* Clear request flag */
                        m_dl_ack_requested = false;
@@ -1080,7 +1080,7 @@
 
        /* keep to flags */
        state_flags &= GPRS_RLCMAC_FLAG_TO_MASK;
-       state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
+       OSMO_BIT_CLEAR(state_flags, GPRS_RLCMAC_FLAG_CCCH);
 
        return 0;
 }
@@ -1108,7 +1108,7 @@
 
        /* keep to flags */
        state_flags &= GPRS_RLCMAC_FLAG_TO_MASK;
-       state_flags &= ~(1 << GPRS_RLCMAC_FLAG_CCCH);
+       OSMO_BIT_CLEAR(state_flags, GPRS_RLCMAC_FLAG_CCCH);
 
        return 0;
 }
@@ -1159,7 +1159,7 @@
        if (poll_state != GPRS_RLCMAC_POLL_NONE)
                return false;
 
-       return state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK) ||
+       return OSMO_BIT_GET(state_flags, GPRS_RLCMAC_FLAG_TO_DL_ACK) ||
                m_tx_counter >= POLL_ACK_AFTER_FRAMES ||
                m_dl_ack_requested;
 }
diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp
index 1eee41a..7c9f2f4 100644
--- a/src/tbf_ul.cpp
+++ b/src/tbf_ul.cpp
@@ -156,7 +156,7 @@
 
        const uint16_t ws = m_window.ws();
 
-       this->state_flags |= (1 << GPRS_RLCMAC_FLAG_UL_DATA);
+       OSMO_BIT_SET(this->state_flags, GPRS_RLCMAC_FLAG_UL_DATA);
 
        LOGP(DRLCMACUL, LOGL_DEBUG, "UL DATA TFI=%d received (V(Q)=%d .. "
                "V(R)=%d)\n", rlc->tfi, this->m_window.v_q(),

-- 
To view, visit https://gerrit.osmocom.org/2858
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icca5ce3273799e0165adcc062db8a4b71dd9fb04
Gerrit-PatchSet: 1
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Owner: Max <[email protected]>

Reply via email to