aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-05-15 16:40:18 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2020-05-15 17:03:46 +0200
commit09afd6f230d05d40fbeae05dc548d71457d7efae (patch)
tree4cefbb311f6d226ef1c52e343cb42099fd7456c7 /src
parent97e88fd35f22da6c889e1afaa40dc3f8025f4253 (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.cpp61
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");
}
}