#define RTAX_FEATURE_ECN       0x00000001
 #define RTAX_FEATURE_NO_SACK   0x00000002
-#define RTAX_FEATURE_TIMESTAMP 0x00000004
+#define RTAX_FEATURE_NO_TSTAMP 0x00000004
 #define RTAX_FEATURE_ALLFRAG   0x00000008
 
 struct rta_session
 
                        case TCPOPT_TIMESTAMP:
                                if ((opsize == TCPOLEN_TIMESTAMP) &&
                                    ((estab && opt_rx->tstamp_ok) ||
-                                    (!estab && sysctl_tcp_timestamps))) {
+                                    (!estab && sysctl_tcp_timestamps &&
+                                     !dst_feature(dst, RTAX_FEATURE_NO_TSTAMP)))) {
                                        opt_rx->saw_tstamp = 1;
                                        opt_rx->rcv_tsval = get_unaligned_be32(ptr);
                                        opt_rx->rcv_tsecr = get_unaligned_be32(ptr + 4);
 
        opts->mss = tcp_advertise_mss(sk);
        size += TCPOLEN_MSS_ALIGNED;
 
-       if (likely(sysctl_tcp_timestamps && *md5 == NULL)) {
+       if (likely(sysctl_tcp_timestamps &&
+                  !dst_feature(dst, RTAX_FEATURE_NO_TSTAMP) &&
+                  *md5 == NULL)) {
                opts->options |= OPTION_TS;
                opts->tsval = TCP_SKB_CB(skb)->when;
                opts->tsecr = tp->rx_opt.ts_recent;
         * See tcp_input.c:tcp_rcv_state_process case TCP_SYN_SENT.
         */
        tp->tcp_header_len = sizeof(struct tcphdr) +
-               (sysctl_tcp_timestamps ? TCPOLEN_TSTAMP_ALIGNED : 0);
+               (sysctl_tcp_timestamps &&
+               (!dst_feature(dst, RTAX_FEATURE_NO_TSTAMP) ?
+                 TCPOLEN_TSTAMP_ALIGNED : 0));
 
 #ifdef CONFIG_TCP_MD5SIG
        if (tp->af_specific->md5_lookup(sk, sk) != NULL)