在RLC的发送端维护着一个发送窗口:
(1),send
If(VT(A)<= receive_sn<=VT(MS))
{
VT(S)=receive_sn+1,
PDU_WITHOUT_POLL++;
BYTE_WITHOUT_POLL+= bytes of AMD PDU;
If( PDU_WITHOUT_POLL>= config_pollPDU) ||
(BYTE_WITHOUT_POLL >= conmfig_pollByte))
{
If (send_buffer & retransmit buffer isempty)||
(no new data send)
{
Set rlc dat pdu P =1;
PDU_WITHOUT_POLL = 0;
BYTE_WITHOUT_POLL = 0;
}
}
Send AMD pdu tomac layer;
Poll_sn= VT(S)-1;
If t-PollRetransmitnot start
Start PollRetransmit
Else
Restart PollRetransmit
}
Else
Discard pdu
End
(2),receive status PDU(ARQ)
If receive nack for SN
{
If(VT(A)<=SN<=VT(S))
if (RETX_COUNT >= maxRetxThreshold)
tell up layer “reach maxthreshold”
return;
RETX_COUNT++;
If ulgrarnt > pdu size
Send pdu to mac
Else
Send ulgrant size part pdu to mac
Set P filed;
PDU_WITHOUT_POLL= 0;
BYTE_WITHOUT_POLL = 0;
Poll_sn= VT(S)-1;
If t-PollRetransmit not start
Start PollRetransmit
Else
Restart PollRetransmit
}
(3), PollRetransmittimeout
If (send_buffer& retransmit buffer is empty)||
(no new data send)
{
Set rlc dat pdu P =1;
PDU_WITHOUT_POLL = 0;
BYTE_WITHOUT_POLL = 0;
Poll_sn= VT(S)-1;
Retansmit sn=vt(s)-1的未收到ack的pdu
}