tcp: TCP Fast Open Server - main code path
authorJerry Chu <hkchu@google.com>
Fri, 31 Aug 2012 12:29:13 +0000 (12:29 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 1 Sep 2012 00:02:19 +0000 (20:02 -0400)
commit168a8f58059a22feb9e9a2dcc1b8053dbbbc12ef
tree0d5b9181b840c9b6b08b1452004f0746e8eebab8
parent8336886f786fdacbc19b719c1f7ea91eb70706d4
tcp: TCP Fast Open Server - main code path

This patch adds the main processing path to complete the TFO server
patches.

A TFO request (i.e., SYN+data packet with a TFO cookie option) first
gets processed in tcp_v4_conn_request(). If it passes the various TFO
checks by tcp_fastopen_check(), a child socket will be created right
away to be accepted by applications, rather than waiting for the 3WHS
to finish.

In additon to the use of TFO cookie, a simple max_qlen based scheme
is put in place to fend off spoofed TFO attack.

When a valid ACK comes back to tcp_rcv_state_process(), it will cause
the state of the child socket to switch from either TCP_SYN_RECV to
TCP_ESTABLISHED, or TCP_FIN_WAIT1 to TCP_FIN_WAIT2. At this time
retransmission will resume for any unack'ed (data, FIN,...) segments.

Signed-off-by: H.K. Jerry Chu <hkchu@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c