From owner-cvs-all Mon Jan 13 10:54:41 2003 Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 53BED37B401; Mon, 13 Jan 2003 10:54:39 -0800 (PST) Received: from mta5.snfc21.pbi.net (mta5.snfc21.pbi.net [206.13.28.241]) by mx1.FreeBSD.org (Postfix) with ESMTP id F39A443F13; Mon, 13 Jan 2003 10:54:38 -0800 (PST) (envelope-from hsu@FreeBSD.org) Received: from FreeBSD.org ([63.193.112.125]) by mta5.snfc21.pbi.net (iPlanet Messaging Server 5.1 HotFix 1.6 (built Oct 18 2002)) with ESMTP id <0H8O00FKK1V1NA@mta5.snfc21.pbi.net>; Mon, 13 Jan 2003 10:54:37 -0800 (PST) Date: Mon, 13 Jan 2003 10:54:45 -0800 From: Jeffrey Hsu Subject: Re: cvs commit: src/sys/netinet tcp_input.c tcp_seq.h tcp_timer.c tcp_var.h In-reply-to: Message from Jeffrey Hsu "of Mon, 13 Jan 2003 03:01:20 PST." <200301131101.h0DB1Lum021477@repoman.freebsd.org> Cc: cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Message-id: <0H8O00FKL1V1NA@mta5.snfc21.pbi.net> MIME-version: 1.0 X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG > hsu 2003/01/13 03:01:20 PST > > Modified files: > sys/netinet tcp_input.c tcp_seq.h tcp_timer.c > tcp_var.h > Log: > Fix NewReno. > > Reviewed by: Tom Henderson > > Revision Changes Path > 1.187 +44 -41 src/sys/netinet/tcp_input.c > 1.19 +1 -1 src/sys/netinet/tcp_seq.h > 1.56 +2 -5 src/sys/netinet/tcp_timer.c > 1.84 +3 -1 src/sys/netinet/tcp_var.h The state for when we are enter, are in, and leave the NewReno Fast Recovery period has been split out from t_dupacks into its own state variable, snd_high, which has the semantics described in the spec RFC2582, NewReno Modification to TCP's Fast Recovery for the variable call "send_high". Previously, this state was overloaded in the t_dupacks field of the tcpcb. The problem with this is a number of conditions which reset t_dupacks such as data flowing back the other way, window size changes, and re-ordered acks which erroneously kick you out of Fast Recovery mode. The end result is the TCP stack often has to wait for a timeout to retransmit, which would have been avoided if NewReno was working correctly. Tom Henderson has analyzed before and after packet traces and the ones before were very sick. Now, we correctly transition into and out of Fast Recovery, do the correct window adjustments on partial acks, and retransmit when we should. In addition, the variable named "send_high" in the spec has been split out from snd_recover, in order to make the check for more explicit and to detect for sequence wraparound. This new version of the NewReno logic implements what the spec calls the Careful variant of Fast Retransmit, which is the version recommended by the spec. Jeffrey To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message