summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_syncache.c
diff options
context:
space:
mode:
authorandre <andre@FreeBSD.org>2007-02-01 17:39:18 +0000
committerandre <andre@FreeBSD.org>2007-02-01 17:39:18 +0000
commit347b7a6a1eb5fd658f462c27f0394d295e86be21 (patch)
tree997d5976c92bdd0ed0325563e1ec45738a2a3a73 /sys/netinet/tcp_syncache.c
parent4c4dfdea1b2ed220d9b76f87a2295de46745c77c (diff)
downloadFreeBSD-src-347b7a6a1eb5fd658f462c27f0394d295e86be21.zip
FreeBSD-src-347b7a6a1eb5fd658f462c27f0394d295e86be21.tar.gz
Change the way the advertized TCP window scaling is computed. Instead of
upper-bounding it to the size of the initial socket buffer lower-bound it to the smallest MSS we accept. Ideally we'd use the actual MSS information here but it is not available yet. For socket buffer auto sizing to be effective we need room to grow the receive window. The window scale shift is determined at connection setup and can't be changed afterwards. The previous, original, method effectively just did a power of two roundup of the socket buffer size at connection setup severely limiting the headroom for larger socket buffers. Tested by: many (as part of the socket buffer auto sizing patch) MFC after: 1 month
Diffstat (limited to 'sys/netinet/tcp_syncache.c')
-rw-r--r--sys/netinet/tcp_syncache.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c
index b1b209d..84d3c10 100644
--- a/sys/netinet/tcp_syncache.c
+++ b/sys/netinet/tcp_syncache.c
@@ -1014,9 +1014,15 @@ syncache_add(struct in_conninfo *inc, struct tcpopt *to, struct tcphdr *th,
if (to->to_flags & TOF_SCALE) {
int wscale = 0;
- /* Compute proper scaling value from buffer space */
+ /*
+ * Compute proper scaling value from buffer space.
+ * Leave enough room for the socket buffer to grow
+ * with auto sizing. This allows us to scale the
+ * receive buffer over a wide range while not losing
+ * any efficiency or fine granularity.
+ */
while (wscale < TCP_MAX_WINSHIFT &&
- (TCP_MAXWIN << wscale) < sb_hiwat)
+ (0x1 << wscale) < tcp_minmss)
wscale++;
sc->sc_requested_r_scale = wscale;
sc->sc_requested_s_scale = to->to_requested_s_scale;
OpenPOWER on IntegriCloud