aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/syncookies.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2010-06-02 20:43:57 -0400
committerDavid S. Miller <davem@davemloft.net>2010-06-05 05:23:15 -0400
commit5918e2fb9035b35164002c3a268feaf70b7c04d5 (patch)
tree3a785e4b13971d9b9e9098a339ad005364949852 /net/ipv4/syncookies.c
parentaf9b4738574b46025de7ccbe75c7b24fd8914379 (diff)
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>
Diffstat (limited to 'net/ipv4/syncookies.c')
-rw-r--r--net/ipv4/syncookies.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
index c9dac8615958..a7cbcc4b726b 100644
--- a/net/ipv4/syncookies.c
+++ b/net/ipv4/syncookies.c
@@ -138,23 +138,23 @@ static __u32 check_tcp_syn_cookie(__u32 cookie, __be32 saddr, __be32 daddr,
138} 138}
139 139
140/* 140/*
141 * This table has to be sorted and terminated with (__u16)-1. 141 * MSS Values are taken from the 2009 paper
142 * XXX generate a better table. 142 * 'Measuring TCP Maximum Segment Size' by S. Alcock and R. Nelson:
143 * Unresolved Issues: HIPPI with a 64k MSS is not well supported. 143 * - values 1440 to 1460 accounted for 80% of observed mss values
144 * - values outside the 536-1460 range are rare (<0.2%).
145 *
146 * Table must be sorted.
144 */ 147 */
145static __u16 const msstab[] = { 148static __u16 const msstab[] = {
146 64 - 1, 149 64,
147 256 - 1, 150 512,
148 512 - 1, 151 536,
149 536 - 1, 152 1024,
150 1024 - 1, 153 1440,
151 1440 - 1, 154 1460,
152 1460 - 1, 155 4312,
153 4312 - 1, 156 8960,
154 (__u16)-1
155}; 157};
156/* The number doesn't include the -1 terminator */
157#define NUM_MSS (ARRAY_SIZE(msstab) - 1)
158 158
159/* 159/*
160 * Generate a syncookie. mssp points to the mss, which is returned 160 * 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)
169 169
170 tcp_synq_overflow(sk); 170 tcp_synq_overflow(sk);
171 171
172 /* XXX sort msstab[] by probability? Binary search? */ 172 for (mssind = ARRAY_SIZE(msstab) - 1; mssind ; mssind--)
173 for (mssind = 0; mss > msstab[mssind + 1]; mssind++) 173 if (mss >= msstab[mssind])
174 ; 174 break;
175 *mssp = msstab[mssind] + 1; 175 *mssp = msstab[mssind];
176 176
177 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT); 177 NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
178 178
@@ -202,7 +202,7 @@ static inline int cookie_check(struct sk_buff *skb, __u32 cookie)
202 jiffies / (HZ * 60), 202 jiffies / (HZ * 60),
203 COUNTER_TRIES); 203 COUNTER_TRIES);
204 204
205 return mssind < NUM_MSS ? msstab[mssind] + 1 : 0; 205 return mssind < ARRAY_SIZE(msstab) ? msstab[mssind] : 0;
206} 206}
207 207
208static inline struct sock *get_cookie_sock(struct sock *sk, struct sk_buff *skb, 208static inline struct sock *get_cookie_sock(struct sock *sk, struct sk_buff *skb,