Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 May 2010 16:51:44 +0000 (UTC)
From:      Randall Stewart <rrs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r208157 - stable/8/sys/netinet
Message-ID:  <201005161651.o4GGpiaL058895@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rrs
Date: Sun May 16 16:51:44 2010
New Revision: 208157
URL: http://svn.freebsd.org/changeset/base/208157

Log:
  MFC 207983
  
   More PR-SCTP bugs:
     - Make sure that when you kick the streams you add correctly
       using a 16 bit unsigned.
     - Make sure when sending out you allow FWD-TSN to skip over
       and list the ACKED chunks in the stream/seq list (so the
       rcv will kick the stream)

Modified:
  stable/8/sys/netinet/sctp_indata.c
  stable/8/sys/netinet/sctp_output.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/geom/sched/   (props changed)

Modified: stable/8/sys/netinet/sctp_indata.c
==============================================================================
--- stable/8/sys/netinet/sctp_indata.c	Sun May 16 16:50:33 2010	(r208156)
+++ stable/8/sys/netinet/sctp_indata.c	Sun May 16 16:51:44 2010	(r208157)
@@ -3750,7 +3750,8 @@ sctp_try_advance_peer_ack_point(struct s
 		 * the chunk, advance our peer ack point and we can check
 		 * the next chunk.
 		 */
-		if (tp1->sent == SCTP_FORWARD_TSN_SKIP) {
+		if ((tp1->sent == SCTP_FORWARD_TSN_SKIP) ||
+		    (tp1->sent == SCTP_DATAGRAM_ACKED)) {
 			/* advance PeerAckPoint goes forward */
 			if (compare_with_wrap(tp1->rec.data.TSN_seq,
 			    asoc->advanced_peer_ack_point,
@@ -5351,7 +5352,7 @@ sctp_kick_prsctp_reorder_queue(struct sc
 {
 	struct sctp_queued_to_read *ctl, *nctl;
 	struct sctp_association *asoc;
-	int tt;
+	uint16_t tt;
 
 	asoc = &stcb->asoc;
 	tt = strmin->last_sequence_delivered;

Modified: stable/8/sys/netinet/sctp_output.c
==============================================================================
--- stable/8/sys/netinet/sctp_output.c	Sun May 16 16:50:33 2010	(r208156)
+++ stable/8/sys/netinet/sctp_output.c	Sun May 16 16:51:44 2010	(r208157)
@@ -9707,7 +9707,6 @@ send_forward_tsn(struct sctp_tcb *stcb,
 	chk->rec.chunk_id.can_take_data = 0;
 	chk->asoc = asoc;
 	chk->whoTo = NULL;
-
 	chk->data = sctp_get_mbuf_for_msg(MCLBYTES, 0, M_DONTWAIT, 1, MT_DATA);
 	if (chk->data == NULL) {
 		sctp_free_a_chunk(stcb, chk);
@@ -9734,7 +9733,8 @@ sctp_fill_in_rest:
 		unsigned int cnt_of_skipped = 0;
 
 		TAILQ_FOREACH(at, &asoc->sent_queue, sctp_next) {
-			if (at->sent != SCTP_FORWARD_TSN_SKIP) {
+			if ((at->sent != SCTP_FORWARD_TSN_SKIP) &&
+			    (at->sent != SCTP_DATAGRAM_ACKED)) {
 				/* no more to look at */
 				break;
 			}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005161651.o4GGpiaL058895>