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: Piotr Jurkiewicz <piotr.jerzy.jurkiewicz@gmail.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Yuchung Cheng
2016-08-22 17:17:54 -07:00
committed by David S. Miller
parent 1345b1ac57
commit cebc5cbab4
3 changed files with 32 additions and 37 deletions

View File

@@ -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 client support is enabled by flag 0x1 (on by default). The client
then must use sendmsg() or sendto() with the MSG_FASTOPEN flag,
rather than connect() to send data in SYN.
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.
The values (bitmap) are The values (bitmap) are
1: Enables sending data in the opening SYN on the client w/ MSG_FASTOPEN. 0x1: (client) enables sending data in the opening SYN on the client.
2: Enables TCP Fast Open on the server side, i.e., allowing data in 0x2: (server) enables the server support, i.e., allowing data in
a SYN packet to be accepted and passed to the application before a SYN packet to be accepted and passed to the
3-way hand shake finishes. application before 3-way handshake finishes.
4: Send data in the opening SYN regardless of cookie availability and 0x4: (client) send data in the opening SYN regardless of cookie
without a cookie option. availability and without a cookie option.
0x100: Accept SYN data w/o validating the cookie. 0x200: (server) accept data-in-SYN w/o any cookie option present.
0x200: Accept data-in-SYN w/o any cookie option present. 0x400: (server) enable all listeners to support Fast Open by
0x400/0x800: Enable Fast Open on all listeners regardless of the default without explicit TCP_FASTOPEN socket option.
TCP_FASTOPEN socket option. The two different flags designate two
different ways of setting max_qlen without the TCP_FASTOPEN socket
option.
Default: 1 Default: 0x1
Note that the client & server side Fast Open flags (1 and 2 Note that that additional client or server features are only
respectively) must be also enabled before the rest of flags can take effective if the basic support (0x1 and 0x2) are enabled respectively.
effect.
See include/net/tcp.h and the code for more details.
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

View File

@@ -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;

View File

@@ -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;