The necessity of SOstart/SOend was understood after email exchanges with David Breaux <davidbreaux67@gmail.com>. See openair2/LAYER2/rlc_v2/tests/test46.h for some details. Basically if we NACK without SOstart/SOend then the other end of the RLC channel will consider all the bytes as NACKed and will have to resend them all. If another status is then reported before all the bytes are sent, and because we don't use SOstart/SOend this status will NACK all the bytes again, then all the bytes are to be sent again. And the cycle repeats. It will end with a max retx reached (which triggers RLF, Radio Link Failure). The function put_bit in openair2/LAYER2/rlc_v2/rlc_pdu.c has been changed too, maybe introducing some performance issues.
25 lines
653 B
C
25 lines
653 B
C
/*
|
|
* rlc am test function segment_already_received
|
|
* eNB sends SDU [1..900], not received
|
|
* eNB retx with smaller PDUs [1..600] [601..900]
|
|
* [1..600] is received but ACK/NACK not
|
|
* eNB retx with still smaller PDUs [1..400] [401..600] [601..900]
|
|
* all is received, ACKs/NACKs go through
|
|
*/
|
|
TIME, 1,
|
|
ENB_AM, 100000, 100000, 35, 0, 45, -1, -1, 4,
|
|
UE_AM, 100000, 100000, 35, 0, 45, -1, -1, 4,
|
|
UE_RECV_FAILS, 1,
|
|
ENB_RECV_FAILS, 1,
|
|
ENB_SDU, 0, 900,
|
|
TIME, 2,
|
|
ENB_PDU_SIZE, 600,
|
|
UE_RECV_FAILS, 0,
|
|
TIME, 48,
|
|
UE_RECV_FAILS, 1,
|
|
ENB_PDU_SIZE, 400,
|
|
TIME, 90,
|
|
UE_RECV_FAILS, 0,
|
|
ENB_RECV_FAILS, 0,
|
|
TIME, -1
|