diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index e76d3b2..8c74bec 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -435,6 +435,7 @@ enum NET_TCP_ALLOWED_CONG_CONTROL=123, NET_TCP_MAX_SSTHRESH=124, NET_TCP_FRTO_RESPONSE=125, + NET_TCP_COOKIE_SIZE=126, }; enum { diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 4710d21..e6174c9 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -340,6 +340,16 @@ static struct ctl_table ipv4_table[] = { .proc_handler = proc_dointvec_jiffies, .strategy = sysctl_jiffies }, +#ifdef CONFIG_TCP_OPT_COOKIE_EXTENSION + { + .ctl_name = NET_TCP_COOKIE_SIZE, + .procname = "tcp_cookie_size", + .data = &sysctl_tcp_cookie_size, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec + }, +#endif #ifdef CONFIG_SYN_COOKIES { .ctl_name = NET_TCP_SYNCOOKIES, diff --git a/include/net/tcp.h b/include/net/tcp.h index 56b7602..a53b2a8 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -208,6 +214,7 @@ extern int sysctl_tcp_synack_retries; extern int sysctl_tcp_retries1; extern int sysctl_tcp_retries2; extern int sysctl_tcp_orphan_retries; +extern int sysctl_tcp_cookie_size; extern int sysctl_tcp_syncookies; extern int sysctl_tcp_retrans_collapse; extern int sysctl_tcp_stdurg; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 5200aab..afbdc30 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -59,6 +59,14 @@ int sysctl_tcp_base_mss __read_mostly = 512; /* By default, RFC2861 behavior. */ int sysctl_tcp_slow_start_after_idle __read_mostly = 1; +#ifdef CONFIG_SYSCTL +/* By default, let the user enable it. */ +int sysctl_tcp_cookie_size __read_mostly = 0; +#else +int sysctl_tcp_cookie_size __read_mostly = TCP_COOKIE_MAX; +#endif + + /* Account for new data that has been sent to the network. */ static void tcp_event_new_data_sent(struct sock *sk, struct sk_buff *skb) {