aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorGilad Ben-Yossef <gilad@codefidence.com>2009-10-28 00:15:26 -0400
committerDavid S. Miller <davem@davemloft.net>2009-10-29 04:28:47 -0400
commit345cda2fd695534be5a4494f1b59da9daed33663 (patch)
tree6e4b83512481d25b8e7976a1556c5d848e84a621 /net
parentcda42ebd67ee5fdf09d7057b5a4584d36fe8a335 (diff)
Allow to turn off TCP window scale opt per route
Add and use no window scale bit in the features field. Note that this is not the same as setting a window scale of 0 as would happen with window limit on route. Signed-off-by: Gilad Ben-Yossef <gilad@codefidence.com> Sigend-off-by: Ori Finkelman <ori@comsleep.com> Sigend-off-by: Yony Amit <yony@comsleep.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/tcp_input.c3
-rw-r--r--net/ipv4/tcp_output.c6
2 files changed, 6 insertions, 3 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 6097491aa9fc..393c56921dcb 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3739,7 +3739,8 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
3739 break; 3739 break;
3740 case TCPOPT_WINDOW: 3740 case TCPOPT_WINDOW:
3741 if (opsize == TCPOLEN_WINDOW && th->syn && 3741 if (opsize == TCPOLEN_WINDOW && th->syn &&
3742 !estab && sysctl_tcp_window_scaling) { 3742 !estab && sysctl_tcp_window_scaling &&
3743 !dst_feature(dst, RTAX_FEATURE_NO_WSCALE)) {
3743 __u8 snd_wscale = *(__u8 *)ptr; 3744 __u8 snd_wscale = *(__u8 *)ptr;
3744 opt_rx->wscale_ok = 1; 3745 opt_rx->wscale_ok = 1;
3745 if (snd_wscale > 14) { 3746 if (snd_wscale > 14) {
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 8819eba8ebb8..616c686ca253 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -496,7 +496,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb,
496 opts->tsecr = tp->rx_opt.ts_recent; 496 opts->tsecr = tp->rx_opt.ts_recent;
497 size += TCPOLEN_TSTAMP_ALIGNED; 497 size += TCPOLEN_TSTAMP_ALIGNED;
498 } 498 }
499 if (likely(sysctl_tcp_window_scaling)) { 499 if (likely(sysctl_tcp_window_scaling &&
500 !dst_feature(dst, RTAX_FEATURE_NO_WSCALE))) {
500 opts->ws = tp->rx_opt.rcv_wscale; 501 opts->ws = tp->rx_opt.rcv_wscale;
501 opts->options |= OPTION_WSCALE; 502 opts->options |= OPTION_WSCALE;
502 size += TCPOLEN_WSCALE_ALIGNED; 503 size += TCPOLEN_WSCALE_ALIGNED;
@@ -2347,7 +2348,8 @@ static void tcp_connect_init(struct sock *sk)
2347 tp->advmss - (tp->rx_opt.ts_recent_stamp ? tp->tcp_header_len - sizeof(struct tcphdr) : 0), 2348 tp->advmss - (tp->rx_opt.ts_recent_stamp ? tp->tcp_header_len - sizeof(struct tcphdr) : 0),
2348 &tp->rcv_wnd, 2349 &tp->rcv_wnd,
2349 &tp->window_clamp, 2350 &tp->window_clamp,
2350 sysctl_tcp_window_scaling, 2351 (sysctl_tcp_window_scaling &&
2352 !dst_feature(dst, RTAX_FEATURE_NO_WSCALE)),
2351 &rcv_wscale); 2353 &rcv_wscale);
2352 2354
2353 tp->rx_opt.rcv_wscale = rcv_wscale; 2355 tp->rx_opt.rcv_wscale = rcv_wscale;