<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/25627">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  daniel: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tbf: refactor poll_timeout() with a switch statement<br><br>This clarifies the different paths and uniforms them. Makes code far<br>easier to read and debug.<br><br>Change-Id: I4c56af70c79c20f1e600371e040bd48bcc908a75<br>---<br>M src/tbf.cpp<br>1 file changed, 48 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/tbf.cpp b/src/tbf.cpp</span><br><span>index 0ea013b..bda96af 100644</span><br><span>--- a/src/tbf.cpp</span><br><span>+++ b/src/tbf.cpp</span><br><span>@@ -532,12 +532,21 @@</span><br><span> </span><br><span> void gprs_rlcmac_tbf::poll_timeout(struct gprs_rlcmac_pdch *pdch, uint32_t poll_fn, enum pdch_ulc_tbf_poll_reason reason)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  gprs_rlcmac_ul_tbf *ul_tbf = as_ul_tbf(this);</span><br><span style="color: hsl(120, 100%, 40%);">+ gprs_rlcmac_ul_tbf *ul_tbf;</span><br><span style="color: hsl(120, 100%, 40%);">+   gprs_rlcmac_dl_tbf *dl_tbf;</span><br><span> </span><br><span>      LOGPTBF(this, LOGL_NOTICE, "poll timeout for FN=%d, TS=%d (curr FN %d)\n",</span><br><span>                 poll_fn, pdch->ts_no, bts_current_frame_number(bts));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (ul_tbf && reason == PDCH_ULC_POLL_UL_ACK && tbf_ul_ack_exp_ctrl_ack(ul_tbf, poll_fn, pdch->ts_no)) {</span><br><span style="color: hsl(120, 100%, 40%);">+   switch (reason) {</span><br><span style="color: hsl(120, 100%, 40%);">+     case PDCH_ULC_POLL_UL_ACK:</span><br><span style="color: hsl(120, 100%, 40%);">+            ul_tbf = as_ul_tbf(this);</span><br><span style="color: hsl(120, 100%, 40%);">+             OSMO_ASSERT(ul_tbf);</span><br><span style="color: hsl(120, 100%, 40%);">+          if (!tbf_ul_ack_exp_ctrl_ack(ul_tbf, poll_fn, pdch->ts_no)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGPTBF(this, LOGL_NOTICE, "FN=%d, TS=%d (curr FN %d): POLL_UL_ACK not expected!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                poll_fn, pdch->ts_no, bts_current_frame_number(bts));</span><br><span style="color: hsl(120, 100%, 40%);">+                      return;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>            bts_do_rate_ctr_inc(bts, CTR_RLC_ACK_TIMEDOUT);</span><br><span>              bts_do_rate_ctr_inc(bts, CTR_PUAN_POLL_TIMEDOUT);</span><br><span>            if (state_is(TBF_ST_FINISHED)) {</span><br><span>@@ -548,7 +557,15 @@</span><br><span>                      }</span><br><span>            }</span><br><span>            osmo_fsm_inst_dispatch(ul_tbf->ul_ack_fsm.fi, TBF_UL_ACK_EV_POLL_TIMEOUT, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-     } else if (reason == PDCH_ULC_POLL_UL_ASS && ul_ass_state_is(TBF_UL_ASS_WAIT_ACK)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      case PDCH_ULC_POLL_UL_ASS:</span><br><span style="color: hsl(120, 100%, 40%);">+            if (!ul_ass_state_is(TBF_UL_ASS_WAIT_ACK)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGPTBF(this, LOGL_NOTICE, "FN=%d, TS=%d (curr FN %d): POLL_UL_ASS not expected! state is %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                            poll_fn, pdch->ts_no, bts_current_frame_number(bts),</span><br><span style="color: hsl(120, 100%, 40%);">+                               osmo_fsm_inst_state_name(tbf_ul_ass_fi(this)));</span><br><span style="color: hsl(120, 100%, 40%);">+                       return;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>            bts_do_rate_ctr_inc(bts, CTR_RLC_ASS_TIMEDOUT);</span><br><span>              bts_do_rate_ctr_inc(bts, CTR_PUA_POLL_TIMEDOUT);</span><br><span>             if (n_inc(N3105)) {</span><br><span>@@ -559,7 +576,15 @@</span><br><span>           }</span><br><span>            /* Signal timeout to FSM to reschedule UL assignment */</span><br><span>              osmo_fsm_inst_dispatch(this->ul_ass_fsm.fi, TBF_UL_ASS_EV_ASS_POLL_TIMEOUT, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-   } else if (reason == PDCH_ULC_POLL_DL_ASS && dl_ass_state_is(TBF_DL_ASS_WAIT_ACK)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      case PDCH_ULC_POLL_DL_ASS:</span><br><span style="color: hsl(120, 100%, 40%);">+            if (!dl_ass_state_is(TBF_DL_ASS_WAIT_ACK)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGPTBF(this, LOGL_NOTICE, "FN=%d, TS=%d (curr FN %d): POLL_DL_ASS not expected! state is %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                            poll_fn, pdch->ts_no, bts_current_frame_number(bts),</span><br><span style="color: hsl(120, 100%, 40%);">+                               osmo_fsm_inst_state_name(tbf_dl_ass_fi(this)));</span><br><span style="color: hsl(120, 100%, 40%);">+                       return;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>            bts_do_rate_ctr_inc(bts, CTR_RLC_ASS_TIMEDOUT);</span><br><span>              bts_do_rate_ctr_inc(bts, CTR_PDA_POLL_TIMEDOUT);</span><br><span>             if (n_inc(N3105)) {</span><br><span>@@ -570,29 +595,34 @@</span><br><span>          }</span><br><span>            /* Signal timeout to FSM to reschedule DL assignment */</span><br><span>              osmo_fsm_inst_dispatch(this->dl_ass_fsm.fi, TBF_DL_ASS_EV_ASS_POLL_TIMEOUT, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-   } else if (reason == PDCH_ULC_POLL_CELL_CHG_CONTINUE &&</span><br><span style="color: hsl(0, 100%, 40%);">-            m_ms->nacc && nacc_fsm_exp_ctrl_ack(m_ms->nacc, poll_fn, pdch->ts_no)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      case PDCH_ULC_POLL_CELL_CHG_CONTINUE:</span><br><span style="color: hsl(120, 100%, 40%);">+         if (!m_ms->nacc || !nacc_fsm_exp_ctrl_ack(m_ms->nacc, poll_fn, pdch->ts_no)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       LOGPTBF(this, LOGL_NOTICE, "FN=%d, TS=%d (curr FN %d): POLL_CELL_CHG_CONTINUE not expected!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                             poll_fn, pdch->ts_no, bts_current_frame_number(bts));</span><br><span style="color: hsl(120, 100%, 40%);">+                      return;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>            /* Timeout waiting for CTRL ACK acking Pkt Cell Change Continue */</span><br><span>           osmo_fsm_inst_dispatch(m_ms->nacc->fi, NACC_EV_TIMEOUT_CELL_CHG_CONTINUE, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-          return;</span><br><span style="color: hsl(0, 100%, 40%);">- } else if (reason == PDCH_ULC_POLL_DL_ACK) {</span><br><span style="color: hsl(0, 100%, 40%);">-            /* POLL Timeout expecting DL ACK/NACK: implies direction == GPRS_RLCMAC_DL_TBF */</span><br><span style="color: hsl(0, 100%, 40%);">-               gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(this);</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    case PDCH_ULC_POLL_DL_ACK:</span><br><span style="color: hsl(120, 100%, 40%);">+            dl_tbf = as_dl_tbf(this);</span><br><span style="color: hsl(120, 100%, 40%);">+             /* POLL Timeout expecting DL ACK/NACK: implies direction == GPRS_RLCMAC_DL_TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+             OSMO_ASSERT(dl_tbf);</span><br><span>                 if (!(dl_tbf->state_fsm.state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {</span><br><span>                     LOGPTBF(this, LOGL_NOTICE,</span><br><span>                           "Timeout for polling PACKET DOWNLINK ACK: %s\n",</span><br><span>                           tbf_rlcmac_diag(dl_tbf));</span><br><span>                    dl_tbf->state_fsm.state_flags |= (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);</span><br><span>                 }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>            if (dl_tbf->state_is(TBF_ST_RELEASING))</span><br><span>                   bts_do_rate_ctr_inc(bts, CTR_RLC_REL_TIMEDOUT);</span><br><span>              else {</span><br><span>                       bts_do_rate_ctr_inc(bts, CTR_RLC_ACK_TIMEDOUT);</span><br><span>                      bts_do_rate_ctr_inc(bts, CTR_PDAN_POLL_TIMEDOUT);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>            if (dl_tbf->n_inc(N3105)) {</span><br><span>                       osmo_fsm_inst_dispatch(this->state_fsm.fi, TBF_EV_MAX_N3105, NULL);</span><br><span>                       bts_do_rate_ctr_inc(bts, CTR_PDAN_POLL_FAILED);</span><br><span>@@ -601,8 +631,12 @@</span><br><span>               }</span><br><span>            /* resend IMM.ASS on CCCH on timeout */</span><br><span>              osmo_fsm_inst_dispatch(this->state_fsm.fi, TBF_EV_DL_ACKNACK_MISS, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGPTBF(this, LOGL_ERROR, "Poll Timeout, but no event!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      default:</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPTBF(this, LOGL_ERROR, "Poll Timeout, reason %s unhandled!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   get_value_string(pdch_ulc_tbf_poll_reason_names, reason));</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span> }</span><br><span> </span><br><span> int gprs_rlcmac_tbf::setup(int8_t use_trx, bool single_slot)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/25627">change 25627</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-pcu/+/25627"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4c56af70c79c20f1e600371e040bd48bcc908a75 </div>
<div style="display:none"> Gerrit-Change-Number: 25627 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>