net-tcp: retire TFO_SERVER_WO_SOCKOPT2 config
authorYuchung Cheng <ycheng@google.com>
Tue, 23 Aug 2016 00:17:54 +0000 (17:17 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Aug 2016 00:01:01 +0000 (17:01 -0700)
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>
Documentation/networking/ip-sysctl.txt
include/net/tcp.h
net/ipv4/af_inet.c

index 9ae929395b24c442e61bb81e07609fbf8c55ffdb..3db8c67d2c8db9bd952c551010805b1f92d8f777 100644 (file)
@@ -575,32 +575,33 @@ tcp_syncookies - BOOLEAN
        unconditionally generation of syncookies.
 
 tcp_fastopen - INTEGER
-       Enable TCP Fast Open feature (draft-ietf-tcpm-fastopen) to send data
-       in the opening SYN packet. To use this feature, the client application
-       must use sendmsg() or sendto() with MSG_FASTOPEN flag rather than
-       connect() to perform a TCP handshake automatically.
+       Enable TCP Fast Open (RFC7413) to send and accept data in the opening
+       SYN packet.
 
-       The values (bitmap) are
-       1: Enables sending data in the opening SYN on the client w/ MSG_FASTOPEN.
-       2: Enables TCP Fast Open on the server side, i.e., allowing data in
-          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.
+       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.
 
-       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
-       respectively) must be also enabled before the rest of flags can take
-       effect.
+       The values (bitmap) are
+         0x1: (client) enables sending data in the opening SYN on the client.
+         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
        Number of times initial SYNs for an active TCP connection attempt
index c00e7d51bb18d77f47ef9fb016ef432f5db4f7be..25d64f6de69e1f639ed1531bf2d2df3f00fd76a2 100644 (file)
@@ -227,10 +227,9 @@ void tcp_time_wait(struct sock *sk, int state, int timeo);
 #define        TFO_SERVER_COOKIE_NOT_REQD      0x200
 
 /* 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_SOCKOPT2  0x800
 
 extern struct inet_timewait_death_row tcp_death_row;
 
index 55513e654d799f39462e06abaf6be4c9b8792595..989a362814a9ccfb994b454da3929d3e3c1c11eb 100644 (file)
@@ -211,24 +211,19 @@ int inet_listen(struct socket *sock, int backlog)
         * we can only allow the backlog to be adjusted.
         */
        if (old_state != TCP_LISTEN) {
-               /* Check special setups for testing purpose to enable TFO w/o
-                * requiring TCP_FASTOPEN sockopt.
+               /* Enable TFO w/o requiring TCP_FASTOPEN socket option.
                 * Note that only TCP sockets (SOCK_STREAM) will reach here.
-                * Also fastopenq may already been allocated because this
-                * socket was in TCP_LISTEN state previously but was
-                * shutdown() (rather than close()).
+                * Also fastopen backlog may already been set via the option
+                * because the socket was in TCP_LISTEN state previously but
+                * 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) {
-                       if ((sysctl_tcp_fastopen & TFO_SERVER_WO_SOCKOPT1) != 0)
-                               fastopen_queue_tune(sk, backlog);
-                       else if ((sysctl_tcp_fastopen &
-                                 TFO_SERVER_WO_SOCKOPT2) != 0)
-                               fastopen_queue_tune(sk,
-                                   ((uint)sysctl_tcp_fastopen) >> 16);
-
+                       fastopen_queue_tune(sk, backlog);
                        tcp_fastopen_init_key_once(true);
                }
+
                err = inet_csk_listen_start(sk, backlog);
                if (err)
                        goto out;