Don't bundle a SACK chunk with a SHUTDOWN chunk if it is not required.

MFC after:	1 week
This commit is contained in:
Michael Tuexen 2016-12-09 17:58:07 +00:00
parent 8d0a31e19c
commit ebecdad811
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=309744

View File

@ -2437,13 +2437,17 @@ sctp_sack_check(struct sctp_tcb *stcb, int was_a_gap)
{
struct sctp_association *asoc;
uint32_t highest_tsn;
int is_a_gap;
sctp_slide_mapping_arrays(stcb);
asoc = &stcb->asoc;
if (SCTP_TSN_GT(asoc->highest_tsn_inside_nr_map, asoc->highest_tsn_inside_map)) {
highest_tsn = asoc->highest_tsn_inside_nr_map;
} else {
highest_tsn = asoc->highest_tsn_inside_map;
}
/* Is there a gap now? */
is_a_gap = SCTP_TSN_GT(highest_tsn, stcb->asoc.cumulative_tsn);
/*
* Now we need to see if we need to queue a sack or just start the
@ -2462,13 +2466,10 @@ sctp_sack_check(struct sctp_tcb *stcb, int was_a_gap)
}
sctp_send_shutdown(stcb,
((stcb->asoc.alternate) ? stcb->asoc.alternate : stcb->asoc.primary_destination));
sctp_send_sack(stcb, SCTP_SO_NOT_LOCKED);
if (is_a_gap) {
sctp_send_sack(stcb, SCTP_SO_NOT_LOCKED);
}
} else {
int is_a_gap;
/* is there a gap now ? */
is_a_gap = SCTP_TSN_GT(highest_tsn, stcb->asoc.cumulative_tsn);
/*
* CMT DAC algorithm: increase number of packets received
* since last ack