mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
cda42ebd67
commit
345cda2fd6
|
@ -380,6 +380,7 @@ enum
|
||||||
#define RTAX_FEATURE_NO_SACK 0x00000002
|
#define RTAX_FEATURE_NO_SACK 0x00000002
|
||||||
#define RTAX_FEATURE_NO_TSTAMP 0x00000004
|
#define RTAX_FEATURE_NO_TSTAMP 0x00000004
|
||||||
#define RTAX_FEATURE_ALLFRAG 0x00000008
|
#define RTAX_FEATURE_ALLFRAG 0x00000008
|
||||||
|
#define RTAX_FEATURE_NO_WSCALE 0x00000010
|
||||||
|
|
||||||
struct rta_session
|
struct rta_session
|
||||||
{
|
{
|
||||||
|
|
|
@ -3739,7 +3739,8 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
|
||||||
break;
|
break;
|
||||||
case TCPOPT_WINDOW:
|
case TCPOPT_WINDOW:
|
||||||
if (opsize == TCPOLEN_WINDOW && th->syn &&
|
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;
|
__u8 snd_wscale = *(__u8 *)ptr;
|
||||||
opt_rx->wscale_ok = 1;
|
opt_rx->wscale_ok = 1;
|
||||||
if (snd_wscale > 14) {
|
if (snd_wscale > 14) {
|
||||||
|
|
|
@ -496,7 +496,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb,
|
||||||
opts->tsecr = tp->rx_opt.ts_recent;
|
opts->tsecr = tp->rx_opt.ts_recent;
|
||||||
size += TCPOLEN_TSTAMP_ALIGNED;
|
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->ws = tp->rx_opt.rcv_wscale;
|
||||||
opts->options |= OPTION_WSCALE;
|
opts->options |= OPTION_WSCALE;
|
||||||
size += TCPOLEN_WSCALE_ALIGNED;
|
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->advmss - (tp->rx_opt.ts_recent_stamp ? tp->tcp_header_len - sizeof(struct tcphdr) : 0),
|
||||||
&tp->rcv_wnd,
|
&tp->rcv_wnd,
|
||||||
&tp->window_clamp,
|
&tp->window_clamp,
|
||||||
sysctl_tcp_window_scaling,
|
(sysctl_tcp_window_scaling &&
|
||||||
|
!dst_feature(dst, RTAX_FEATURE_NO_WSCALE)),
|
||||||
&rcv_wscale);
|
&rcv_wscale);
|
||||||
|
|
||||||
tp->rx_opt.rcv_wscale = rcv_wscale;
|
tp->rx_opt.rcv_wscale = rcv_wscale;
|
||||||
|
|
Loading…
Reference in New Issue