ARQ: Automatic Repeat Request
In this procedure, RLC re-transmits RLC PDU or RLC PDU segment according to RLC status report.
RLC sending entity can request RLC status report as needed.
The AM RLC entity provides ACK/NACK to the peer M RLC entity through the STATUS PDU.
An AM RLC entity will send STATUS PDU when 1. Receive Polling from the peer AM RLC entity. 2. Failed to receive AM PDU detected.
Below are the list of Counter and Timer involved in the ARQ process
Counter
PDU_WITHOUT_POLL: It indicates the number of newly transmitted AMD PDU before the most recent poll.
BYTE_WITHOUT_POLL : It indicates the number of bytes of the newly transmitted AMD PDU before the last poll.
RETX_COUNT: It is the re-transmission counter. It will record the number of re-transmission of each RLC SDU or RLC SDU segment.
Timer
t-PollRetransmit: The sender starts after sending polling and stops after receiving STATUS PDU.
t-StatusProhibit: This timer is started after the receiving side send STATUS PDU.
Retransmission
We know in AM mode, ARQ is supported. With the help of below 3 procedures, ARQ is achieved.
1. Retransmission
2. Polling
3. Status reporting
Retransmission: When the receiving side did not receive any packet successfully, it will send NACK to sending entity through STATUS PDU.
The Tx side will re-transmit the failed packet (RLC SDU or RLC SDU segment) based on below conditions:
1. if the SN of the corresponding RLC SDU falls within the range TX_Next_Ack <= SN < = the highest SN of the AMD PDU among the AMD PDUs submitted to lower layer.
It means, TX_Next_Ack points to the next SN that expects to receive ACK. It means all other packets before TX_Next_Ack have received Ack. “the highest SN” points to the largest SN sent by the Tx side.
2. if the RLC SDU or RLC SDU segment is considered for retransmission for the first time:
–> set the RETX_COUNT associated with the RLC SDU to zero
-> else if it is not the first re-transmission, then increment RETX_COUNT. Then when RETX_COUNT = maxRetxThreshold, RLC will indicate upper layer that the max re-transmission has been reached.
When constructing AMD PDU, if the AMD PDU must be inline with MAC layer grant. If it is not, segmentation is necessary.
Polling
AN AM RLC entity can poll its AM RLC peer entity in order to trigger STATUS reporting.
For each new transmission (it should not contain already transmitted RLC SDU), then Tx AM RLC entity will PDU_WITHOUT_POLL + 1, BYTE_WITHOUT_POLL + 1 and when the counter reached the threshold and one of the following condition is met, then Tx wil include a poll in AMD PDU.l
-> if PDU_WITHOUT_POLL >= pollPDU; or
–> if BYTE_WITHOUT_POLL >= pollByte:
To include a poll in AMD PDU, below condition should be met:
1. if both the transmission buffer and the retransmission buffer becomes empty or
2. if no new RLC SDU can be transmitted after the transmission of the AMD PDU
To include a poll in an AMD PDU, the transmitting side of an AM RLC entity shall:
– set the P field of the AMD PDU to “1”;
– set PDU_WITHOUT_POLL to 0;
– set BYTE_WITHOUT_POLL to 0
– start or restart t-PollRetransmit.
Upon Reception of a STATUS report, stop t-PollRetransmit.
Status reporting
An AM RLC entity sends STATUS PDUs to its peer AM RLC entity in order to provide positive and/or negative acknowledgements of RLC SDUs.
Triggers for STATUS reporting:
1. Polling from its peer AM RLC entity
2. if the AMD PDU is to be discarded
3. The receiving side of an AM RLC entity shall trigger a STATUS report when t-Reassembly expires
When a STATUS PDU has been submitted to lower layer, the receiving side of an AM RLC entity shall start t-StatusProhibit.
When constructing STATUS PDU, the AM RLC entity shall:
1. first construct the a STATUS PDU for the RLC SDUs whose SN is in the range RX_Next <= SN <RX_Highest_Status and have not been completely received, in increasing SN order of RLC SDUs and increasing byte segment order within RLC SDUs.
For incomplete reception or reception failure, they are divided into:
1. for an RLC SDU for which no byte segments have been received yet, include in the STATUS PDU a NACK_SN which is set to the SN of the RLC SDU.
2. For a continuous sequence of byte segments of a partly received RLC SDU that have not been received yet, include in the STATUS PDU a set of NACK_SN, SOstart and SOend.
3. For a continuous sequence of RLC SDUs that have not been received yet include in the STATUS PDU a set of NACK_SN and NACK range; a pair of SOstart and SOend.
Source TS 38.322