From owner-freebsd-net@FreeBSD.ORG Sun Jul 24 13:40:24 2005 Return-Path: X-Original-To: freebsd-net@hub.freebsd.org Delivered-To: freebsd-net@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 13C3016A425 for ; Sun, 24 Jul 2005 13:40:24 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id D725843D46 for ; Sun, 24 Jul 2005 13:40:23 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j6ODeN02008662 for ; Sun, 24 Jul 2005 13:40:23 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j6ODeNTj008661; Sun, 24 Jul 2005 13:40:23 GMT (envelope-from gnats) Date: Sun, 24 Jul 2005 13:40:23 GMT Message-Id: <200507241340.j6ODeNTj008661@freefall.freebsd.org> To: freebsd-net@FreeBSD.org From: Pieter de Boer Cc: Subject: Re: kern/82470: FreeBSD advertises wrong window scale in some situations X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Pieter de Boer List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Jul 2005 13:40:24 -0000 The following reply was made to PR kern/82470; it has been noted by GNATS. From: Pieter de Boer To: bug-followup@freebsd.org Cc: Subject: Re: kern/82470: FreeBSD advertises wrong window scale in some situations Date: Sun, 24 Jul 2005 15:39:15 +0200 The following patch seems to fix the problem: diff -u netinet.orig/tcp_syncache.c netinet/tcp_syncache.c --- netinet.orig/tcp_syncache.c Sun Jul 24 15:26:14 2005 +++ netinet/tcp_syncache.c Sun Jul 24 15:26:56 2005 @@ -966,7 +966,7 @@ /* Compute proper scaling value from buffer space */ while (wscale < TCP_MAX_WINSHIFT && - (TCP_MAXWIN << wscale) < so->so_rcv.sb_hiwat) + (TCP_MAXWIN << (wscale + 1)) <= so->so_rcv.sb_hiwat) wscale++; sc->sc_request_r_scale = wscale; sc->sc_requested_s_scale = to->to_requested_s_scale; diff -u netinet.orig/tcp_usrreq.c netinet/tcp_usrreq.c --- netinet.orig/tcp_usrreq.c Sun Jul 24 15:26:14 2005 +++ netinet/tcp_usrreq.c Sun Jul 24 15:26:47 2005 @@ -888,7 +888,7 @@ /* Compute window scaling to request. */ while (tp->request_r_scale < TCP_MAX_WINSHIFT && - (TCP_MAXWIN << tp->request_r_scale) < so->so_rcv.sb_hiwat) + (TCP_MAXWIN << (tp->request_r_scale + 1)) <= so->so_rcv.sb_hiwat) tp->request_r_scale++; soisconnecting(so); @@ -950,7 +950,7 @@ /* Compute window scaling to request. */ while (tp->request_r_scale < TCP_MAX_WINSHIFT && - (TCP_MAXWIN << tp->request_r_scale) < so->so_rcv.sb_hiwat) + (TCP_MAXWIN << (tp->request_r_scale + 1)) <= so->so_rcv.sb_hiwat) tp->request_r_scale++; soisconnecting(so);