lib,rlc_am_nr: fixup rx_next_highest when t-Reassembly exipres

master
Pedro Alvarez 3 years ago
parent 46872a8c84
commit 8e06861113

@ -1415,13 +1415,15 @@ void rlc_am_nr_rx::timer_expired(uint32_t timeout_id)
* - start t-Reassembly; * - start t-Reassembly;
* - set RX_Next_Status_Trigger to RX_Next_Highest. * - set RX_Next_Status_Trigger to RX_Next_Highest.
*/ */
for (uint32_t sn = st.rx_next_status_trigger; rx_mod_base_nr(sn) <= rx_mod_base_nr(st.rx_next_highest); uint32_t sn_upd = {};
sn = (sn + 1) % mod_nr) { for (sn_upd = st.rx_next_status_trigger; rx_mod_base_nr(sn_upd) < rx_mod_base_nr(st.rx_next_highest);
if (not rx_window->has_sn(sn) || (rx_window->has_sn(sn) && not(*rx_window)[sn].fully_received)) { sn_upd = (sn_upd + 1) % mod_nr) {
st.rx_highest_status = sn; if (not rx_window->has_sn(sn_upd) || (rx_window->has_sn(sn_upd) && not(*rx_window)[sn_upd].fully_received)) {
break; break;
} }
} }
st.rx_highest_status = sn_upd;
bool restart_reassembly_timer = false; bool restart_reassembly_timer = false;
if (rx_mod_base_nr(st.rx_next_highest) > rx_mod_base_nr(st.rx_highest_status + 1)) { if (rx_mod_base_nr(st.rx_next_highest) > rx_mod_base_nr(st.rx_highest_status + 1)) {
restart_reassembly_timer = true; restart_reassembly_timer = true;
@ -1443,6 +1445,7 @@ void rlc_am_nr_rx::timer_expired(uint32_t timeout_id)
* triggered, but the STATUS report shall be triggered after RX_Highest_Status is updated. * triggered, but the STATUS report shall be triggered after RX_Highest_Status is updated.
*/ */
do_status = true; do_status = true;
debug_state();
return; return;
} }
} }

Loading…
Cancel
Save