From owner-freebsd-net@FreeBSD.ORG Fri Oct 17 17:16:35 2003 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EAA5316A4BF for ; Fri, 17 Oct 2003 17:16:35 -0700 (PDT) Received: from mtiwmhc11.worldnet.att.net (mtiwmhc11.worldnet.att.net [204.127.131.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id F2CCC43FB1 for ; Fri, 17 Oct 2003 17:16:34 -0700 (PDT) (envelope-from cmascott@att.net) Received: from callisto.local (105.cambridge-01rh15rt.ma.dial-access.att.net[12.91.16.105]) by worldnet.att.net (mtiwmhc11) with ESMTP id <20031018001633111006oigke>; Sat, 18 Oct 2003 00:16:33 +0000 Received: from callisto.local (localhost.local [127.0.0.1]) by callisto.local (8.12.8p1/8.12.8) with ESMTP id h9I0GXxf000982; Fri, 17 Oct 2003 20:16:33 -0400 (EDT) (envelope-from cmascott@callisto.local) Received: (from cmascott@localhost) by callisto.local (8.12.8p1/8.12.8/Submit) id h9I0GWQF000981; Fri, 17 Oct 2003 20:16:32 -0400 (EDT) Date: Fri, 17 Oct 2003 20:16:32 -0400 (EDT) From: Carl Mascott Message-Id: <200310180016.h9I0GWQF000981@callisto.local> To: oppermann@pipeline.ch In-Reply-To: <3F9067AD.A6551D07@pipeline.ch> cc: freebsd-net@freebsd.org Subject: Re: TCP window size issues X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Oct 2003 00:16:36 -0000 Here's a case that your logic does not handle correctly. 1. Kernel default buffer size = 32 KB 2. Routing table buffer size = 48 KB 3. Application sets buffer size to 32 KB 4. tcp_mss() selects 48 KB buffer size, giving the routing table precedence over the application. I found it necessary to add a new flag with meaning "the application set my size" to struct sockbuf. I'll e-mail you a copy of my document. Note that I have backed out the patch from PR 11966. You may not want to do this. It depends upon the correct answer to Issue #3 (shrinking the receive window) in my original posting. NOTE: AFAIK, 4.4BSD through FreeBSD 4.6-R seem to have done alright without the PR 11966 patch, but if someone knows different, please speak up. Andre Oppermann wrote: > > The patch in PR11966 has already been applied. It does not fix it. > I've fixed it by redoing this check in tcp_input.c::tcp_mss(): > > if ((bufsize = rt->rt_rmx.rmx_sendpipe) == 0) > bufsize = so->sn_snd.sb_hiwat; > > to: > > if ((so->so_snd.sb_hiwat == tcp_sendspace) && rt->rt_rmx.rmx_sendpipe) > bufsize = rt->rt_rmx.rmx_sendpipe; > else > bufsize = so->so_snd.sb_hiwat; > > > The theory goes that with default buffers so_snd.sb_hiwat and > tcp_sendspace have the same size. If that is actually the case, > we use whatever we've got from the metrics. If not, the user > did some changes and we take that and ignore the metrics value. > This is not yet tested in reality... just theoretical ;-) > > Anyway, I'm interested in your solutions as well. > > Carl Mascott wrote: > > > > Actually I have just fixed it in my copy of 4.8-R. I have a document > > that describes the problem and my solution. I could send you that > > and/or a set of patches. You might want to sketch out your own > > solution before you look at mine, though. Also, I'm not done > > testing mine yet. > > > Carl Mascott wrote: > > > > > > > > 2. The 4.4BSD TCP implementation has never had the correct precedence > > > > rules for setting window sizes. App-set values should take > > > > precedence over all others. Routing table values should take > > > > precedence over kernel default values. The fix for PR 11966 > > > > alters the behavior but still doesn't implement these precedence > > > > rules. > > > > > > I'll fix this in my tcp_hostcache patch currently under review by > > > Sam Leffler and Ruslan Ermilov (however that is for -CURRENT).