Subject: kern/34748: our tcp stack can enter fast recovery due to DSACKs
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <yamt@mwd.biglobe.ne.jp>
List: netbsd-bugs
Date: 10/07/2006 21:45:02
>Number:         34748
>Category:       kern
>Synopsis:       our tcp stack can enter fast recovery due to DSACKs
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Oct 07 21:45:02 +0000 2006
>Originator:     YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
>Release:        NetBSD 4.99.3
>Organization:
	
>Environment:
	
	
System: NetBSD 4.99.3
Architecture: i386
Machine: i386
>Description:
	our tcp stack can treat DSACKs as pure dupacks and enter fast recovery
	erroneously.
>How-To-Repeat:
	code inspection.
>Fix:

Index: netinet/tcp_input.c
===================================================================
--- netinet/tcp_input.c	(revision 1807)
+++ netinet/tcp_input.c	(revision 1808)
@@ -2276,7 +2276,8 @@ after_listen:
 				    th->th_ack != tp->snd_una)
 					tp->t_dupacks = 0;
 				else if (tp->t_partialacks < 0 &&
-					 (++tp->t_dupacks == tcprexmtthresh ||
+					 ((!TCP_SACK_ENABLED(tp) &&
+					 ++tp->t_dupacks == tcprexmtthresh) ||
 					 TCP_FACK_FASTRECOV(tp))) {
 					tcp_seq onxt;
 

>Unformatted: