diff options
author | Eric Dumazet <edumazet@google.com> | 2017-02-02 11:04:56 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-03 11:19:34 -0500 |
commit | 3541f9e8bdebce02458882b66b638d7302c1f616 (patch) | |
tree | 1049ef01f68f197e66fa77f18768aaf6d219f8b1 /net/ipv4/tcp_output.c | |
parent | ff3edc9b8efc8200c25f3a5adfb1c1de0a882dc5 (diff) |
tcp: add tcp_mss_clamp() helper
Small cleanup factorizing code doing the TCP_MAXSEG clamping.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 6d5bab8a3ea6..956bea9a5394 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -3062,7 +3062,6 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst, | |||
3062 | struct sk_buff *skb; | 3062 | struct sk_buff *skb; |
3063 | int tcp_header_size; | 3063 | int tcp_header_size; |
3064 | struct tcphdr *th; | 3064 | struct tcphdr *th; |
3065 | u16 user_mss; | ||
3066 | int mss; | 3065 | int mss; |
3067 | 3066 | ||
3068 | skb = alloc_skb(MAX_TCP_HEADER, GFP_ATOMIC); | 3067 | skb = alloc_skb(MAX_TCP_HEADER, GFP_ATOMIC); |
@@ -3092,10 +3091,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst, | |||
3092 | } | 3091 | } |
3093 | skb_dst_set(skb, dst); | 3092 | skb_dst_set(skb, dst); |
3094 | 3093 | ||
3095 | mss = dst_metric_advmss(dst); | 3094 | mss = tcp_mss_clamp(tp, dst_metric_advmss(dst)); |
3096 | user_mss = READ_ONCE(tp->rx_opt.user_mss); | ||
3097 | if (user_mss && user_mss < mss) | ||
3098 | mss = user_mss; | ||
3099 | 3095 | ||
3100 | memset(&opts, 0, sizeof(opts)); | 3096 | memset(&opts, 0, sizeof(opts)); |
3101 | #ifdef CONFIG_SYN_COOKIES | 3097 | #ifdef CONFIG_SYN_COOKIES |
@@ -3201,9 +3197,7 @@ static void tcp_connect_init(struct sock *sk) | |||
3201 | 3197 | ||
3202 | if (!tp->window_clamp) | 3198 | if (!tp->window_clamp) |
3203 | tp->window_clamp = dst_metric(dst, RTAX_WINDOW); | 3199 | tp->window_clamp = dst_metric(dst, RTAX_WINDOW); |
3204 | tp->advmss = dst_metric_advmss(dst); | 3200 | tp->advmss = tcp_mss_clamp(tp, dst_metric_advmss(dst)); |
3205 | if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->advmss) | ||
3206 | tp->advmss = tp->rx_opt.user_mss; | ||
3207 | 3201 | ||
3208 | tcp_initialize_rcv_mss(sk); | 3202 | tcp_initialize_rcv_mss(sk); |
3209 | 3203 | ||
@@ -3280,8 +3274,8 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn) | |||
3280 | * user-MSS. Reserve maximum option space for middleboxes that add | 3274 | * user-MSS. Reserve maximum option space for middleboxes that add |
3281 | * private TCP options. The cost is reduced data space in SYN :( | 3275 | * private TCP options. The cost is reduced data space in SYN :( |
3282 | */ | 3276 | */ |
3283 | if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->rx_opt.mss_clamp) | 3277 | tp->rx_opt.mss_clamp = tcp_mss_clamp(tp, tp->rx_opt.mss_clamp); |
3284 | tp->rx_opt.mss_clamp = tp->rx_opt.user_mss; | 3278 | |
3285 | space = __tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) - | 3279 | space = __tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) - |
3286 | MAX_TCP_OPTION_SPACE; | 3280 | MAX_TCP_OPTION_SPACE; |
3287 | 3281 | ||