Subject: Re: updates to syncookies - timestamps not needed any more (freebsd)

From: Florian Westphal <[email-masked]>
Date: Fri, 12 Jul 2013 16:25:21 +0200

Eric Dumazet <[email-masked]> wrote:
> On Fri, 2013-07-12 at 10:41 +0200, Florian Westphal wrote:
> 
> > The main difference to what linux does is to avoid encoding the 'count'
> > value (Linux doesn't reseed secret[], and relies on count to detect old
> > cookies).
> > 
> > Not having the counter frees up space to encode tcp options in the cookie
> > instead of the timestamp.
> 
> But still wscale and sack options are disabled.

Yes, in Linux sack and wscale will be encoded in the timestamp, as
cookie is already restricted to 24 bits due to counter.

Without the counter, that could be changed to allow sack/wscale even
with ts off.

> BTW, following patch allows to test more easily syncookies behavior.
> 
> If sysctl_tcp_syncookies is set to 2, we always use syncookies.

I think this change would be useful.

> --- a/net/ipv4/tcp_ipv4.c
> +++ b/net/ipv4/tcp_ipv4.c
> @@ -1462,7 +1462,8 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
>  	 * limitations, they conserve resources and peer is
>  	 * evidently real one.
>  	 */
> -	if (inet_csk_reqsk_queue_is_full(sk) && !isn) {
> +	if ((sysctl_tcp_syncookies == 2 ||
> +	     inet_csk_reqsk_queue_is_full(sk)) && !isn) {
>  		want_cookie = tcp_syn_flood_action(sk, skb, "TCP");
>  		if (!want_cookie)