diff options
-rw-r--r-- | include/linux/rtnetlink.h | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 3 | ||||
-rw-r--r-- | net/ipv4/tcp_output.c | 8 |
3 files changed, 9 insertions, 4 deletions
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 9c802a6b04d3..2ab8c758b46c 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -378,7 +378,7 @@ enum | |||
378 | 378 | ||
379 | #define RTAX_FEATURE_ECN 0x00000001 | 379 | #define RTAX_FEATURE_ECN 0x00000001 |
380 | #define RTAX_FEATURE_NO_SACK 0x00000002 | 380 | #define RTAX_FEATURE_NO_SACK 0x00000002 |
381 | #define RTAX_FEATURE_TIMESTAMP 0x00000004 | 381 | #define RTAX_FEATURE_NO_TSTAMP 0x00000004 |
382 | #define RTAX_FEATURE_ALLFRAG 0x00000008 | 382 | #define RTAX_FEATURE_ALLFRAG 0x00000008 |
383 | 383 | ||
384 | struct rta_session | 384 | struct rta_session |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 5fb25f977451..6097491aa9fc 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -3755,7 +3755,8 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx, | |||
3755 | case TCPOPT_TIMESTAMP: | 3755 | case TCPOPT_TIMESTAMP: |
3756 | if ((opsize == TCPOLEN_TIMESTAMP) && | 3756 | if ((opsize == TCPOLEN_TIMESTAMP) && |
3757 | ((estab && opt_rx->tstamp_ok) || | 3757 | ((estab && opt_rx->tstamp_ok) || |
3758 | (!estab && sysctl_tcp_timestamps))) { | 3758 | (!estab && sysctl_tcp_timestamps && |
3759 | !dst_feature(dst, RTAX_FEATURE_NO_TSTAMP)))) { | ||
3759 | opt_rx->saw_tstamp = 1; | 3760 | opt_rx->saw_tstamp = 1; |
3760 | opt_rx->rcv_tsval = get_unaligned_be32(ptr); | 3761 | opt_rx->rcv_tsval = get_unaligned_be32(ptr); |
3761 | opt_rx->rcv_tsecr = get_unaligned_be32(ptr + 4); | 3762 | opt_rx->rcv_tsecr = get_unaligned_be32(ptr + 4); |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index b35802af3c4c..8819eba8ebb8 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -488,7 +488,9 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb, | |||
488 | opts->mss = tcp_advertise_mss(sk); | 488 | opts->mss = tcp_advertise_mss(sk); |
489 | size += TCPOLEN_MSS_ALIGNED; | 489 | size += TCPOLEN_MSS_ALIGNED; |
490 | 490 | ||
491 | if (likely(sysctl_tcp_timestamps && *md5 == NULL)) { | 491 | if (likely(sysctl_tcp_timestamps && |
492 | !dst_feature(dst, RTAX_FEATURE_NO_TSTAMP) && | ||
493 | *md5 == NULL)) { | ||
492 | opts->options |= OPTION_TS; | 494 | opts->options |= OPTION_TS; |
493 | opts->tsval = TCP_SKB_CB(skb)->when; | 495 | opts->tsval = TCP_SKB_CB(skb)->when; |
494 | opts->tsecr = tp->rx_opt.ts_recent; | 496 | opts->tsecr = tp->rx_opt.ts_recent; |
@@ -2317,7 +2319,9 @@ static void tcp_connect_init(struct sock *sk) | |||
2317 | * See tcp_input.c:tcp_rcv_state_process case TCP_SYN_SENT. | 2319 | * See tcp_input.c:tcp_rcv_state_process case TCP_SYN_SENT. |
2318 | */ | 2320 | */ |
2319 | tp->tcp_header_len = sizeof(struct tcphdr) + | 2321 | tp->tcp_header_len = sizeof(struct tcphdr) + |
2320 | (sysctl_tcp_timestamps ? TCPOLEN_TSTAMP_ALIGNED : 0); | 2322 | (sysctl_tcp_timestamps && |
2323 | (!dst_feature(dst, RTAX_FEATURE_NO_TSTAMP) ? | ||
2324 | TCPOLEN_TSTAMP_ALIGNED : 0)); | ||
2321 | 2325 | ||
2322 | #ifdef CONFIG_TCP_MD5SIG | 2326 | #ifdef CONFIG_TCP_MD5SIG |
2323 | if (tp->af_specific->md5_lookup(sk, sk) != NULL) | 2327 | if (tp->af_specific->md5_lookup(sk, sk) != NULL) |