|
|
@ -833,16 +833,18 @@ void rlc_am_nr_tx::handle_control_pdu(uint8_t* payload, uint32_t nof_bytes)
|
|
|
|
range_sn++) {
|
|
|
|
range_sn++) {
|
|
|
|
rlc_status_nack_t nack = {};
|
|
|
|
rlc_status_nack_t nack = {};
|
|
|
|
nack.nack_sn = range_sn;
|
|
|
|
nack.nack_sn = range_sn;
|
|
|
|
if (range_sn == status.nacks[nack_idx].nack_sn) {
|
|
|
|
if (status.nacks[nack_idx].has_so) {
|
|
|
|
// First SN
|
|
|
|
if (range_sn == status.nacks[nack_idx].nack_sn) {
|
|
|
|
nack.has_so = true;
|
|
|
|
// First SN
|
|
|
|
nack.so_start = status.nacks[nack_idx].so_start;
|
|
|
|
nack.has_so = true;
|
|
|
|
nack.so_end = so_end_of_sdu;
|
|
|
|
nack.so_start = status.nacks[nack_idx].so_start;
|
|
|
|
} else if (range_sn == (status.nacks[nack_idx].nack_sn + status.nacks[nack_idx].nack_range - 1)) {
|
|
|
|
nack.so_end = so_end_of_sdu;
|
|
|
|
// Last SN
|
|
|
|
} else if (range_sn == (status.nacks[nack_idx].nack_sn + status.nacks[nack_idx].nack_range - 1)) {
|
|
|
|
nack.has_so = true;
|
|
|
|
// Last SN
|
|
|
|
nack.so_start = 0;
|
|
|
|
nack.has_so = true;
|
|
|
|
nack.so_end = status.nacks[nack_idx].so_end;
|
|
|
|
// 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);
|
|
|
|
handle_nack(nack, retx_sn_set);
|
|
|
|
}
|
|
|
|
}
|
|
|
|