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

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
Loading
Loading
Loading
Loading
+23 −22
Original line number Original line Diff line number Diff line
@@ -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
+1 −2
Original line number Original line Diff line number Diff line
@@ -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;


+8 −13
Original line number Original line Diff line number Diff line
@@ -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;