Date: Mon, 15 Dec 2008 08:11:45 +0000 (UTC) From: Lawrence Stewart <lstewart@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r186123 - projects/tcp_ffcaia2008_8.x/sys/netinet Message-ID: <200812150811.mBF8BjfZ088731@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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<<tp->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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812150811.mBF8BjfZ088731>