svn commit: r310223 - stable/11/sys/netinet

Michael Tuexen tuexen at FreeBSD.org
Sun Dec 18 13:45:06 UTC 2016


Author: tuexen
Date: Sun Dec 18 13:45:04 2016
New Revision: 310223
URL: https://svnweb.freebsd.org/changeset/base/310223

Log:
  MFC r309744:
  
  Don't bundle a SACK chunk with a SHUTDOWN chunk if it is not required.

Modified:
  stable/11/sys/netinet/sctp_indata.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/netinet/sctp_indata.c
==============================================================================
--- stable/11/sys/netinet/sctp_indata.c	Sun Dec 18 13:13:09 2016	(r310222)
+++ stable/11/sys/netinet/sctp_indata.c	Sun Dec 18 13:45:04 2016	(r310223)
@@ -2437,13 +2437,17 @@ sctp_sack_check(struct sctp_tcb *stcb, i
 {
 	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, i
 		}
 		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


More information about the svn-src-stable-11 mailing list