pdch: Only release ULC entry if rx ul block matches the expected one

If it doesn't match out expectancies, it means we early return and hence
don't push forward / update whatever state was requested upon receival
of the UL message for the expected TBF. Hence, we shall not remove the
allocated ULC entry: in this scenario we need to keep it so that timeout
procedure times out and the tbf applies whatever measures are required,
be it retransmission, releasing itself, etc.

Change-Id: Ia69a7d92c4b5c98ec71a75605c8dc3a755e63a35
changes/46/25746/1
Pau Espin 1 year ago
parent e080808cfa
commit 0dbf6f2a54
  1. 5
      src/pdch.cpp

@ -343,7 +343,6 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet,
LOGPTBF(tbf, LOGL_DEBUG, "FN=%" PRIu32 " Rx Packet Control Ack (reason=%s)\n",
fn, get_value_string(pdch_ulc_tbf_poll_reason_names, reason));
pdch_ulc_release_fn(ulc, fn);
switch (reason) {
case PDCH_ULC_POLL_UL_ACK:
@ -354,6 +353,7 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet,
fn, ts_no, bts_current_frame_number(tbf->bts));
return;
}
pdch_ulc_release_fn(ulc, fn);
osmo_fsm_inst_dispatch(ul_tbf->ul_ack_fsm.fi, TBF_UL_ACK_EV_RX_CTRL_ACK, NULL);
/* We can free since we only set polling on final UL ACK/NACK */
LOGPTBF(tbf, LOGL_DEBUG, "[UPLINK] END\n");
@ -368,6 +368,7 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet,
return;
}
LOGPTBF(tbf, LOGL_DEBUG, "[DOWNLINK] UPLINK ASSIGNED\n");
pdch_ulc_release_fn(ulc, fn);
/* reset N3105 */
tbf->n_reset(N3105);
osmo_fsm_inst_dispatch(tbf->ul_ass_fsm.fi, TBF_UL_ASS_EV_RX_ASS_CTRL_ACK, NULL);
@ -400,6 +401,7 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet,
return;
}
LOGPTBF(tbf, LOGL_DEBUG, "[UPLINK] DOWNLINK ASSIGNED\n");
pdch_ulc_release_fn(ulc, fn);
/* reset N3105 */
tbf->n_reset(N3105);
osmo_fsm_inst_dispatch(tbf->dl_ass_fsm.fi, TBF_DL_ASS_EV_RX_ASS_CTRL_ACK, NULL);
@ -425,6 +427,7 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet,
fn, ts_no, bts_current_frame_number(tbf->bts));
return;
}
pdch_ulc_release_fn(ulc, fn);
osmo_fsm_inst_dispatch(ms->nacc->fi, NACC_EV_RX_CELL_CHG_CONTINUE_ACK, NULL);
/* Don't assume MS is no longer reachable (hence don't free) after this: TS 44.060
* "When the mobile station receives the PACKET CELL CHANGE ORDER

Loading…
Cancel
Save