diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-05-15 16:40:18 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-05-15 17:03:46 +0200 |
commit | 09afd6f230d05d40fbeae05dc548d71457d7efae (patch) | |
tree | 4cefbb311f6d226ef1c52e343cb42099fd7456c7 /src | |
parent | 97e88fd35f22da6c889e1afaa40dc3f8025f4253 (diff) |
pcu: tbf_ul: Clean up maybe_schedule_uplink_acknack()
Get rid of checking all conditions twice, and update one log message.
Change-Id: I95831991b01961e4b7faddb08d27133acb0ab4d4
Diffstat (limited to 'src')
-rw-r--r-- | src/tbf_ul.cpp | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp index fee9919e..9899580e 100644 --- a/src/tbf_ul.cpp +++ b/src/tbf_ul.cpp @@ -359,37 +359,42 @@ int gprs_rlcmac_ul_tbf::rcv_data_block_acknowledged( void gprs_rlcmac_ul_tbf::maybe_schedule_uplink_acknack( const gprs_rlc_data_info *rlc) { + bool require_ack = false; bool have_ti = rlc->block_info[0].ti || (rlc->num_data_blocks > 1 && rlc->block_info[1].ti); - if (rlc->si || have_ti || state_is(GPRS_RLCMAC_FINISHED) || - (m_rx_counter % SEND_ACK_AFTER_FRAMES) == 0) - { - if (rlc->si) { - LOGPTBFUL(this, LOGL_NOTICE, - "Scheduling Ack/Nack, because MS is stalled.\n"); - } - if (have_ti) { - LOGPTBFUL(this, LOGL_DEBUG, - "Scheduling Ack/Nack, because TLLI is included.\n"); - } - if (state_is(GPRS_RLCMAC_FINISHED)) { - LOGPTBFUL(this, LOGL_DEBUG, - "Scheduling Ack/Nack, because last block has CV==0.\n"); - } - if ((m_rx_counter % SEND_ACK_AFTER_FRAMES) == 0) { - LOGPTBFUL(this, LOGL_DEBUG, - "Scheduling Ack/Nack, because %d frames received.\n", - SEND_ACK_AFTER_FRAMES); - } - if (ul_ack_state_is(GPRS_RLCMAC_UL_ACK_NONE)) { - /* trigger sending at next RTS */ - TBF_SET_ACK_STATE(this, GPRS_RLCMAC_UL_ACK_SEND_ACK); - } else { - /* already triggered */ - LOGPTBFUL(this, LOGL_DEBUG, - "Sending Ack/Nack is already triggered, don't schedule!\n"); - } + if (rlc->si) { + require_ack = true; + LOGPTBFUL(this, LOGL_NOTICE, + "Scheduling Ack/Nack, because MS is stalled.\n"); + } + if (have_ti) { + require_ack = true; + LOGPTBFUL(this, LOGL_DEBUG, + "Scheduling Ack/Nack, because TLLI is included.\n"); + } + if (state_is(GPRS_RLCMAC_FINISHED)) { + require_ack = true; + LOGPTBFUL(this, LOGL_DEBUG, + "Scheduling final Ack/Nack, because all data was received and last block has CV==0.\n"); + } + if ((m_rx_counter % SEND_ACK_AFTER_FRAMES) == 0) { + require_ack = true; + LOGPTBFUL(this, LOGL_DEBUG, + "Scheduling Ack/Nack, because %d frames received.\n", + SEND_ACK_AFTER_FRAMES); + } + + if (!require_ack) + return; + + if (ul_ack_state_is(GPRS_RLCMAC_UL_ACK_NONE)) { + /* trigger sending at next RTS */ + TBF_SET_ACK_STATE(this, GPRS_RLCMAC_UL_ACK_SEND_ACK); + } else { + /* already triggered */ + LOGPTBFUL(this, LOGL_DEBUG, + "Sending Ack/Nack already scheduled, no need to re-schedule\n"); } } |