Re: [PATCH 1/3] tcp: TCP Fast Open Server - header & support functions
From: Eric Dumazet <hidden>
Date: 2012-08-31 14:22:48
On Thu, 2012-08-30 at 16:39 -0700, H.K. Jerry Chu wrote:
From: Jerry Chu <redacted> This patch adds all the necessary data structure and support functions to implement TFO server side. It also documents a number of flags for the sysctl_tcp_fastopen knob, and adds a few Linux extension MIBs. In addition, it includes the following: 1. a new TCP_FASTOPEN socket option an application must call to supply a max backlog allowed in order to enable TFO on its listener. 2. A number of key data structures: "fastopen_rsk" in tcp_sock - for a big socket to access its request_sock for retransmission and ack processing purpose. It is non-NULL iff 3WHS not completed. "fastopenq" in request_sock_queue - points to a per Fast Open listener data structure "fastopen_queue" to keep track of qlen (# of outstanding Fast Open requests) and max_qlen, among other things. "listener" in tcp_request_sock - to point to the original listener for book-keeping purpose, i.e., to maintain qlen against max_qlen as part of defense against IP spoofing attack. 3. various data structure and functions, many in tcp_fastopen.c, to support server side Fast Open cookie operations, including /proc/sys/net/ipv4/tcp_fastopen_key to allow manual rekeying. Signed-off-by: H.K. Jerry Chu <redacted> Cc: Yuchung Cheng <redacted> Cc: Neal Cardwell <ncardwell@google.com> Cc: Eric Dumazet <edumazet@google.com> Cc: Tom Herbert <redacted> --- Documentation/networking/ip-sysctl.txt | 29 ++++++++--- include/linux/snmp.h | 4 ++ include/linux/tcp.h | 45 ++++++++++++++++- include/net/request_sock.h | 36 ++++++++++++++ include/net/tcp.h | 46 +++++++++++++++--- net/ipv4/proc.c | 4 ++ net/ipv4/sysctl_net_ipv4.c | 45 +++++++++++++++++ net/ipv4/tcp_fastopen.c | 83 +++++++++++++++++++++++++++++++- net/ipv4/tcp_input.c | 4 +- 9 files changed, 276 insertions(+), 20 deletions(-)
There are two very small points that can be addressed later, or in next
iteration if there is one.
static inline bool fastopen_cookie_present(struct tcp_fastopen_cookie *foc)
{
return (foc)->len != -1;
}
should be :
static inline bool fastopen_cookie_present(const struct tcp_fastopen_cookie *foc)
{
return foc->len != -1;
}
And we should add a BUILD_BUG_ON(TCP_FASTOPEN_KEY_LENGTH != 4*sizeof(u32));
in proc_tcp_fastopen_key().
Acked-by: Eric Dumazet <edumazet@google.com>