|
@@ -9,8 +9,6 @@
|
|
|
#include <net/inetpeer.h>
|
|
|
#include <net/tcp.h>
|
|
|
|
|
|
-int sysctl_tcp_fastopen __read_mostly = TFO_CLIENT_ENABLE;
|
|
|
-
|
|
|
struct tcp_fastopen_context __rcu *tcp_fastopen_ctx;
|
|
|
|
|
|
static DEFINE_SPINLOCK(tcp_fastopen_ctx_lock);
|
|
@@ -279,21 +277,22 @@ struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb,
|
|
|
struct request_sock *req,
|
|
|
struct tcp_fastopen_cookie *foc)
|
|
|
{
|
|
|
- struct tcp_fastopen_cookie valid_foc = { .len = -1 };
|
|
|
bool syn_data = TCP_SKB_CB(skb)->end_seq != TCP_SKB_CB(skb)->seq + 1;
|
|
|
+ int tcp_fastopen = sock_net(sk)->ipv4.sysctl_tcp_fastopen;
|
|
|
+ struct tcp_fastopen_cookie valid_foc = { .len = -1 };
|
|
|
struct sock *child;
|
|
|
|
|
|
if (foc->len == 0) /* Client requests a cookie */
|
|
|
NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPFASTOPENCOOKIEREQD);
|
|
|
|
|
|
- if (!((sysctl_tcp_fastopen & TFO_SERVER_ENABLE) &&
|
|
|
+ if (!((tcp_fastopen & TFO_SERVER_ENABLE) &&
|
|
|
(syn_data || foc->len >= 0) &&
|
|
|
tcp_fastopen_queue_check(sk))) {
|
|
|
foc->len = -1;
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
- if (syn_data && (sysctl_tcp_fastopen & TFO_SERVER_COOKIE_NOT_REQD))
|
|
|
+ if (syn_data && (tcp_fastopen & TFO_SERVER_COOKIE_NOT_REQD))
|
|
|
goto fastopen;
|
|
|
|
|
|
if (foc->len >= 0 && /* Client presents or requests a cookie */
|
|
@@ -347,7 +346,7 @@ bool tcp_fastopen_cookie_check(struct sock *sk, u16 *mss,
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- if (sysctl_tcp_fastopen & TFO_CLIENT_NO_COOKIE) {
|
|
|
+ if (sock_net(sk)->ipv4.sysctl_tcp_fastopen & TFO_CLIENT_NO_COOKIE) {
|
|
|
cookie->len = -1;
|
|
|
return true;
|
|
|
}
|