From owner-svn-src-projects@FreeBSD.ORG Mon Dec 15 08:11:46 2008 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1E39E1065673; Mon, 15 Dec 2008 08:11:46 +0000 (UTC) (envelope-from lstewart@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0D04D8FC17; Mon, 15 Dec 2008 08:11:46 +0000 (UTC) (envelope-from lstewart@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mBF8BjDW088733; Mon, 15 Dec 2008 08:11:45 GMT (envelope-from lstewart@svn.freebsd.org) Received: (from lstewart@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mBF8BjfZ088731; Mon, 15 Dec 2008 08:11:45 GMT (envelope-from lstewart@svn.freebsd.org) Message-Id: <200812150811.mBF8BjfZ088731@svn.freebsd.org> From: Lawrence Stewart Date: Mon, 15 Dec 2008 08:11:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r186123 - projects/tcp_ffcaia2008_8.x/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Dec 2008 08:11:46 -0000 Author: lstewart Date: Mon Dec 15 08:11:45 2008 New Revision: 186123 URL: http://svn.freebsd.org/changeset/base/186123 Log: Work on adding appropriate byte counting (RFC 3465) support to TCP. Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c projects/tcp_ffcaia2008_8.x/sys/netinet/vinet.h Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c ============================================================================== --- projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c Mon Dec 15 07:51:59 2008 (r186122) +++ projects/tcp_ffcaia2008_8.x/sys/netinet/tcp_input.c Mon Dec 15 08:11:45 2008 (r186123) @@ -130,6 +130,15 @@ SYSCTL_V_INT(V_NET, vnet_inet, _net_inet tcp_do_rfc3390, 0, "Enable RFC 3390 (Increasing TCP's Initial Congestion Window)"); +static int tcp_do_rfc3465 = 1; +static int tcp_abc_l_var = 1; +SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_tcp, OID_AUTO, rfc3465, CTLFLAG_RW, + tcp_do_rfc3465, 0, + "Enable RFC 3465 (Appropriate Byte Counting)"); +SYSCTL_V_INT(V_NET, vnet_inet, _net_inet_tcp, OID_AUTO, abc_l_var, CTLFLAG_RW, + tcp_abc_l_var, 1, + "Max # segments)"); + int tcp_do_ecn = 0; int tcp_ecn_maxretries = 1; SYSCTL_NODE(_net_inet_tcp, OID_AUTO, ecn, CTLFLAG_RW, 0, "TCP ECN"); @@ -2113,7 +2122,10 @@ process_ACK: !IN_FASTRECOVERY(tp)) { u_int cw = tp->snd_cwnd; u_int incr = tp->t_maxseg; - if (cw > tp->snd_ssthresh) + if (V_tcp_do_rfc3465) + incr = min(acked, + V_tcp_abc_l_var * tp->t_maxseg); + else if (cw > tp->snd_ssthresh) incr = max((incr * incr / cw), 1); tp->snd_cwnd = min(cw+incr, TCP_MAXWIN<snd_scale); } Modified: projects/tcp_ffcaia2008_8.x/sys/netinet/vinet.h ============================================================================== --- projects/tcp_ffcaia2008_8.x/sys/netinet/vinet.h Mon Dec 15 07:51:59 2008 (r186122) +++ projects/tcp_ffcaia2008_8.x/sys/netinet/vinet.h Mon Dec 15 08:11:45 2008 (r186123) @@ -124,6 +124,8 @@ struct vnet_inet { int _drop_synfin; int _tcp_do_rfc3042; int _tcp_do_rfc3390; + int _tcp_do_rfc3465; + int _tcp_abc_l_var int _tcp_do_ecn; int _tcp_ecn_maxretries; int _tcp_insecure_rst; @@ -284,6 +286,7 @@ struct vnet_inet { #define V_subnetsarelocal VNET_INET(subnetsarelocal) #define V_tcb VNET_INET(tcb) #define V_tcbinfo VNET_INET(tcbinfo) +#define V_tcp_abc_l_var VNET_INET(tcp_abc_l_var) #define V_tcp_autorcvbuf_inc VNET_INET(tcp_autorcvbuf_inc) #define V_tcp_autorcvbuf_max VNET_INET(tcp_autorcvbuf_max) #define V_tcp_autosndbuf_inc VNET_INET(tcp_autosndbuf_inc) @@ -296,6 +299,7 @@ struct vnet_inet { #define V_tcp_do_rfc1323 VNET_INET(tcp_do_rfc1323) #define V_tcp_do_rfc3042 VNET_INET(tcp_do_rfc3042) #define V_tcp_do_rfc3390 VNET_INET(tcp_do_rfc3390) +#define V_tcp_do_rfc3465 VNET_INET(tcp_do_rfc3465) #define V_tcp_do_sack VNET_INET(tcp_do_sack) #define V_tcp_do_tso VNET_INET(tcp_do_tso) #define V_tcp_ecn_maxretries VNET_INET(tcp_ecn_maxretries)