|
@@ -1351,8 +1351,8 @@ int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/* Calculate MSS. Not accounting for SACKs here. */
|
|
|
-int tcp_mtu_to_mss(struct sock *sk, int pmtu)
|
|
|
+/* Calculate MSS not accounting any TCP options. */
|
|
|
+static inline int __tcp_mtu_to_mss(struct sock *sk, int pmtu)
|
|
|
{
|
|
|
const struct tcp_sock *tp = tcp_sk(sk);
|
|
|
const struct inet_connection_sock *icsk = inet_csk(sk);
|
|
@@ -1381,13 +1381,17 @@ int tcp_mtu_to_mss(struct sock *sk, int pmtu)
|
|
|
/* Then reserve room for full set of TCP options and 8 bytes of data */
|
|
|
if (mss_now < 48)
|
|
|
mss_now = 48;
|
|
|
-
|
|
|
- /* Now subtract TCP options size, not including SACKs */
|
|
|
- mss_now -= tp->tcp_header_len - sizeof(struct tcphdr);
|
|
|
-
|
|
|
return mss_now;
|
|
|
}
|
|
|
|
|
|
+/* Calculate MSS. Not accounting for SACKs here. */
|
|
|
+int tcp_mtu_to_mss(struct sock *sk, int pmtu)
|
|
|
+{
|
|
|
+ /* Subtract TCP options size, not including SACKs */
|
|
|
+ return __tcp_mtu_to_mss(sk, pmtu) -
|
|
|
+ (tcp_sk(sk)->tcp_header_len - sizeof(struct tcphdr));
|
|
|
+}
|
|
|
+
|
|
|
/* Inverse of above */
|
|
|
int tcp_mss_to_mtu(struct sock *sk, int mss)
|
|
|
{
|
|
@@ -2930,7 +2934,7 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
|
|
|
*/
|
|
|
if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->rx_opt.mss_clamp)
|
|
|
tp->rx_opt.mss_clamp = tp->rx_opt.user_mss;
|
|
|
- space = tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) -
|
|
|
+ space = __tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) -
|
|
|
MAX_TCP_OPTION_SPACE;
|
|
|
|
|
|
syn_data = skb_copy_expand(syn, skb_headroom(syn), space,
|