Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 345cda2f authored by Gilad Ben-Yossef's avatar Gilad Ben-Yossef Committed by David S. Miller
Browse files

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: default avatarGilad Ben-Yossef <gilad@codefidence.com>
Sigend-off-by: default avatarOri Finkelman <ori@comsleep.com>
Sigend-off-by: default avatarYony Amit <yony@comsleep.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cda42ebd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -380,6 +380,7 @@ enum
#define RTAX_FEATURE_NO_SACK	0x00000002
#define RTAX_FEATURE_NO_TSTAMP	0x00000004
#define RTAX_FEATURE_ALLFRAG	0x00000008
#define RTAX_FEATURE_NO_WSCALE	0x00000010

struct rta_session
{
+2 −1
Original line number Diff line number Diff line
@@ -3739,7 +3739,8 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
				break;
			case TCPOPT_WINDOW:
				if (opsize == TCPOLEN_WINDOW && th->syn &&
				    !estab && sysctl_tcp_window_scaling) {
				    !estab && sysctl_tcp_window_scaling &&
				    !dst_feature(dst, RTAX_FEATURE_NO_WSCALE)) {
					__u8 snd_wscale = *(__u8 *)ptr;
					opt_rx->wscale_ok = 1;
					if (snd_wscale > 14) {
+4 −2
Original line number Diff line number Diff line
@@ -496,7 +496,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb,
		opts->tsecr = tp->rx_opt.ts_recent;
		size += TCPOLEN_TSTAMP_ALIGNED;
	}
	if (likely(sysctl_tcp_window_scaling)) {
	if (likely(sysctl_tcp_window_scaling &&
		   !dst_feature(dst, RTAX_FEATURE_NO_WSCALE))) {
		opts->ws = tp->rx_opt.rcv_wscale;
		opts->options |= OPTION_WSCALE;
		size += TCPOLEN_WSCALE_ALIGNED;
@@ -2347,7 +2348,8 @@ static void tcp_connect_init(struct sock *sk)
				  tp->advmss - (tp->rx_opt.ts_recent_stamp ? tp->tcp_header_len - sizeof(struct tcphdr) : 0),
				  &tp->rcv_wnd,
				  &tp->window_clamp,
				  sysctl_tcp_window_scaling,
				  (sysctl_tcp_window_scaling &&
				   !dst_feature(dst, RTAX_FEATURE_NO_WSCALE)),
				  &rcv_wscale);

	tp->rx_opt.rcv_wscale = rcv_wscale;