aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorGilad Ben-Yossef <gilad@codefidence.com>2009-10-28 00:15:25 -0400
committerDavid S. Miller <davem@davemloft.net>2009-10-29 04:28:45 -0400
commitcda42ebd67ee5fdf09d7057b5a4584d36fe8a335 (patch)
tree22d87e57330911ea34f610c0da5aa7a10fa2e8d9 /net
parent1aba721eba1d84a2defce45b950272cee1e6c72a (diff)
Allow disabling TCP timestamp options per route
Implement querying and acting upon the no timestamp bit in the feature 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>
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/tcp_input.c3
-rw-r--r--net/ipv4/tcp_output.c8
2 files changed, 8 insertions, 3 deletions
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)