Fix a FR bug. When doing PR-SCTP with number rtx
set to a low number. The check for skipping was in the incorrect place. Which meant we would FR chunks we should not. MFC after: 1 Month
This commit is contained in:
parent
e29d4aa6bd
commit
abe15ad66c
@ -3621,19 +3621,6 @@ sctp_strike_gap_ack_chunks(struct sctp_tcb *stcb, struct sctp_association *asoc,
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if ((PR_SCTP_RTX_ENABLED(tp1->flags)) && tp1->sent < SCTP_DATAGRAM_ACKED) {
|
||||
/* Has it been retransmitted tv_sec times? */
|
||||
if (tp1->snd_count > tp1->rec.data.timetodrop.tv_sec) {
|
||||
/* Yes, so drop it */
|
||||
if (tp1->data != NULL) {
|
||||
(void)sctp_release_pr_sctp_chunk(stcb, tp1,
|
||||
(SCTP_RESPONSE_TO_USER_REQ | SCTP_NOTIFY_DATAGRAM_SENT),
|
||||
SCTP_SO_NOT_LOCKED);
|
||||
}
|
||||
tp1 = TAILQ_NEXT(tp1, sctp_next);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (compare_with_wrap(tp1->rec.data.TSN_seq,
|
||||
asoc->this_sack_highest_gap, MAX_TSN)) {
|
||||
@ -3849,6 +3836,25 @@ sctp_strike_gap_ack_chunks(struct sctp_tcb *stcb, struct sctp_association *asoc,
|
||||
/* Increment the count to resend */
|
||||
struct sctp_nets *alt;
|
||||
|
||||
if ((stcb->asoc.peer_supports_prsctp) &&
|
||||
(PR_SCTP_RTX_ENABLED(tp1->flags))) {
|
||||
/*
|
||||
* Has it been retransmitted tv_sec times? -
|
||||
* we store the retran count there.
|
||||
*/
|
||||
if (tp1->snd_count > tp1->rec.data.timetodrop.tv_sec) {
|
||||
/* Yes, so drop it */
|
||||
if (tp1->data != NULL) {
|
||||
(void)sctp_release_pr_sctp_chunk(stcb, tp1,
|
||||
(SCTP_RESPONSE_TO_USER_REQ | SCTP_NOTIFY_DATAGRAM_SENT),
|
||||
SCTP_SO_NOT_LOCKED);
|
||||
}
|
||||
/* Make sure to flag we had a FR */
|
||||
tp1->whoTo->net_ack++;
|
||||
tp1 = TAILQ_NEXT(tp1, sctp_next);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* printf("OK, we are now ready to FR this guy\n"); */
|
||||
if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_FR_LOGGING_ENABLE) {
|
||||
sctp_log_fr(tp1->rec.data.TSN_seq, tp1->snd_count,
|
||||
|
Loading…
x
Reference in New Issue
Block a user