mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
syncookies: update mss tables
- ipv6 msstab: account for ipv6 header size - ipv4 msstab: add mss for Jumbograms. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
af9b473857
commit
5918e2fb90
@ -138,23 +138,23 @@ static __u32 check_tcp_syn_cookie(__u32 cookie, __be32 saddr, __be32 daddr,
|
||||
}
|
||||
|
||||
/*
|
||||
* This table has to be sorted and terminated with (__u16)-1.
|
||||
* XXX generate a better table.
|
||||
* Unresolved Issues: HIPPI with a 64k MSS is not well supported.
|
||||
* MSS Values are taken from the 2009 paper
|
||||
* 'Measuring TCP Maximum Segment Size' by S. Alcock and R. Nelson:
|
||||
* - values 1440 to 1460 accounted for 80% of observed mss values
|
||||
* - values outside the 536-1460 range are rare (<0.2%).
|
||||
*
|
||||
* Table must be sorted.
|
||||
*/
|
||||
static __u16 const msstab[] = {
|
||||
64 - 1,
|
||||
256 - 1,
|
||||
512 - 1,
|
||||
536 - 1,
|
||||
1024 - 1,
|
||||
1440 - 1,
|
||||
1460 - 1,
|
||||
4312 - 1,
|
||||
(__u16)-1
|
||||
64,
|
||||
512,
|
||||
536,
|
||||
1024,
|
||||
1440,
|
||||
1460,
|
||||
4312,
|
||||
8960,
|
||||
};
|
||||
/* The number doesn't include the -1 terminator */
|
||||
#define NUM_MSS (ARRAY_SIZE(msstab) - 1)
|
||||
|
||||
/*
|
||||
* Generate a syncookie. mssp points to the mss, which is returned
|
||||
@ -169,10 +169,10 @@ __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, __u16 *mssp)
|
||||
|
||||
tcp_synq_overflow(sk);
|
||||
|
||||
/* XXX sort msstab[] by probability? Binary search? */
|
||||
for (mssind = 0; mss > msstab[mssind + 1]; mssind++)
|
||||
;
|
||||
*mssp = msstab[mssind] + 1;
|
||||
for (mssind = ARRAY_SIZE(msstab) - 1; mssind ; mssind--)
|
||||
if (mss >= msstab[mssind])
|
||||
break;
|
||||
*mssp = msstab[mssind];
|
||||
|
||||
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
|
||||
|
||||
@ -202,7 +202,7 @@ static inline int cookie_check(struct sk_buff *skb, __u32 cookie)
|
||||
jiffies / (HZ * 60),
|
||||
COUNTER_TRIES);
|
||||
|
||||
return mssind < NUM_MSS ? msstab[mssind] + 1 : 0;
|
||||
return mssind < ARRAY_SIZE(msstab) ? msstab[mssind] : 0;
|
||||
}
|
||||
|
||||
static inline struct sock *get_cookie_sock(struct sock *sk, struct sk_buff *skb,
|
||||
|
@ -27,28 +27,17 @@ extern __u32 syncookie_secret[2][16-4+SHA_DIGEST_WORDS];
|
||||
#define COOKIEBITS 24 /* Upper bits store count */
|
||||
#define COOKIEMASK (((__u32)1 << COOKIEBITS) - 1)
|
||||
|
||||
/*
|
||||
* This table has to be sorted and terminated with (__u16)-1.
|
||||
* XXX generate a better table.
|
||||
* Unresolved Issues: HIPPI with a 64k MSS is not well supported.
|
||||
*
|
||||
* Taken directly from ipv4 implementation.
|
||||
* Should this list be modified for ipv6 use or is it close enough?
|
||||
* rfc 2460 8.3 suggests mss values 20 bytes less than ipv4 counterpart
|
||||
*/
|
||||
/* Table must be sorted. */
|
||||
static __u16 const msstab[] = {
|
||||
64 - 1,
|
||||
256 - 1,
|
||||
512 - 1,
|
||||
536 - 1,
|
||||
1024 - 1,
|
||||
1440 - 1,
|
||||
1460 - 1,
|
||||
4312 - 1,
|
||||
(__u16)-1
|
||||
64,
|
||||
512,
|
||||
536,
|
||||
1280 - 60,
|
||||
1480 - 60,
|
||||
1500 - 60,
|
||||
4460 - 60,
|
||||
9000 - 60,
|
||||
};
|
||||
/* The number doesn't include the -1 terminator */
|
||||
#define NUM_MSS (ARRAY_SIZE(msstab) - 1)
|
||||
|
||||
/*
|
||||
* This (misnamed) value is the age of syncookie which is permitted.
|
||||
@ -134,9 +123,11 @@ __u32 cookie_v6_init_sequence(struct sock *sk, struct sk_buff *skb, __u16 *mssp)
|
||||
|
||||
tcp_synq_overflow(sk);
|
||||
|
||||
for (mssind = 0; mss > msstab[mssind + 1]; mssind++)
|
||||
;
|
||||
*mssp = msstab[mssind] + 1;
|
||||
for (mssind = ARRAY_SIZE(msstab) - 1; mssind ; mssind--)
|
||||
if (mss >= msstab[mssind])
|
||||
break;
|
||||
|
||||
*mssp = msstab[mssind];
|
||||
|
||||
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
|
||||
|
||||
@ -154,7 +145,7 @@ static inline int cookie_check(struct sk_buff *skb, __u32 cookie)
|
||||
th->source, th->dest, seq,
|
||||
jiffies / (HZ * 60), COUNTER_TRIES);
|
||||
|
||||
return mssind < NUM_MSS ? msstab[mssind] + 1 : 0;
|
||||
return mssind < ARRAY_SIZE(msstab) ? msstab[mssind] : 0;
|
||||
}
|
||||
|
||||
struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
|
||||
|
Loading…
Reference in New Issue
Block a user