• Cedric Roux's avatar
    nr rlc: change retx logic · 3f8c8b73
    Cedric Roux authored
    When t_poll_retransmit expires we need to consider an SDU for
    retransmission.
    
    We used to take the first SDU (which could be a segment, not a full SDU)
    of the wait list and put it in the retransmit list.
    
    When testing with some UE (Amarisoft UE) a bad behavior was detected.
    
    This is what happens for the SDU with SN 6 (for illustration purpose).
    
    The gNB is sending an SDU in several pieces (it is segmented).
    
    slot n:     rlc sn 6 [1 .. 119[   p=0   RECEIVED
    slot n+x:   rlc sn 6 ]120 .. 180[ p=0   RECEIVED
    slot n+x+y: rlc sn 6 ]181 .. 210] p=1   not RECEIVED
    
    Then when t_poll_retransmit expires rlc retransmits only the PDU of
    slot n (with p=1 this time) and the UE replies with ack 6. So nothing
    happens on the gnb side.
    (We would have expected ack 7 + nack 6 181..end.)
    
    Then after t_poll_retransmit expires again rlc retransmits only PDU
    of slot n and the UE still replies with ack 6.
    
    This goes on forever (or some other timeout occurs.)
    
    The logic is now changed.
    
    When t_poll_retransmit expires we transfer all the SDUs in the wait list
    having the same SN as the head of the wait list into the retransmit list.
    
    Testing with Amarisoft UE, it seems to work properly.
    3f8c8b73
nr_rlc_entity_am.c 61 KB