Commit cebc5cba authored by Yuchung Cheng's avatar Yuchung Cheng Committed by David S. Miller

net-tcp: retire TFO_SERVER_WO_SOCKOPT2 config

TFO_SERVER_WO_SOCKOPT2 was intended for debugging purposes during
Fast Open development. Remove this config option and also
update/clean-up the documentation of the Fast Open sysctl.
Reported-by: default avatarPiotr Jurkiewicz <piotr.jerzy.jurkiewicz@gmail.com>
Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1345b1ac
...@@ -575,32 +575,33 @@ tcp_syncookies - BOOLEAN ...@@ -575,32 +575,33 @@ tcp_syncookies - BOOLEAN
unconditionally generation of syncookies. unconditionally generation of syncookies.
tcp_fastopen - INTEGER tcp_fastopen - INTEGER
Enable TCP Fast Open feature (draft-ietf-tcpm-fastopen) to send data Enable TCP Fast Open (RFC7413) to send and accept data in the opening
in the opening SYN packet. To use this feature, the client application SYN packet.
must use sendmsg() or sendto() with MSG_FASTOPEN flag rather than
connect() to perform a TCP handshake automatically.
The values (bitmap) are The client support is enabled by flag 0x1 (on by default). The client
1: Enables sending data in the opening SYN on the client w/ MSG_FASTOPEN. then must use sendmsg() or sendto() with the MSG_FASTOPEN flag,
2: Enables TCP Fast Open on the server side, i.e., allowing data in rather than connect() to send data in SYN.
a SYN packet to be accepted and passed to the application before
3-way hand shake finishes.
4: Send data in the opening SYN regardless of cookie availability and
without a cookie option.
0x100: Accept SYN data w/o validating the cookie.
0x200: Accept data-in-SYN w/o any cookie option present.
0x400/0x800: Enable Fast Open on all listeners regardless of the
TCP_FASTOPEN socket option. The two different flags designate two
different ways of setting max_qlen without the TCP_FASTOPEN socket
option.
Default: 1 The server support is enabled by flag 0x2 (off by default). Then
either enable for all listeners with another flag (0x400) or
enable individual listeners via TCP_FASTOPEN socket option with
the option value being the length of the syn-data backlog.
Note that the client & server side Fast Open flags (1 and 2 The values (bitmap) are
respectively) must be also enabled before the rest of flags can take 0x1: (client) enables sending data in the opening SYN on the client.
effect. 0x2: (server) enables the server support, i.e., allowing data in
a SYN packet to be accepted and passed to the
application before 3-way handshake finishes.
0x4: (client) send data in the opening SYN regardless of cookie
availability and without a cookie option.
0x200: (server) accept data-in-SYN w/o any cookie option present.
0x400: (server) enable all listeners to support Fast Open by
default without explicit TCP_FASTOPEN socket option.
Default: 0x1
See include/net/tcp.h and the code for more details. Note that that additional client or server features are only
effective if the basic support (0x1 and 0x2) are enabled respectively.
tcp_syn_retries - INTEGER tcp_syn_retries - INTEGER
Number of times initial SYNs for an active TCP connection attempt Number of times initial SYNs for an active TCP connection attempt
......
...@@ -227,10 +227,9 @@ void tcp_time_wait(struct sock *sk, int state, int timeo); ...@@ -227,10 +227,9 @@ void tcp_time_wait(struct sock *sk, int state, int timeo);
#define TFO_SERVER_COOKIE_NOT_REQD 0x200 #define TFO_SERVER_COOKIE_NOT_REQD 0x200
/* Force enable TFO on all listeners, i.e., not requiring the /* Force enable TFO on all listeners, i.e., not requiring the
* TCP_FASTOPEN socket option. SOCKOPT1/2 determine how to set max_qlen. * TCP_FASTOPEN socket option.
*/ */
#define TFO_SERVER_WO_SOCKOPT1 0x400 #define TFO_SERVER_WO_SOCKOPT1 0x400
#define TFO_SERVER_WO_SOCKOPT2 0x800
extern struct inet_timewait_death_row tcp_death_row; extern struct inet_timewait_death_row tcp_death_row;
......
...@@ -211,24 +211,19 @@ int inet_listen(struct socket *sock, int backlog) ...@@ -211,24 +211,19 @@ int inet_listen(struct socket *sock, int backlog)
* we can only allow the backlog to be adjusted. * we can only allow the backlog to be adjusted.
*/ */
if (old_state != TCP_LISTEN) { if (old_state != TCP_LISTEN) {
/* Check special setups for testing purpose to enable TFO w/o /* Enable TFO w/o requiring TCP_FASTOPEN socket option.
* requiring TCP_FASTOPEN sockopt.
* Note that only TCP sockets (SOCK_STREAM) will reach here. * Note that only TCP sockets (SOCK_STREAM) will reach here.
* Also fastopenq may already been allocated because this * Also fastopen backlog may already been set via the option
* socket was in TCP_LISTEN state previously but was * because the socket was in TCP_LISTEN state previously but
* shutdown() (rather than close()). * was shutdown() rather than close().
*/ */
if ((sysctl_tcp_fastopen & TFO_SERVER_ENABLE) != 0 && if ((sysctl_tcp_fastopen & TFO_SERVER_WO_SOCKOPT1) &&
(sysctl_tcp_fastopen & TFO_SERVER_ENABLE) &&
!inet_csk(sk)->icsk_accept_queue.fastopenq.max_qlen) { !inet_csk(sk)->icsk_accept_queue.fastopenq.max_qlen) {
if ((sysctl_tcp_fastopen & TFO_SERVER_WO_SOCKOPT1) != 0) fastopen_queue_tune(sk, backlog);
fastopen_queue_tune(sk, backlog);
else if ((sysctl_tcp_fastopen &
TFO_SERVER_WO_SOCKOPT2) != 0)
fastopen_queue_tune(sk,
((uint)sysctl_tcp_fastopen) >> 16);
tcp_fastopen_init_key_once(true); tcp_fastopen_init_key_once(true);
} }
err = inet_csk_listen_start(sk, backlog); err = inet_csk_listen_start(sk, backlog);
if (err) if (err)
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment