aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2017-02-02 11:04:56 -0500
committerDavid S. Miller <davem@davemloft.net>2017-02-03 11:19:34 -0500
commit3541f9e8bdebce02458882b66b638d7302c1f616 (patch)
tree1049ef01f68f197e66fa77f18768aaf6d219f8b1 /net/ipv4/tcp_output.c
parentff3edc9b8efc8200c25f3a5adfb1c1de0a882dc5 (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.c14
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