lib,rlc_am_nr: support also NACK ranges without SO_start/end. Fix for NACK ranges of sizee == 1

This commit is contained in:
Pedro Alvarez 2022-04-28 11:21:36 +01:00
parent 6d8357bee9
commit e01bbb8f79
1 changed files with 12 additions and 10 deletions

View File

@ -833,16 +833,18 @@ void rlc_am_nr_tx::handle_control_pdu(uint8_t* payload, uint32_t nof_bytes)
range_sn++) {
rlc_status_nack_t nack = {};
nack.nack_sn = range_sn;
if (range_sn == status.nacks[nack_idx].nack_sn) {
// First SN
nack.has_so = true;
nack.so_start = status.nacks[nack_idx].so_start;
nack.so_end = so_end_of_sdu;
} else if (range_sn == (status.nacks[nack_idx].nack_sn + status.nacks[nack_idx].nack_range - 1)) {
// Last SN
nack.has_so = true;
nack.so_start = 0;
nack.so_end = status.nacks[nack_idx].so_end;
if (status.nacks[nack_idx].has_so) {
if (range_sn == status.nacks[nack_idx].nack_sn) {
// First SN
nack.has_so = true;
nack.so_start = status.nacks[nack_idx].so_start;
nack.so_end = so_end_of_sdu;
} else if (range_sn == (status.nacks[nack_idx].nack_sn + status.nacks[nack_idx].nack_range - 1)) {
// Last SN
nack.has_so = true;
// This might be first+last item at the same time, so don't change so_start here
nack.so_end = status.nacks[nack_idx].so_end;
}
}
handle_nack(nack, retx_sn_set);
}