diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2012-07-16 11:56:11 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2012-07-16 11:56:11 +0200 |
commit | f54a89e8813b850f1c92d722db9dc0220c58b70b (patch) | |
tree | b721cfc2341f6487e4020194f7a4e7616c18adcf /src | |
parent | 67e4f2f1fdba2048082311cc08a36d4758427cd3 (diff) |
Change polling interval for Packet Downlink Ack/Nack
This lowers the risk for stalling of transmit window.
Diffstat (limited to 'src')
-rw-r--r-- | src/gprs_rlcmac_data.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/gprs_rlcmac_data.cpp b/src/gprs_rlcmac_data.cpp index 8e195b8c..edb91992 100644 --- a/src/gprs_rlcmac_data.cpp +++ b/src/gprs_rlcmac_data.cpp @@ -22,8 +22,11 @@ #include <gprs_rlcmac.h> #include <pcu_l1_if.h> -/* After receiving these framess, we send ack/nack. */ -#define ACK_AFTER_FRAMES 20 +/* After receiving these frames, we send ack/nack. */ +#define SEND_ACK_AFTER_FRAMES 20 + +/* After sending these frames, we poll for ack/nack. */ +#define POLL_ACK_AFTER_FRAMES 10 /* If acknowledgement to uplink/downlin assignmentshould be polled */ #define POLLING_ASSIGNMENT 0 @@ -717,9 +720,9 @@ int gprs_rlcmac_rcv_data_block_acknowledged(uint8_t trx, uint8_t ts, /* If TLLI is included or if we received half of the window, we send * an ack/nack */ if (rh->si || rh->ti || tbf->state == GPRS_RLCMAC_FINISHED - || (tbf->dir.ul.rx_counter % ACK_AFTER_FRAMES) == 0) { + || (tbf->dir.ul.rx_counter % SEND_ACK_AFTER_FRAMES) == 0) { if (rh->si) { - LOGP(DRLCMACUL, LOGL_DEBUG, "- Scheduling Ack/Nack, " + LOGP(DRLCMACUL, LOGL_NOTICE, "- Scheduling Ack/Nack, " "because MS is stalled.\n"); } if (rh->ti) { @@ -730,10 +733,10 @@ int gprs_rlcmac_rcv_data_block_acknowledged(uint8_t trx, uint8_t ts, LOGP(DRLCMACUL, LOGL_DEBUG, "- Scheduling Ack/Nack, " "because last block has CV==0.\n"); } - if ((tbf->dir.ul.rx_counter % ACK_AFTER_FRAMES) == 0) { + if ((tbf->dir.ul.rx_counter % SEND_ACK_AFTER_FRAMES) == 0) { LOGP(DRLCMACUL, LOGL_DEBUG, "- Scheduling Ack/Nack, " "because %d frames received.\n", - ACK_AFTER_FRAMES); + SEND_ACK_AFTER_FRAMES); } if (tbf->ul_ack_state == GPRS_RLCMAC_UL_ACK_NONE) { /* trigger sending at next RTS */ @@ -1092,8 +1095,8 @@ do_resend: "done.\n"); li->e = 1; /* we cannot extend */ rh->fbi = 1; /* we indicate final block */ - tbf->dir.dl.tx_counter = ACK_AFTER_FRAMES + 1; - /* + 1 indicates: force polling */ + tbf->dir.dl.tx_counter = POLL_ACK_AFTER_FRAMES + 1; + /* + 1 indicates: first final ack */ tbf_new_state(tbf, GPRS_RLCMAC_FINISHED); break; } @@ -1121,17 +1124,18 @@ tx_block: /* Clear Polling, if still set in history buffer */ rh->s_p = 0; - /* poll after ACK_AFTER_FRAMES frames, or when final block is tx. */ - if (tbf->dir.dl.tx_counter >= ACK_AFTER_FRAMES) { - if (tbf->dir.dl.tx_counter > ACK_AFTER_FRAMES) { - /* if rx_counter is ACK_AFTER_FRAMES + 1, this + /* poll after POLL_ACK_AFTER_FRAMES frames, or when final block is tx. + */ + if (tbf->dir.dl.tx_counter >= POLL_ACK_AFTER_FRAMES) { + if (tbf->dir.dl.tx_counter > POLL_ACK_AFTER_FRAMES) { + /* if rx_counter is POLL_ACK_AFTER_FRAMES + 1, this * indicates: poll caused by final ack. */ LOGP(DRLCMACDL, LOGL_DEBUG, "- Scheduling Ack/Nack " "polling, because final block sent.\n"); } else { LOGP(DRLCMACDL, LOGL_DEBUG, "- Scheduling Ack/Nack " "polling, because %d blocks sent.\n", - ACK_AFTER_FRAMES); + POLL_ACK_AFTER_FRAMES); } tbf->dir.dl.tx_counter = 0; /* scheduling not possible, because: */ |