diff -drupN a/include/net/tcp.h b/include/net/tcp.h --- a/include/net/tcp.h 2018-08-06 17:23:04.000000000 +0300 +++ b/include/net/tcp.h 2022-06-12 05:28:14.000000000 +0300 @@ -271,6 +271,7 @@ extern int sysctl_tcp_autocorking; extern int sysctl_tcp_invalid_ratelimit; extern int sysctl_tcp_pacing_ss_ratio; extern int sysctl_tcp_pacing_ca_ratio; +extern int sysctl_tcp_default_init_rwnd; extern atomic_long_t tcp_memory_allocated; extern struct percpu_counter tcp_sockets_allocated; @@ -401,6 +402,8 @@ int tcp_child_process(struct sock *paren struct sk_buff *skb); void tcp_enter_loss(struct sock *sk); void tcp_clear_retrans(struct tcp_sock *tp); + +#ifdef CONFIG_TCP_METRICS void tcp_update_metrics(struct sock *sk); void tcp_init_metrics(struct sock *sk); void tcp_metrics_init(void); @@ -409,6 +412,38 @@ bool tcp_peer_is_proven(struct request_s bool tcp_remember_stamp(struct sock *sk); bool tcp_tw_remember_stamp(struct inet_timewait_sock *tw); void tcp_fetch_timewait_stamp(struct sock *sk, struct dst_entry *dst); +void tcp_fastopen_cache_set(struct sock *sk, u16 mss, + struct tcp_fastopen_cookie *cookie, bool syn_lost, + u16 try_exp); +/* From tcp_fastopen.c */ +void tcp_fastopen_cache_get(struct sock *sk, u16 *mss, + struct tcp_fastopen_cookie *cookie, int *syn_loss, + unsigned long *last_syn_loss); +#else + +static inline void tcp_update_metrics(struct sock *sk) {} +static inline void tcp_init_metrics(struct sock *sk) {} +static inline void tcp_metrics_init(void) {} +static inline bool tcp_peer_is_proven(struct request_sock *req, + struct dst_entry *dst, + bool paws_check, + bool timestamps) { return false; } +static inline bool tcp_remember_stamp(struct sock *sk) { return false; } +static inline bool +tcp_tw_remember_stamp(struct inet_timewait_sock *tw) { return false; } +static inline void +tcp_fetch_timewait_stamp(struct sock *sk, struct dst_entry *dst) {} + +static inline void tcp_fastopen_cache_set(struct sock *sk, u16 mss, + struct tcp_fastopen_cookie *cookie, bool syn_lost, + u16 try_exp) {} + +/* From tcp_fastopen.c */ +static inline void tcp_fastopen_cache_get(struct sock *sk, u16 *mss, + struct tcp_fastopen_cookie *cookie, int *syn_loss, + unsigned long *last_syn_loss) {} +#endif + void tcp_disable_fack(struct tcp_sock *tp); void tcp_close(struct sock *sk, long timeout); void tcp_init_sock(struct sock *sk); @@ -1003,7 +1038,7 @@ void tcp_rate_skb_sent(struct sock *sk, void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb, struct rate_sample *rs); void tcp_rate_gen(struct sock *sk, u32 delivered, u32 lost, - bool is_sack_reneg, struct skb_mstamp *now, struct rate_sample *rs); + struct skb_mstamp *now, struct rate_sample *rs); void tcp_rate_check_app_limited(struct sock *sk); /* These functions determine how the current flow behaves in respect of SACK @@ -1196,7 +1231,7 @@ static inline void tcp_update_wl(struct static inline __sum16 tcp_v4_check(int len, __be32 saddr, __be32 daddr, __wsum base) { - return csum_tcpudp_magic(saddr,daddr,len,IPPROTO_TCP,base); + return csum_tcpudp_magic(saddr, daddr, len, IPPROTO_TCP, base); } static inline __sum16 __tcp_checksum_complete(struct sk_buff *skb) @@ -1486,13 +1521,6 @@ int tcp_md5_hash_skb_data(struct tcp_md5 int tcp_md5_hash_key(struct tcp_md5sig_pool *hp, const struct tcp_md5sig_key *key); -/* From tcp_fastopen.c */ -void tcp_fastopen_cache_get(struct sock *sk, u16 *mss, - struct tcp_fastopen_cookie *cookie, int *syn_loss, - unsigned long *last_syn_loss); -void tcp_fastopen_cache_set(struct sock *sk, u16 mss, - struct tcp_fastopen_cookie *cookie, bool syn_lost, - u16 try_exp); struct tcp_fastopen_request { /* Fast Open cookie. Size 0 means a cookie request */ struct tcp_fastopen_cookie cookie; @@ -1510,6 +1538,9 @@ struct sock *tcp_try_fastopen(struct soc struct tcp_fastopen_cookie *foc, struct dst_entry *dst); void tcp_fastopen_init_key_once(bool publish); +bool tcp_fastopen_cookie_check(struct sock *sk, u16 *mss, + struct tcp_fastopen_cookie *cookie); +bool tcp_fastopen_defer_connect(struct sock *sk, int *err); #define TCP_FASTOPEN_KEY_LENGTH 16 /* Fastopen key context */