Commit 1aba721eba1d84a2defce45b950272cee1e6c72a
Committed by
David S. Miller
1 parent
0c3adfb8ec
Exists in
master
and in
20 other branches
Add the no SACK route option feature
Implement querying and acting upon the no sack bit in the features field. 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>
Showing 3 changed files with 6 additions and 3 deletions Side-by-side Diff
include/linux/rtnetlink.h
... | ... | @@ -377,7 +377,7 @@ |
377 | 377 | #define RTAX_MAX (__RTAX_MAX - 1) |
378 | 378 | |
379 | 379 | #define RTAX_FEATURE_ECN 0x00000001 |
380 | -#define RTAX_FEATURE_SACK 0x00000002 | |
380 | +#define RTAX_FEATURE_NO_SACK 0x00000002 | |
381 | 381 | #define RTAX_FEATURE_TIMESTAMP 0x00000004 |
382 | 382 | #define RTAX_FEATURE_ALLFRAG 0x00000008 |
383 | 383 |
net/ipv4/tcp_input.c
... | ... | @@ -3763,7 +3763,8 @@ |
3763 | 3763 | break; |
3764 | 3764 | case TCPOPT_SACK_PERM: |
3765 | 3765 | if (opsize == TCPOLEN_SACK_PERM && th->syn && |
3766 | - !estab && sysctl_tcp_sack) { | |
3766 | + !estab && sysctl_tcp_sack && | |
3767 | + !dst_feature(dst, RTAX_FEATURE_NO_SACK)) { | |
3767 | 3768 | opt_rx->sack_ok = 1; |
3768 | 3769 | tcp_sack_reset(opt_rx); |
3769 | 3770 | } |
net/ipv4/tcp_output.c
... | ... | @@ -464,6 +464,7 @@ |
464 | 464 | struct tcp_md5sig_key **md5) { |
465 | 465 | struct tcp_sock *tp = tcp_sk(sk); |
466 | 466 | unsigned size = 0; |
467 | + struct dst_entry *dst = __sk_dst_get(sk); | |
467 | 468 | |
468 | 469 | #ifdef CONFIG_TCP_MD5SIG |
469 | 470 | *md5 = tp->af_specific->md5_lookup(sk, sk); |
... | ... | @@ -498,7 +499,8 @@ |
498 | 499 | opts->options |= OPTION_WSCALE; |
499 | 500 | size += TCPOLEN_WSCALE_ALIGNED; |
500 | 501 | } |
501 | - if (likely(sysctl_tcp_sack)) { | |
502 | + if (likely(sysctl_tcp_sack && | |
503 | + !dst_feature(dst, RTAX_FEATURE_NO_SACK))) { | |
502 | 504 | opts->options |= OPTION_SACK_ADVERTISE; |
503 | 505 | if (unlikely(!(OPTION_TS & opts->options))) |
504 | 506 | size += TCPOLEN_SACKPERM_ALIGNED; |