Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * INET     An implementation of the TCP/IP protocol suite for the LINUX
0004  *      operating system.  INET is implemented using the  BSD Socket
0005  *      interface as the means of communication with the user level.
0006  *
0007  *      Definitions for the TCP module.
0008  *
0009  * Version: @(#)tcp.h   1.0.5   05/23/93
0010  *
0011  * Authors: Ross Biro
0012  *      Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
0013  */
0014 #ifndef _TCP_H
0015 #define _TCP_H
0016 
0017 #define FASTRETRANS_DEBUG 1
0018 
0019 #include <linux/list.h>
0020 #include <linux/tcp.h>
0021 #include <linux/bug.h>
0022 #include <linux/slab.h>
0023 #include <linux/cache.h>
0024 #include <linux/percpu.h>
0025 #include <linux/skbuff.h>
0026 #include <linux/kref.h>
0027 #include <linux/ktime.h>
0028 #include <linux/indirect_call_wrapper.h>
0029 
0030 #include <net/inet_connection_sock.h>
0031 #include <net/inet_timewait_sock.h>
0032 #include <net/inet_hashtables.h>
0033 #include <net/checksum.h>
0034 #include <net/request_sock.h>
0035 #include <net/sock_reuseport.h>
0036 #include <net/sock.h>
0037 #include <net/snmp.h>
0038 #include <net/ip.h>
0039 #include <net/tcp_states.h>
0040 #include <net/inet_ecn.h>
0041 #include <net/dst.h>
0042 #include <net/mptcp.h>
0043 
0044 #include <linux/seq_file.h>
0045 #include <linux/memcontrol.h>
0046 #include <linux/bpf-cgroup.h>
0047 #include <linux/siphash.h>
0048 
0049 extern struct inet_hashinfo tcp_hashinfo;
0050 
0051 DECLARE_PER_CPU(unsigned int, tcp_orphan_count);
0052 int tcp_orphan_count_sum(void);
0053 
0054 void tcp_time_wait(struct sock *sk, int state, int timeo);
0055 
0056 #define MAX_TCP_HEADER  L1_CACHE_ALIGN(128 + MAX_HEADER)
0057 #define MAX_TCP_OPTION_SPACE 40
0058 #define TCP_MIN_SND_MSS     48
0059 #define TCP_MIN_GSO_SIZE    (TCP_MIN_SND_MSS - MAX_TCP_OPTION_SPACE)
0060 
0061 /*
0062  * Never offer a window over 32767 without using window scaling. Some
0063  * poor stacks do signed 16bit maths!
0064  */
0065 #define MAX_TCP_WINDOW      32767U
0066 
0067 /* Minimal accepted MSS. It is (60+60+8) - (20+20). */
0068 #define TCP_MIN_MSS     88U
0069 
0070 /* The initial MTU to use for probing */
0071 #define TCP_BASE_MSS        1024
0072 
0073 /* probing interval, default to 10 minutes as per RFC4821 */
0074 #define TCP_PROBE_INTERVAL  600
0075 
0076 /* Specify interval when tcp mtu probing will stop */
0077 #define TCP_PROBE_THRESHOLD 8
0078 
0079 /* After receiving this amount of duplicate ACKs fast retransmit starts. */
0080 #define TCP_FASTRETRANS_THRESH 3
0081 
0082 /* Maximal number of ACKs sent quickly to accelerate slow-start. */
0083 #define TCP_MAX_QUICKACKS   16U
0084 
0085 /* Maximal number of window scale according to RFC1323 */
0086 #define TCP_MAX_WSCALE      14U
0087 
0088 /* urg_data states */
0089 #define TCP_URG_VALID   0x0100
0090 #define TCP_URG_NOTYET  0x0200
0091 #define TCP_URG_READ    0x0400
0092 
0093 #define TCP_RETR1   3   /*
0094                  * This is how many retries it does before it
0095                  * tries to figure out if the gateway is
0096                  * down. Minimal RFC value is 3; it corresponds
0097                  * to ~3sec-8min depending on RTO.
0098                  */
0099 
0100 #define TCP_RETR2   15  /*
0101                  * This should take at least
0102                  * 90 minutes to time out.
0103                  * RFC1122 says that the limit is 100 sec.
0104                  * 15 is ~13-30min depending on RTO.
0105                  */
0106 
0107 #define TCP_SYN_RETRIES  6  /* This is how many retries are done
0108                  * when active opening a connection.
0109                  * RFC1122 says the minimum retry MUST
0110                  * be at least 180secs.  Nevertheless
0111                  * this value is corresponding to
0112                  * 63secs of retransmission with the
0113                  * current initial RTO.
0114                  */
0115 
0116 #define TCP_SYNACK_RETRIES 5    /* This is how may retries are done
0117                  * when passive opening a connection.
0118                  * This is corresponding to 31secs of
0119                  * retransmission with the current
0120                  * initial RTO.
0121                  */
0122 
0123 #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
0124                   * state, about 60 seconds */
0125 #define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
0126                                  /* BSD style FIN_WAIT2 deadlock breaker.
0127                   * It used to be 3min, new value is 60sec,
0128                   * to combine FIN-WAIT-2 timeout with
0129                   * TIME-WAIT timer.
0130                   */
0131 #define TCP_FIN_TIMEOUT_MAX (120 * HZ) /* max TCP_LINGER2 value (two minutes) */
0132 
0133 #define TCP_DELACK_MAX  ((unsigned)(HZ/5))  /* maximal time to delay before sending an ACK */
0134 #if HZ >= 100
0135 #define TCP_DELACK_MIN  ((unsigned)(HZ/25)) /* minimal time to delay before sending an ACK */
0136 #define TCP_ATO_MIN ((unsigned)(HZ/25))
0137 #else
0138 #define TCP_DELACK_MIN  4U
0139 #define TCP_ATO_MIN 4U
0140 #endif
0141 #define TCP_RTO_MAX ((unsigned)(120*HZ))
0142 #define TCP_RTO_MIN ((unsigned)(HZ/5))
0143 #define TCP_TIMEOUT_MIN (2U) /* Min timeout for TCP timers in jiffies */
0144 #define TCP_TIMEOUT_INIT ((unsigned)(1*HZ)) /* RFC6298 2.1 initial RTO value    */
0145 #define TCP_TIMEOUT_FALLBACK ((unsigned)(3*HZ)) /* RFC 1122 initial RTO value, now
0146                          * used as a fallback RTO for the
0147                          * initial data transmission if no
0148                          * valid RTT sample has been acquired,
0149                          * most likely due to retrans in 3WHS.
0150                          */
0151 
0152 #define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U)) /* Maximal interval between probes
0153                                      * for local resources.
0154                                      */
0155 #define TCP_KEEPALIVE_TIME  (120*60*HZ) /* two hours */
0156 #define TCP_KEEPALIVE_PROBES    9       /* Max of 9 keepalive probes    */
0157 #define TCP_KEEPALIVE_INTVL (75*HZ)
0158 
0159 #define MAX_TCP_KEEPIDLE    32767
0160 #define MAX_TCP_KEEPINTVL   32767
0161 #define MAX_TCP_KEEPCNT     127
0162 #define MAX_TCP_SYNCNT      127
0163 
0164 #define TCP_SYNQ_INTERVAL   (HZ/5)  /* Period of SYNACK timer */
0165 
0166 #define TCP_PAWS_24DAYS (60 * 60 * 24 * 24)
0167 #define TCP_PAWS_MSL    60      /* Per-host timestamps are invalidated
0168                      * after this time. It should be equal
0169                      * (or greater than) TCP_TIMEWAIT_LEN
0170                      * to provide reliability equal to one
0171                      * provided by timewait state.
0172                      */
0173 #define TCP_PAWS_WINDOW 1       /* Replay window for per-host
0174                      * timestamps. It must be less than
0175                      * minimal timewait lifetime.
0176                      */
0177 /*
0178  *  TCP option
0179  */
0180 
0181 #define TCPOPT_NOP      1   /* Padding */
0182 #define TCPOPT_EOL      0   /* End of options */
0183 #define TCPOPT_MSS      2   /* Segment size negotiating */
0184 #define TCPOPT_WINDOW       3   /* Window scaling */
0185 #define TCPOPT_SACK_PERM        4       /* SACK Permitted */
0186 #define TCPOPT_SACK             5       /* SACK Block */
0187 #define TCPOPT_TIMESTAMP    8   /* Better RTT estimations/PAWS */
0188 #define TCPOPT_MD5SIG       19  /* MD5 Signature (RFC2385) */
0189 #define TCPOPT_MPTCP        30  /* Multipath TCP (RFC6824) */
0190 #define TCPOPT_FASTOPEN     34  /* Fast open (RFC7413) */
0191 #define TCPOPT_EXP      254 /* Experimental */
0192 /* Magic number to be after the option value for sharing TCP
0193  * experimental options. See draft-ietf-tcpm-experimental-options-00.txt
0194  */
0195 #define TCPOPT_FASTOPEN_MAGIC   0xF989
0196 #define TCPOPT_SMC_MAGIC    0xE2D4C3D9
0197 
0198 /*
0199  *     TCP option lengths
0200  */
0201 
0202 #define TCPOLEN_MSS            4
0203 #define TCPOLEN_WINDOW         3
0204 #define TCPOLEN_SACK_PERM      2
0205 #define TCPOLEN_TIMESTAMP      10
0206 #define TCPOLEN_MD5SIG         18
0207 #define TCPOLEN_FASTOPEN_BASE  2
0208 #define TCPOLEN_EXP_FASTOPEN_BASE  4
0209 #define TCPOLEN_EXP_SMC_BASE   6
0210 
0211 /* But this is what stacks really send out. */
0212 #define TCPOLEN_TSTAMP_ALIGNED      12
0213 #define TCPOLEN_WSCALE_ALIGNED      4
0214 #define TCPOLEN_SACKPERM_ALIGNED    4
0215 #define TCPOLEN_SACK_BASE       2
0216 #define TCPOLEN_SACK_BASE_ALIGNED   4
0217 #define TCPOLEN_SACK_PERBLOCK       8
0218 #define TCPOLEN_MD5SIG_ALIGNED      20
0219 #define TCPOLEN_MSS_ALIGNED     4
0220 #define TCPOLEN_EXP_SMC_BASE_ALIGNED    8
0221 
0222 /* Flags in tp->nonagle */
0223 #define TCP_NAGLE_OFF       1   /* Nagle's algo is disabled */
0224 #define TCP_NAGLE_CORK      2   /* Socket is corked     */
0225 #define TCP_NAGLE_PUSH      4   /* Cork is overridden for already queued data */
0226 
0227 /* TCP thin-stream limits */
0228 #define TCP_THIN_LINEAR_RETRIES 6       /* After 6 linear retries, do exp. backoff */
0229 
0230 /* TCP initial congestion window as per rfc6928 */
0231 #define TCP_INIT_CWND       10
0232 
0233 /* Bit Flags for sysctl_tcp_fastopen */
0234 #define TFO_CLIENT_ENABLE   1
0235 #define TFO_SERVER_ENABLE   2
0236 #define TFO_CLIENT_NO_COOKIE    4   /* Data in SYN w/o cookie option */
0237 
0238 /* Accept SYN data w/o any cookie option */
0239 #define TFO_SERVER_COOKIE_NOT_REQD  0x200
0240 
0241 /* Force enable TFO on all listeners, i.e., not requiring the
0242  * TCP_FASTOPEN socket option.
0243  */
0244 #define TFO_SERVER_WO_SOCKOPT1  0x400
0245 
0246 
0247 /* sysctl variables for tcp */
0248 extern int sysctl_tcp_max_orphans;
0249 extern long sysctl_tcp_mem[3];
0250 
0251 #define TCP_RACK_LOSS_DETECTION  0x1 /* Use RACK to detect losses */
0252 #define TCP_RACK_STATIC_REO_WND  0x2 /* Use static RACK reo wnd */
0253 #define TCP_RACK_NO_DUPTHRESH    0x4 /* Do not use DUPACK threshold in RACK */
0254 
0255 extern atomic_long_t tcp_memory_allocated;
0256 DECLARE_PER_CPU(int, tcp_memory_per_cpu_fw_alloc);
0257 
0258 extern struct percpu_counter tcp_sockets_allocated;
0259 extern unsigned long tcp_memory_pressure;
0260 
0261 /* optimized version of sk_under_memory_pressure() for TCP sockets */
0262 static inline bool tcp_under_memory_pressure(const struct sock *sk)
0263 {
0264     if (mem_cgroup_sockets_enabled && sk->sk_memcg &&
0265         mem_cgroup_under_socket_pressure(sk->sk_memcg))
0266         return true;
0267 
0268     return READ_ONCE(tcp_memory_pressure);
0269 }
0270 /*
0271  * The next routines deal with comparing 32 bit unsigned ints
0272  * and worry about wraparound (automatic with unsigned arithmetic).
0273  */
0274 
0275 static inline bool before(__u32 seq1, __u32 seq2)
0276 {
0277         return (__s32)(seq1-seq2) < 0;
0278 }
0279 #define after(seq2, seq1)   before(seq1, seq2)
0280 
0281 /* is s2<=s1<=s3 ? */
0282 static inline bool between(__u32 seq1, __u32 seq2, __u32 seq3)
0283 {
0284     return seq3 - seq2 >= seq1 - seq2;
0285 }
0286 
0287 static inline bool tcp_out_of_memory(struct sock *sk)
0288 {
0289     if (sk->sk_wmem_queued > SOCK_MIN_SNDBUF &&
0290         sk_memory_allocated(sk) > sk_prot_mem_limits(sk, 2))
0291         return true;
0292     return false;
0293 }
0294 
0295 static inline void tcp_wmem_free_skb(struct sock *sk, struct sk_buff *skb)
0296 {
0297     sk_wmem_queued_add(sk, -skb->truesize);
0298     if (!skb_zcopy_pure(skb))
0299         sk_mem_uncharge(sk, skb->truesize);
0300     else
0301         sk_mem_uncharge(sk, SKB_TRUESIZE(skb_end_offset(skb)));
0302     __kfree_skb(skb);
0303 }
0304 
0305 void sk_forced_mem_schedule(struct sock *sk, int size);
0306 
0307 bool tcp_check_oom(struct sock *sk, int shift);
0308 
0309 
0310 extern struct proto tcp_prot;
0311 
0312 #define TCP_INC_STATS(net, field)   SNMP_INC_STATS((net)->mib.tcp_statistics, field)
0313 #define __TCP_INC_STATS(net, field) __SNMP_INC_STATS((net)->mib.tcp_statistics, field)
0314 #define TCP_DEC_STATS(net, field)   SNMP_DEC_STATS((net)->mib.tcp_statistics, field)
0315 #define TCP_ADD_STATS(net, field, val)  SNMP_ADD_STATS((net)->mib.tcp_statistics, field, val)
0316 
0317 void tcp_tasklet_init(void);
0318 
0319 int tcp_v4_err(struct sk_buff *skb, u32);
0320 
0321 void tcp_shutdown(struct sock *sk, int how);
0322 
0323 int tcp_v4_early_demux(struct sk_buff *skb);
0324 int tcp_v4_rcv(struct sk_buff *skb);
0325 
0326 void tcp_remove_empty_skb(struct sock *sk);
0327 int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);
0328 int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
0329 int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size);
0330 int tcp_sendpage(struct sock *sk, struct page *page, int offset, size_t size,
0331          int flags);
0332 int tcp_sendpage_locked(struct sock *sk, struct page *page, int offset,
0333             size_t size, int flags);
0334 ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset,
0335          size_t size, int flags);
0336 int tcp_send_mss(struct sock *sk, int *size_goal, int flags);
0337 void tcp_push(struct sock *sk, int flags, int mss_now, int nonagle,
0338           int size_goal);
0339 void tcp_release_cb(struct sock *sk);
0340 void tcp_wfree(struct sk_buff *skb);
0341 void tcp_write_timer_handler(struct sock *sk);
0342 void tcp_delack_timer_handler(struct sock *sk);
0343 int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg);
0344 int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb);
0345 void tcp_rcv_established(struct sock *sk, struct sk_buff *skb);
0346 void tcp_rcv_space_adjust(struct sock *sk);
0347 int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp);
0348 void tcp_twsk_destructor(struct sock *sk);
0349 ssize_t tcp_splice_read(struct socket *sk, loff_t *ppos,
0350             struct pipe_inode_info *pipe, size_t len,
0351             unsigned int flags);
0352 struct sk_buff *tcp_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp,
0353                      bool force_schedule);
0354 
0355 void tcp_enter_quickack_mode(struct sock *sk, unsigned int max_quickacks);
0356 static inline void tcp_dec_quickack_mode(struct sock *sk,
0357                      const unsigned int pkts)
0358 {
0359     struct inet_connection_sock *icsk = inet_csk(sk);
0360 
0361     if (icsk->icsk_ack.quick) {
0362         if (pkts >= icsk->icsk_ack.quick) {
0363             icsk->icsk_ack.quick = 0;
0364             /* Leaving quickack mode we deflate ATO. */
0365             icsk->icsk_ack.ato   = TCP_ATO_MIN;
0366         } else
0367             icsk->icsk_ack.quick -= pkts;
0368     }
0369 }
0370 
0371 #define TCP_ECN_OK      1
0372 #define TCP_ECN_QUEUE_CWR   2
0373 #define TCP_ECN_DEMAND_CWR  4
0374 #define TCP_ECN_SEEN        8
0375 
0376 enum tcp_tw_status {
0377     TCP_TW_SUCCESS = 0,
0378     TCP_TW_RST = 1,
0379     TCP_TW_ACK = 2,
0380     TCP_TW_SYN = 3
0381 };
0382 
0383 
0384 enum tcp_tw_status tcp_timewait_state_process(struct inet_timewait_sock *tw,
0385                           struct sk_buff *skb,
0386                           const struct tcphdr *th);
0387 struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
0388                struct request_sock *req, bool fastopen,
0389                bool *lost_race);
0390 int tcp_child_process(struct sock *parent, struct sock *child,
0391               struct sk_buff *skb);
0392 void tcp_enter_loss(struct sock *sk);
0393 void tcp_cwnd_reduction(struct sock *sk, int newly_acked_sacked, int newly_lost, int flag);
0394 void tcp_clear_retrans(struct tcp_sock *tp);
0395 void tcp_update_metrics(struct sock *sk);
0396 void tcp_init_metrics(struct sock *sk);
0397 void tcp_metrics_init(void);
0398 bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst);
0399 void __tcp_close(struct sock *sk, long timeout);
0400 void tcp_close(struct sock *sk, long timeout);
0401 void tcp_init_sock(struct sock *sk);
0402 void tcp_init_transfer(struct sock *sk, int bpf_op, struct sk_buff *skb);
0403 __poll_t tcp_poll(struct file *file, struct socket *sock,
0404               struct poll_table_struct *wait);
0405 int tcp_getsockopt(struct sock *sk, int level, int optname,
0406            char __user *optval, int __user *optlen);
0407 bool tcp_bpf_bypass_getsockopt(int level, int optname);
0408 int tcp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
0409            unsigned int optlen);
0410 void tcp_set_keepalive(struct sock *sk, int val);
0411 void tcp_syn_ack_timeout(const struct request_sock *req);
0412 int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
0413         int flags, int *addr_len);
0414 int tcp_set_rcvlowat(struct sock *sk, int val);
0415 int tcp_set_window_clamp(struct sock *sk, int val);
0416 void tcp_update_recv_tstamps(struct sk_buff *skb,
0417                  struct scm_timestamping_internal *tss);
0418 void tcp_recv_timestamp(struct msghdr *msg, const struct sock *sk,
0419             struct scm_timestamping_internal *tss);
0420 void tcp_data_ready(struct sock *sk);
0421 #ifdef CONFIG_MMU
0422 int tcp_mmap(struct file *file, struct socket *sock,
0423          struct vm_area_struct *vma);
0424 #endif
0425 void tcp_parse_options(const struct net *net, const struct sk_buff *skb,
0426                struct tcp_options_received *opt_rx,
0427                int estab, struct tcp_fastopen_cookie *foc);
0428 const u8 *tcp_parse_md5sig_option(const struct tcphdr *th);
0429 
0430 /*
0431  *  BPF SKB-less helpers
0432  */
0433 u16 tcp_v4_get_syncookie(struct sock *sk, struct iphdr *iph,
0434              struct tcphdr *th, u32 *cookie);
0435 u16 tcp_v6_get_syncookie(struct sock *sk, struct ipv6hdr *iph,
0436              struct tcphdr *th, u32 *cookie);
0437 u16 tcp_parse_mss_option(const struct tcphdr *th, u16 user_mss);
0438 u16 tcp_get_syncookie_mss(struct request_sock_ops *rsk_ops,
0439               const struct tcp_request_sock_ops *af_ops,
0440               struct sock *sk, struct tcphdr *th);
0441 /*
0442  *  TCP v4 functions exported for the inet6 API
0443  */
0444 
0445 void tcp_v4_send_check(struct sock *sk, struct sk_buff *skb);
0446 void tcp_v4_mtu_reduced(struct sock *sk);
0447 void tcp_req_err(struct sock *sk, u32 seq, bool abort);
0448 void tcp_ld_RTO_revert(struct sock *sk, u32 seq);
0449 int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb);
0450 struct sock *tcp_create_openreq_child(const struct sock *sk,
0451                       struct request_sock *req,
0452                       struct sk_buff *skb);
0453 void tcp_ca_openreq_child(struct sock *sk, const struct dst_entry *dst);
0454 struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
0455                   struct request_sock *req,
0456                   struct dst_entry *dst,
0457                   struct request_sock *req_unhash,
0458                   bool *own_req);
0459 int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb);
0460 int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
0461 int tcp_connect(struct sock *sk);
0462 enum tcp_synack_type {
0463     TCP_SYNACK_NORMAL,
0464     TCP_SYNACK_FASTOPEN,
0465     TCP_SYNACK_COOKIE,
0466 };
0467 struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
0468                 struct request_sock *req,
0469                 struct tcp_fastopen_cookie *foc,
0470                 enum tcp_synack_type synack_type,
0471                 struct sk_buff *syn_skb);
0472 int tcp_disconnect(struct sock *sk, int flags);
0473 
0474 void tcp_finish_connect(struct sock *sk, struct sk_buff *skb);
0475 int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, size_t size);
0476 void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb);
0477 
0478 /* From syncookies.c */
0479 struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
0480                  struct request_sock *req,
0481                  struct dst_entry *dst, u32 tsoff);
0482 int __cookie_v4_check(const struct iphdr *iph, const struct tcphdr *th,
0483               u32 cookie);
0484 struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb);
0485 struct request_sock *cookie_tcp_reqsk_alloc(const struct request_sock_ops *ops,
0486                         const struct tcp_request_sock_ops *af_ops,
0487                         struct sock *sk, struct sk_buff *skb);
0488 #ifdef CONFIG_SYN_COOKIES
0489 
0490 /* Syncookies use a monotonic timer which increments every 60 seconds.
0491  * This counter is used both as a hash input and partially encoded into
0492  * the cookie value.  A cookie is only validated further if the delta
0493  * between the current counter value and the encoded one is less than this,
0494  * i.e. a sent cookie is valid only at most for 2*60 seconds (or less if
0495  * the counter advances immediately after a cookie is generated).
0496  */
0497 #define MAX_SYNCOOKIE_AGE   2
0498 #define TCP_SYNCOOKIE_PERIOD    (60 * HZ)
0499 #define TCP_SYNCOOKIE_VALID (MAX_SYNCOOKIE_AGE * TCP_SYNCOOKIE_PERIOD)
0500 
0501 /* syncookies: remember time of last synqueue overflow
0502  * But do not dirty this field too often (once per second is enough)
0503  * It is racy as we do not hold a lock, but race is very minor.
0504  */
0505 static inline void tcp_synq_overflow(const struct sock *sk)
0506 {
0507     unsigned int last_overflow;
0508     unsigned int now = jiffies;
0509 
0510     if (sk->sk_reuseport) {
0511         struct sock_reuseport *reuse;
0512 
0513         reuse = rcu_dereference(sk->sk_reuseport_cb);
0514         if (likely(reuse)) {
0515             last_overflow = READ_ONCE(reuse->synq_overflow_ts);
0516             if (!time_between32(now, last_overflow,
0517                         last_overflow + HZ))
0518                 WRITE_ONCE(reuse->synq_overflow_ts, now);
0519             return;
0520         }
0521     }
0522 
0523     last_overflow = READ_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp);
0524     if (!time_between32(now, last_overflow, last_overflow + HZ))
0525         WRITE_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp, now);
0526 }
0527 
0528 /* syncookies: no recent synqueue overflow on this listening socket? */
0529 static inline bool tcp_synq_no_recent_overflow(const struct sock *sk)
0530 {
0531     unsigned int last_overflow;
0532     unsigned int now = jiffies;
0533 
0534     if (sk->sk_reuseport) {
0535         struct sock_reuseport *reuse;
0536 
0537         reuse = rcu_dereference(sk->sk_reuseport_cb);
0538         if (likely(reuse)) {
0539             last_overflow = READ_ONCE(reuse->synq_overflow_ts);
0540             return !time_between32(now, last_overflow - HZ,
0541                            last_overflow +
0542                            TCP_SYNCOOKIE_VALID);
0543         }
0544     }
0545 
0546     last_overflow = READ_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp);
0547 
0548     /* If last_overflow <= jiffies <= last_overflow + TCP_SYNCOOKIE_VALID,
0549      * then we're under synflood. However, we have to use
0550      * 'last_overflow - HZ' as lower bound. That's because a concurrent
0551      * tcp_synq_overflow() could update .ts_recent_stamp after we read
0552      * jiffies but before we store .ts_recent_stamp into last_overflow,
0553      * which could lead to rejecting a valid syncookie.
0554      */
0555     return !time_between32(now, last_overflow - HZ,
0556                    last_overflow + TCP_SYNCOOKIE_VALID);
0557 }
0558 
0559 static inline u32 tcp_cookie_time(void)
0560 {
0561     u64 val = get_jiffies_64();
0562 
0563     do_div(val, TCP_SYNCOOKIE_PERIOD);
0564     return val;
0565 }
0566 
0567 u32 __cookie_v4_init_sequence(const struct iphdr *iph, const struct tcphdr *th,
0568                   u16 *mssp);
0569 __u32 cookie_v4_init_sequence(const struct sk_buff *skb, __u16 *mss);
0570 u64 cookie_init_timestamp(struct request_sock *req, u64 now);
0571 bool cookie_timestamp_decode(const struct net *net,
0572                  struct tcp_options_received *opt);
0573 bool cookie_ecn_ok(const struct tcp_options_received *opt,
0574            const struct net *net, const struct dst_entry *dst);
0575 
0576 /* From net/ipv6/syncookies.c */
0577 int __cookie_v6_check(const struct ipv6hdr *iph, const struct tcphdr *th,
0578               u32 cookie);
0579 struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb);
0580 
0581 u32 __cookie_v6_init_sequence(const struct ipv6hdr *iph,
0582                   const struct tcphdr *th, u16 *mssp);
0583 __u32 cookie_v6_init_sequence(const struct sk_buff *skb, __u16 *mss);
0584 #endif
0585 /* tcp_output.c */
0586 
0587 void tcp_skb_entail(struct sock *sk, struct sk_buff *skb);
0588 void tcp_mark_push(struct tcp_sock *tp, struct sk_buff *skb);
0589 void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss,
0590                    int nonagle);
0591 int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs);
0592 int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs);
0593 void tcp_retransmit_timer(struct sock *sk);
0594 void tcp_xmit_retransmit_queue(struct sock *);
0595 void tcp_simple_retransmit(struct sock *);
0596 void tcp_enter_recovery(struct sock *sk, bool ece_ack);
0597 int tcp_trim_head(struct sock *, struct sk_buff *, u32);
0598 enum tcp_queue {
0599     TCP_FRAG_IN_WRITE_QUEUE,
0600     TCP_FRAG_IN_RTX_QUEUE,
0601 };
0602 int tcp_fragment(struct sock *sk, enum tcp_queue tcp_queue,
0603          struct sk_buff *skb, u32 len,
0604          unsigned int mss_now, gfp_t gfp);
0605 
0606 void tcp_send_probe0(struct sock *);
0607 void tcp_send_partial(struct sock *);
0608 int tcp_write_wakeup(struct sock *, int mib);
0609 void tcp_send_fin(struct sock *sk);
0610 void tcp_send_active_reset(struct sock *sk, gfp_t priority);
0611 int tcp_send_synack(struct sock *);
0612 void tcp_push_one(struct sock *, unsigned int mss_now);
0613 void __tcp_send_ack(struct sock *sk, u32 rcv_nxt);
0614 void tcp_send_ack(struct sock *sk);
0615 void tcp_send_delayed_ack(struct sock *sk);
0616 void tcp_send_loss_probe(struct sock *sk);
0617 bool tcp_schedule_loss_probe(struct sock *sk, bool advancing_rto);
0618 void tcp_skb_collapse_tstamp(struct sk_buff *skb,
0619                  const struct sk_buff *next_skb);
0620 
0621 /* tcp_input.c */
0622 void tcp_rearm_rto(struct sock *sk);
0623 void tcp_synack_rtt_meas(struct sock *sk, struct request_sock *req);
0624 void tcp_reset(struct sock *sk, struct sk_buff *skb);
0625 void tcp_skb_mark_lost_uncond_verify(struct tcp_sock *tp, struct sk_buff *skb);
0626 void tcp_fin(struct sock *sk);
0627 void tcp_check_space(struct sock *sk);
0628 
0629 /* tcp_timer.c */
0630 void tcp_init_xmit_timers(struct sock *);
0631 static inline void tcp_clear_xmit_timers(struct sock *sk)
0632 {
0633     if (hrtimer_try_to_cancel(&tcp_sk(sk)->pacing_timer) == 1)
0634         __sock_put(sk);
0635 
0636     if (hrtimer_try_to_cancel(&tcp_sk(sk)->compressed_ack_timer) == 1)
0637         __sock_put(sk);
0638 
0639     inet_csk_clear_xmit_timers(sk);
0640 }
0641 
0642 unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
0643 unsigned int tcp_current_mss(struct sock *sk);
0644 u32 tcp_clamp_probe0_to_user_timeout(const struct sock *sk, u32 when);
0645 
0646 /* Bound MSS / TSO packet size with the half of the window */
0647 static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize)
0648 {
0649     int cutoff;
0650 
0651     /* When peer uses tiny windows, there is no use in packetizing
0652      * to sub-MSS pieces for the sake of SWS or making sure there
0653      * are enough packets in the pipe for fast recovery.
0654      *
0655      * On the other hand, for extremely large MSS devices, handling
0656      * smaller than MSS windows in this way does make sense.
0657      */
0658     if (tp->max_window > TCP_MSS_DEFAULT)
0659         cutoff = (tp->max_window >> 1);
0660     else
0661         cutoff = tp->max_window;
0662 
0663     if (cutoff && pktsize > cutoff)
0664         return max_t(int, cutoff, 68U - tp->tcp_header_len);
0665     else
0666         return pktsize;
0667 }
0668 
0669 /* tcp.c */
0670 void tcp_get_info(struct sock *, struct tcp_info *);
0671 
0672 /* Read 'sendfile()'-style from a TCP socket */
0673 int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
0674           sk_read_actor_t recv_actor);
0675 int tcp_read_skb(struct sock *sk, skb_read_actor_t recv_actor);
0676 struct sk_buff *tcp_recv_skb(struct sock *sk, u32 seq, u32 *off);
0677 void tcp_read_done(struct sock *sk, size_t len);
0678 
0679 void tcp_initialize_rcv_mss(struct sock *sk);
0680 
0681 int tcp_mtu_to_mss(struct sock *sk, int pmtu);
0682 int tcp_mss_to_mtu(struct sock *sk, int mss);
0683 void tcp_mtup_init(struct sock *sk);
0684 
0685 static inline void tcp_bound_rto(const struct sock *sk)
0686 {
0687     if (inet_csk(sk)->icsk_rto > TCP_RTO_MAX)
0688         inet_csk(sk)->icsk_rto = TCP_RTO_MAX;
0689 }
0690 
0691 static inline u32 __tcp_set_rto(const struct tcp_sock *tp)
0692 {
0693     return usecs_to_jiffies((tp->srtt_us >> 3) + tp->rttvar_us);
0694 }
0695 
0696 static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
0697 {
0698     /* mptcp hooks are only on the slow path */
0699     if (sk_is_mptcp((struct sock *)tp))
0700         return;
0701 
0702     tp->pred_flags = htonl((tp->tcp_header_len << 26) |
0703                    ntohl(TCP_FLAG_ACK) |
0704                    snd_wnd);
0705 }
0706 
0707 static inline void tcp_fast_path_on(struct tcp_sock *tp)
0708 {
0709     __tcp_fast_path_on(tp, tp->snd_wnd >> tp->rx_opt.snd_wscale);
0710 }
0711 
0712 static inline void tcp_fast_path_check(struct sock *sk)
0713 {
0714     struct tcp_sock *tp = tcp_sk(sk);
0715 
0716     if (RB_EMPTY_ROOT(&tp->out_of_order_queue) &&
0717         tp->rcv_wnd &&
0718         atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf &&
0719         !tp->urg_data)
0720         tcp_fast_path_on(tp);
0721 }
0722 
0723 /* Compute the actual rto_min value */
0724 static inline u32 tcp_rto_min(struct sock *sk)
0725 {
0726     const struct dst_entry *dst = __sk_dst_get(sk);
0727     u32 rto_min = inet_csk(sk)->icsk_rto_min;
0728 
0729     if (dst && dst_metric_locked(dst, RTAX_RTO_MIN))
0730         rto_min = dst_metric_rtt(dst, RTAX_RTO_MIN);
0731     return rto_min;
0732 }
0733 
0734 static inline u32 tcp_rto_min_us(struct sock *sk)
0735 {
0736     return jiffies_to_usecs(tcp_rto_min(sk));
0737 }
0738 
0739 static inline bool tcp_ca_dst_locked(const struct dst_entry *dst)
0740 {
0741     return dst_metric_locked(dst, RTAX_CC_ALGO);
0742 }
0743 
0744 /* Minimum RTT in usec. ~0 means not available. */
0745 static inline u32 tcp_min_rtt(const struct tcp_sock *tp)
0746 {
0747     return minmax_get(&tp->rtt_min);
0748 }
0749 
0750 /* Compute the actual receive window we are currently advertising.
0751  * Rcv_nxt can be after the window if our peer push more data
0752  * than the offered window.
0753  */
0754 static inline u32 tcp_receive_window(const struct tcp_sock *tp)
0755 {
0756     s32 win = tp->rcv_wup + tp->rcv_wnd - tp->rcv_nxt;
0757 
0758     if (win < 0)
0759         win = 0;
0760     return (u32) win;
0761 }
0762 
0763 /* Choose a new window, without checks for shrinking, and without
0764  * scaling applied to the result.  The caller does these things
0765  * if necessary.  This is a "raw" window selection.
0766  */
0767 u32 __tcp_select_window(struct sock *sk);
0768 
0769 void tcp_send_window_probe(struct sock *sk);
0770 
0771 /* TCP uses 32bit jiffies to save some space.
0772  * Note that this is different from tcp_time_stamp, which
0773  * historically has been the same until linux-4.13.
0774  */
0775 #define tcp_jiffies32 ((u32)jiffies)
0776 
0777 /*
0778  * Deliver a 32bit value for TCP timestamp option (RFC 7323)
0779  * It is no longer tied to jiffies, but to 1 ms clock.
0780  * Note: double check if you want to use tcp_jiffies32 instead of this.
0781  */
0782 #define TCP_TS_HZ   1000
0783 
0784 static inline u64 tcp_clock_ns(void)
0785 {
0786     return ktime_get_ns();
0787 }
0788 
0789 static inline u64 tcp_clock_us(void)
0790 {
0791     return div_u64(tcp_clock_ns(), NSEC_PER_USEC);
0792 }
0793 
0794 /* This should only be used in contexts where tp->tcp_mstamp is up to date */
0795 static inline u32 tcp_time_stamp(const struct tcp_sock *tp)
0796 {
0797     return div_u64(tp->tcp_mstamp, USEC_PER_SEC / TCP_TS_HZ);
0798 }
0799 
0800 /* Convert a nsec timestamp into TCP TSval timestamp (ms based currently) */
0801 static inline u32 tcp_ns_to_ts(u64 ns)
0802 {
0803     return div_u64(ns, NSEC_PER_SEC / TCP_TS_HZ);
0804 }
0805 
0806 /* Could use tcp_clock_us() / 1000, but this version uses a single divide */
0807 static inline u32 tcp_time_stamp_raw(void)
0808 {
0809     return tcp_ns_to_ts(tcp_clock_ns());
0810 }
0811 
0812 void tcp_mstamp_refresh(struct tcp_sock *tp);
0813 
0814 static inline u32 tcp_stamp_us_delta(u64 t1, u64 t0)
0815 {
0816     return max_t(s64, t1 - t0, 0);
0817 }
0818 
0819 static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
0820 {
0821     return tcp_ns_to_ts(skb->skb_mstamp_ns);
0822 }
0823 
0824 /* provide the departure time in us unit */
0825 static inline u64 tcp_skb_timestamp_us(const struct sk_buff *skb)
0826 {
0827     return div_u64(skb->skb_mstamp_ns, NSEC_PER_USEC);
0828 }
0829 
0830 
0831 #define tcp_flag_byte(th) (((u_int8_t *)th)[13])
0832 
0833 #define TCPHDR_FIN 0x01
0834 #define TCPHDR_SYN 0x02
0835 #define TCPHDR_RST 0x04
0836 #define TCPHDR_PSH 0x08
0837 #define TCPHDR_ACK 0x10
0838 #define TCPHDR_URG 0x20
0839 #define TCPHDR_ECE 0x40
0840 #define TCPHDR_CWR 0x80
0841 
0842 #define TCPHDR_SYN_ECN  (TCPHDR_SYN | TCPHDR_ECE | TCPHDR_CWR)
0843 
0844 /* This is what the send packet queuing engine uses to pass
0845  * TCP per-packet control information to the transmission code.
0846  * We also store the host-order sequence numbers in here too.
0847  * This is 44 bytes if IPV6 is enabled.
0848  * If this grows please adjust skbuff.h:skbuff->cb[xxx] size appropriately.
0849  */
0850 struct tcp_skb_cb {
0851     __u32       seq;        /* Starting sequence number */
0852     __u32       end_seq;    /* SEQ + FIN + SYN + datalen    */
0853     union {
0854         /* Note : tcp_tw_isn is used in input path only
0855          *    (isn chosen by tcp_timewait_state_process())
0856          *
0857          *    tcp_gso_segs/size are used in write queue only,
0858          *    cf tcp_skb_pcount()/tcp_skb_mss()
0859          */
0860         __u32       tcp_tw_isn;
0861         struct {
0862             u16 tcp_gso_segs;
0863             u16 tcp_gso_size;
0864         };
0865     };
0866     __u8        tcp_flags;  /* TCP header flags. (tcp[13])  */
0867 
0868     __u8        sacked;     /* State flags for SACK.    */
0869 #define TCPCB_SACKED_ACKED  0x01    /* SKB ACK'd by a SACK block    */
0870 #define TCPCB_SACKED_RETRANS    0x02    /* SKB retransmitted        */
0871 #define TCPCB_LOST      0x04    /* SKB is lost          */
0872 #define TCPCB_TAGBITS       0x07    /* All tag bits         */
0873 #define TCPCB_REPAIRED      0x10    /* SKB repaired (no skb_mstamp_ns)  */
0874 #define TCPCB_EVER_RETRANS  0x80    /* Ever retransmitted frame */
0875 #define TCPCB_RETRANS       (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS| \
0876                 TCPCB_REPAIRED)
0877 
0878     __u8        ip_dsfield; /* IPv4 tos or IPv6 dsfield */
0879     __u8        txstamp_ack:1,  /* Record TX timestamp for ack? */
0880             eor:1,      /* Is skb MSG_EOR marked? */
0881             has_rxtstamp:1, /* SKB has a RX timestamp   */
0882             unused:5;
0883     __u32       ack_seq;    /* Sequence number ACK'd    */
0884     union {
0885         struct {
0886 #define TCPCB_DELIVERED_CE_MASK ((1U<<20) - 1)
0887             /* There is space for up to 24 bytes */
0888             __u32 is_app_limited:1, /* cwnd not fully used? */
0889                   delivered_ce:20,
0890                   unused:11;
0891             /* pkts S/ACKed so far upon tx of skb, incl retrans: */
0892             __u32 delivered;
0893             /* start of send pipeline phase */
0894             u64 first_tx_mstamp;
0895             /* when we reached the "delivered" count */
0896             u64 delivered_mstamp;
0897         } tx;   /* only used for outgoing skbs */
0898         union {
0899             struct inet_skb_parm    h4;
0900 #if IS_ENABLED(CONFIG_IPV6)
0901             struct inet6_skb_parm   h6;
0902 #endif
0903         } header;   /* For incoming skbs */
0904     };
0905 };
0906 
0907 #define TCP_SKB_CB(__skb)   ((struct tcp_skb_cb *)&((__skb)->cb[0]))
0908 
0909 extern const struct inet_connection_sock_af_ops ipv4_specific;
0910 
0911 #if IS_ENABLED(CONFIG_IPV6)
0912 /* This is the variant of inet6_iif() that must be used by TCP,
0913  * as TCP moves IP6CB into a different location in skb->cb[]
0914  */
0915 static inline int tcp_v6_iif(const struct sk_buff *skb)
0916 {
0917     return TCP_SKB_CB(skb)->header.h6.iif;
0918 }
0919 
0920 static inline int tcp_v6_iif_l3_slave(const struct sk_buff *skb)
0921 {
0922     bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags);
0923 
0924     return l3_slave ? skb->skb_iif : TCP_SKB_CB(skb)->header.h6.iif;
0925 }
0926 
0927 /* TCP_SKB_CB reference means this can not be used from early demux */
0928 static inline int tcp_v6_sdif(const struct sk_buff *skb)
0929 {
0930 #if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
0931     if (skb && ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags))
0932         return TCP_SKB_CB(skb)->header.h6.iif;
0933 #endif
0934     return 0;
0935 }
0936 
0937 extern const struct inet_connection_sock_af_ops ipv6_specific;
0938 
0939 INDIRECT_CALLABLE_DECLARE(void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb));
0940 INDIRECT_CALLABLE_DECLARE(int tcp_v6_rcv(struct sk_buff *skb));
0941 void tcp_v6_early_demux(struct sk_buff *skb);
0942 
0943 #endif
0944 
0945 /* TCP_SKB_CB reference means this can not be used from early demux */
0946 static inline int tcp_v4_sdif(struct sk_buff *skb)
0947 {
0948 #if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
0949     if (skb && ipv4_l3mdev_skb(TCP_SKB_CB(skb)->header.h4.flags))
0950         return TCP_SKB_CB(skb)->header.h4.iif;
0951 #endif
0952     return 0;
0953 }
0954 
0955 /* Due to TSO, an SKB can be composed of multiple actual
0956  * packets.  To keep these tracked properly, we use this.
0957  */
0958 static inline int tcp_skb_pcount(const struct sk_buff *skb)
0959 {
0960     return TCP_SKB_CB(skb)->tcp_gso_segs;
0961 }
0962 
0963 static inline void tcp_skb_pcount_set(struct sk_buff *skb, int segs)
0964 {
0965     TCP_SKB_CB(skb)->tcp_gso_segs = segs;
0966 }
0967 
0968 static inline void tcp_skb_pcount_add(struct sk_buff *skb, int segs)
0969 {
0970     TCP_SKB_CB(skb)->tcp_gso_segs += segs;
0971 }
0972 
0973 /* This is valid iff skb is in write queue and tcp_skb_pcount() > 1. */
0974 static inline int tcp_skb_mss(const struct sk_buff *skb)
0975 {
0976     return TCP_SKB_CB(skb)->tcp_gso_size;
0977 }
0978 
0979 static inline bool tcp_skb_can_collapse_to(const struct sk_buff *skb)
0980 {
0981     return likely(!TCP_SKB_CB(skb)->eor);
0982 }
0983 
0984 static inline bool tcp_skb_can_collapse(const struct sk_buff *to,
0985                     const struct sk_buff *from)
0986 {
0987     return likely(tcp_skb_can_collapse_to(to) &&
0988               mptcp_skb_can_collapse(to, from) &&
0989               skb_pure_zcopy_same(to, from));
0990 }
0991 
0992 /* Events passed to congestion control interface */
0993 enum tcp_ca_event {
0994     CA_EVENT_TX_START,  /* first transmit when no packets in flight */
0995     CA_EVENT_CWND_RESTART,  /* congestion window restart */
0996     CA_EVENT_COMPLETE_CWR,  /* end of congestion recovery */
0997     CA_EVENT_LOSS,      /* loss timeout */
0998     CA_EVENT_ECN_NO_CE, /* ECT set, but not CE marked */
0999     CA_EVENT_ECN_IS_CE, /* received CE marked IP packet */
1000 };
1001 
1002 /* Information about inbound ACK, passed to cong_ops->in_ack_event() */
1003 enum tcp_ca_ack_event_flags {
1004     CA_ACK_SLOWPATH     = (1 << 0), /* In slow path processing */
1005     CA_ACK_WIN_UPDATE   = (1 << 1), /* ACK updated window */
1006     CA_ACK_ECE      = (1 << 2), /* ECE bit is set on ack */
1007 };
1008 
1009 /*
1010  * Interface for adding new TCP congestion control handlers
1011  */
1012 #define TCP_CA_NAME_MAX 16
1013 #define TCP_CA_MAX  128
1014 #define TCP_CA_BUF_MAX  (TCP_CA_NAME_MAX*TCP_CA_MAX)
1015 
1016 #define TCP_CA_UNSPEC   0
1017 
1018 /* Algorithm can be set on socket without CAP_NET_ADMIN privileges */
1019 #define TCP_CONG_NON_RESTRICTED 0x1
1020 /* Requires ECN/ECT set on all packets */
1021 #define TCP_CONG_NEEDS_ECN  0x2
1022 #define TCP_CONG_MASK   (TCP_CONG_NON_RESTRICTED | TCP_CONG_NEEDS_ECN)
1023 
1024 union tcp_cc_info;
1025 
1026 struct ack_sample {
1027     u32 pkts_acked;
1028     s32 rtt_us;
1029     u32 in_flight;
1030 };
1031 
1032 /* A rate sample measures the number of (original/retransmitted) data
1033  * packets delivered "delivered" over an interval of time "interval_us".
1034  * The tcp_rate.c code fills in the rate sample, and congestion
1035  * control modules that define a cong_control function to run at the end
1036  * of ACK processing can optionally chose to consult this sample when
1037  * setting cwnd and pacing rate.
1038  * A sample is invalid if "delivered" or "interval_us" is negative.
1039  */
1040 struct rate_sample {
1041     u64  prior_mstamp; /* starting timestamp for interval */
1042     u32  prior_delivered;   /* tp->delivered at "prior_mstamp" */
1043     u32  prior_delivered_ce;/* tp->delivered_ce at "prior_mstamp" */
1044     s32  delivered;     /* number of packets delivered over interval */
1045     s32  delivered_ce;  /* number of packets delivered w/ CE marks*/
1046     long interval_us;   /* time for tp->delivered to incr "delivered" */
1047     u32 snd_interval_us;    /* snd interval for delivered packets */
1048     u32 rcv_interval_us;    /* rcv interval for delivered packets */
1049     long rtt_us;        /* RTT of last (S)ACKed packet (or -1) */
1050     int  losses;        /* number of packets marked lost upon ACK */
1051     u32  acked_sacked;  /* number of packets newly (S)ACKed upon ACK */
1052     u32  prior_in_flight;   /* in flight before this ACK */
1053     u32  last_end_seq;  /* end_seq of most recently ACKed packet */
1054     bool is_app_limited;    /* is sample from packet with bubble in pipe? */
1055     bool is_retrans;    /* is sample from retransmission? */
1056     bool is_ack_delayed;    /* is this (likely) a delayed ACK? */
1057 };
1058 
1059 struct tcp_congestion_ops {
1060 /* fast path fields are put first to fill one cache line */
1061 
1062     /* return slow start threshold (required) */
1063     u32 (*ssthresh)(struct sock *sk);
1064 
1065     /* do new cwnd calculation (required) */
1066     void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked);
1067 
1068     /* call before changing ca_state (optional) */
1069     void (*set_state)(struct sock *sk, u8 new_state);
1070 
1071     /* call when cwnd event occurs (optional) */
1072     void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
1073 
1074     /* call when ack arrives (optional) */
1075     void (*in_ack_event)(struct sock *sk, u32 flags);
1076 
1077     /* hook for packet ack accounting (optional) */
1078     void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
1079 
1080     /* override sysctl_tcp_min_tso_segs */
1081     u32 (*min_tso_segs)(struct sock *sk);
1082 
1083     /* call when packets are delivered to update cwnd and pacing rate,
1084      * after all the ca_state processing. (optional)
1085      */
1086     void (*cong_control)(struct sock *sk, const struct rate_sample *rs);
1087 
1088 
1089     /* new value of cwnd after loss (required) */
1090     u32  (*undo_cwnd)(struct sock *sk);
1091     /* returns the multiplier used in tcp_sndbuf_expand (optional) */
1092     u32 (*sndbuf_expand)(struct sock *sk);
1093 
1094 /* control/slow paths put last */
1095     /* get info for inet_diag (optional) */
1096     size_t (*get_info)(struct sock *sk, u32 ext, int *attr,
1097                union tcp_cc_info *info);
1098 
1099     char            name[TCP_CA_NAME_MAX];
1100     struct module       *owner;
1101     struct list_head    list;
1102     u32         key;
1103     u32         flags;
1104 
1105     /* initialize private data (optional) */
1106     void (*init)(struct sock *sk);
1107     /* cleanup private data  (optional) */
1108     void (*release)(struct sock *sk);
1109 } ____cacheline_aligned_in_smp;
1110 
1111 int tcp_register_congestion_control(struct tcp_congestion_ops *type);
1112 void tcp_unregister_congestion_control(struct tcp_congestion_ops *type);
1113 
1114 void tcp_assign_congestion_control(struct sock *sk);
1115 void tcp_init_congestion_control(struct sock *sk);
1116 void tcp_cleanup_congestion_control(struct sock *sk);
1117 int tcp_set_default_congestion_control(struct net *net, const char *name);
1118 void tcp_get_default_congestion_control(struct net *net, char *name);
1119 void tcp_get_available_congestion_control(char *buf, size_t len);
1120 void tcp_get_allowed_congestion_control(char *buf, size_t len);
1121 int tcp_set_allowed_congestion_control(char *allowed);
1122 int tcp_set_congestion_control(struct sock *sk, const char *name, bool load,
1123                    bool cap_net_admin);
1124 u32 tcp_slow_start(struct tcp_sock *tp, u32 acked);
1125 void tcp_cong_avoid_ai(struct tcp_sock *tp, u32 w, u32 acked);
1126 
1127 u32 tcp_reno_ssthresh(struct sock *sk);
1128 u32 tcp_reno_undo_cwnd(struct sock *sk);
1129 void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 acked);
1130 extern struct tcp_congestion_ops tcp_reno;
1131 
1132 struct tcp_congestion_ops *tcp_ca_find(const char *name);
1133 struct tcp_congestion_ops *tcp_ca_find_key(u32 key);
1134 u32 tcp_ca_get_key_by_name(struct net *net, const char *name, bool *ecn_ca);
1135 #ifdef CONFIG_INET
1136 char *tcp_ca_get_name_by_key(u32 key, char *buffer);
1137 #else
1138 static inline char *tcp_ca_get_name_by_key(u32 key, char *buffer)
1139 {
1140     return NULL;
1141 }
1142 #endif
1143 
1144 static inline bool tcp_ca_needs_ecn(const struct sock *sk)
1145 {
1146     const struct inet_connection_sock *icsk = inet_csk(sk);
1147 
1148     return icsk->icsk_ca_ops->flags & TCP_CONG_NEEDS_ECN;
1149 }
1150 
1151 static inline void tcp_ca_event(struct sock *sk, const enum tcp_ca_event event)
1152 {
1153     const struct inet_connection_sock *icsk = inet_csk(sk);
1154 
1155     if (icsk->icsk_ca_ops->cwnd_event)
1156         icsk->icsk_ca_ops->cwnd_event(sk, event);
1157 }
1158 
1159 /* From tcp_cong.c */
1160 void tcp_set_ca_state(struct sock *sk, const u8 ca_state);
1161 
1162 /* From tcp_rate.c */
1163 void tcp_rate_skb_sent(struct sock *sk, struct sk_buff *skb);
1164 void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb,
1165                 struct rate_sample *rs);
1166 void tcp_rate_gen(struct sock *sk, u32 delivered, u32 lost,
1167           bool is_sack_reneg, struct rate_sample *rs);
1168 void tcp_rate_check_app_limited(struct sock *sk);
1169 
1170 static inline bool tcp_skb_sent_after(u64 t1, u64 t2, u32 seq1, u32 seq2)
1171 {
1172     return t1 > t2 || (t1 == t2 && after(seq1, seq2));
1173 }
1174 
1175 /* These functions determine how the current flow behaves in respect of SACK
1176  * handling. SACK is negotiated with the peer, and therefore it can vary
1177  * between different flows.
1178  *
1179  * tcp_is_sack - SACK enabled
1180  * tcp_is_reno - No SACK
1181  */
1182 static inline int tcp_is_sack(const struct tcp_sock *tp)
1183 {
1184     return likely(tp->rx_opt.sack_ok);
1185 }
1186 
1187 static inline bool tcp_is_reno(const struct tcp_sock *tp)
1188 {
1189     return !tcp_is_sack(tp);
1190 }
1191 
1192 static inline unsigned int tcp_left_out(const struct tcp_sock *tp)
1193 {
1194     return tp->sacked_out + tp->lost_out;
1195 }
1196 
1197 /* This determines how many packets are "in the network" to the best
1198  * of our knowledge.  In many cases it is conservative, but where
1199  * detailed information is available from the receiver (via SACK
1200  * blocks etc.) we can make more aggressive calculations.
1201  *
1202  * Use this for decisions involving congestion control, use just
1203  * tp->packets_out to determine if the send queue is empty or not.
1204  *
1205  * Read this equation as:
1206  *
1207  *  "Packets sent once on transmission queue" MINUS
1208  *  "Packets left network, but not honestly ACKed yet" PLUS
1209  *  "Packets fast retransmitted"
1210  */
1211 static inline unsigned int tcp_packets_in_flight(const struct tcp_sock *tp)
1212 {
1213     return tp->packets_out - tcp_left_out(tp) + tp->retrans_out;
1214 }
1215 
1216 #define TCP_INFINITE_SSTHRESH   0x7fffffff
1217 
1218 static inline u32 tcp_snd_cwnd(const struct tcp_sock *tp)
1219 {
1220     return tp->snd_cwnd;
1221 }
1222 
1223 static inline void tcp_snd_cwnd_set(struct tcp_sock *tp, u32 val)
1224 {
1225     WARN_ON_ONCE((int)val <= 0);
1226     tp->snd_cwnd = val;
1227 }
1228 
1229 static inline bool tcp_in_slow_start(const struct tcp_sock *tp)
1230 {
1231     return tcp_snd_cwnd(tp) < tp->snd_ssthresh;
1232 }
1233 
1234 static inline bool tcp_in_initial_slowstart(const struct tcp_sock *tp)
1235 {
1236     return tp->snd_ssthresh >= TCP_INFINITE_SSTHRESH;
1237 }
1238 
1239 static inline bool tcp_in_cwnd_reduction(const struct sock *sk)
1240 {
1241     return (TCPF_CA_CWR | TCPF_CA_Recovery) &
1242            (1 << inet_csk(sk)->icsk_ca_state);
1243 }
1244 
1245 /* If cwnd > ssthresh, we may raise ssthresh to be half-way to cwnd.
1246  * The exception is cwnd reduction phase, when cwnd is decreasing towards
1247  * ssthresh.
1248  */
1249 static inline __u32 tcp_current_ssthresh(const struct sock *sk)
1250 {
1251     const struct tcp_sock *tp = tcp_sk(sk);
1252 
1253     if (tcp_in_cwnd_reduction(sk))
1254         return tp->snd_ssthresh;
1255     else
1256         return max(tp->snd_ssthresh,
1257                ((tcp_snd_cwnd(tp) >> 1) +
1258                 (tcp_snd_cwnd(tp) >> 2)));
1259 }
1260 
1261 /* Use define here intentionally to get WARN_ON location shown at the caller */
1262 #define tcp_verify_left_out(tp) WARN_ON(tcp_left_out(tp) > tp->packets_out)
1263 
1264 void tcp_enter_cwr(struct sock *sk);
1265 __u32 tcp_init_cwnd(const struct tcp_sock *tp, const struct dst_entry *dst);
1266 
1267 /* The maximum number of MSS of available cwnd for which TSO defers
1268  * sending if not using sysctl_tcp_tso_win_divisor.
1269  */
1270 static inline __u32 tcp_max_tso_deferred_mss(const struct tcp_sock *tp)
1271 {
1272     return 3;
1273 }
1274 
1275 /* Returns end sequence number of the receiver's advertised window */
1276 static inline u32 tcp_wnd_end(const struct tcp_sock *tp)
1277 {
1278     return tp->snd_una + tp->snd_wnd;
1279 }
1280 
1281 /* We follow the spirit of RFC2861 to validate cwnd but implement a more
1282  * flexible approach. The RFC suggests cwnd should not be raised unless
1283  * it was fully used previously. And that's exactly what we do in
1284  * congestion avoidance mode. But in slow start we allow cwnd to grow
1285  * as long as the application has used half the cwnd.
1286  * Example :
1287  *    cwnd is 10 (IW10), but application sends 9 frames.
1288  *    We allow cwnd to reach 18 when all frames are ACKed.
1289  * This check is safe because it's as aggressive as slow start which already
1290  * risks 100% overshoot. The advantage is that we discourage application to
1291  * either send more filler packets or data to artificially blow up the cwnd
1292  * usage, and allow application-limited process to probe bw more aggressively.
1293  */
1294 static inline bool tcp_is_cwnd_limited(const struct sock *sk)
1295 {
1296     const struct tcp_sock *tp = tcp_sk(sk);
1297 
1298     /* If in slow start, ensure cwnd grows to twice what was ACKed. */
1299     if (tcp_in_slow_start(tp))
1300         return tcp_snd_cwnd(tp) < 2 * tp->max_packets_out;
1301 
1302     return tp->is_cwnd_limited;
1303 }
1304 
1305 /* BBR congestion control needs pacing.
1306  * Same remark for SO_MAX_PACING_RATE.
1307  * sch_fq packet scheduler is efficiently handling pacing,
1308  * but is not always installed/used.
1309  * Return true if TCP stack should pace packets itself.
1310  */
1311 static inline bool tcp_needs_internal_pacing(const struct sock *sk)
1312 {
1313     return smp_load_acquire(&sk->sk_pacing_status) == SK_PACING_NEEDED;
1314 }
1315 
1316 /* Estimates in how many jiffies next packet for this flow can be sent.
1317  * Scheduling a retransmit timer too early would be silly.
1318  */
1319 static inline unsigned long tcp_pacing_delay(const struct sock *sk)
1320 {
1321     s64 delay = tcp_sk(sk)->tcp_wstamp_ns - tcp_sk(sk)->tcp_clock_cache;
1322 
1323     return delay > 0 ? nsecs_to_jiffies(delay) : 0;
1324 }
1325 
1326 static inline void tcp_reset_xmit_timer(struct sock *sk,
1327                     const int what,
1328                     unsigned long when,
1329                     const unsigned long max_when)
1330 {
1331     inet_csk_reset_xmit_timer(sk, what, when + tcp_pacing_delay(sk),
1332                   max_when);
1333 }
1334 
1335 /* Something is really bad, we could not queue an additional packet,
1336  * because qdisc is full or receiver sent a 0 window, or we are paced.
1337  * We do not want to add fuel to the fire, or abort too early,
1338  * so make sure the timer we arm now is at least 200ms in the future,
1339  * regardless of current icsk_rto value (as it could be ~2ms)
1340  */
1341 static inline unsigned long tcp_probe0_base(const struct sock *sk)
1342 {
1343     return max_t(unsigned long, inet_csk(sk)->icsk_rto, TCP_RTO_MIN);
1344 }
1345 
1346 /* Variant of inet_csk_rto_backoff() used for zero window probes */
1347 static inline unsigned long tcp_probe0_when(const struct sock *sk,
1348                         unsigned long max_when)
1349 {
1350     u8 backoff = min_t(u8, ilog2(TCP_RTO_MAX / TCP_RTO_MIN) + 1,
1351                inet_csk(sk)->icsk_backoff);
1352     u64 when = (u64)tcp_probe0_base(sk) << backoff;
1353 
1354     return (unsigned long)min_t(u64, when, max_when);
1355 }
1356 
1357 static inline void tcp_check_probe_timer(struct sock *sk)
1358 {
1359     if (!tcp_sk(sk)->packets_out && !inet_csk(sk)->icsk_pending)
1360         tcp_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
1361                      tcp_probe0_base(sk), TCP_RTO_MAX);
1362 }
1363 
1364 static inline void tcp_init_wl(struct tcp_sock *tp, u32 seq)
1365 {
1366     tp->snd_wl1 = seq;
1367 }
1368 
1369 static inline void tcp_update_wl(struct tcp_sock *tp, u32 seq)
1370 {
1371     tp->snd_wl1 = seq;
1372 }
1373 
1374 /*
1375  * Calculate(/check) TCP checksum
1376  */
1377 static inline __sum16 tcp_v4_check(int len, __be32 saddr,
1378                    __be32 daddr, __wsum base)
1379 {
1380     return csum_tcpudp_magic(saddr, daddr, len, IPPROTO_TCP, base);
1381 }
1382 
1383 static inline bool tcp_checksum_complete(struct sk_buff *skb)
1384 {
1385     return !skb_csum_unnecessary(skb) &&
1386         __skb_checksum_complete(skb);
1387 }
1388 
1389 bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb,
1390              enum skb_drop_reason *reason);
1391 
1392 
1393 int tcp_filter(struct sock *sk, struct sk_buff *skb);
1394 void tcp_set_state(struct sock *sk, int state);
1395 void tcp_done(struct sock *sk);
1396 int tcp_abort(struct sock *sk, int err);
1397 
1398 static inline void tcp_sack_reset(struct tcp_options_received *rx_opt)
1399 {
1400     rx_opt->dsack = 0;
1401     rx_opt->num_sacks = 0;
1402 }
1403 
1404 void tcp_cwnd_restart(struct sock *sk, s32 delta);
1405 
1406 static inline void tcp_slow_start_after_idle_check(struct sock *sk)
1407 {
1408     const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
1409     struct tcp_sock *tp = tcp_sk(sk);
1410     s32 delta;
1411 
1412     if (!READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_slow_start_after_idle) ||
1413         tp->packets_out || ca_ops->cong_control)
1414         return;
1415     delta = tcp_jiffies32 - tp->lsndtime;
1416     if (delta > inet_csk(sk)->icsk_rto)
1417         tcp_cwnd_restart(sk, delta);
1418 }
1419 
1420 /* Determine a window scaling and initial window to offer. */
1421 void tcp_select_initial_window(const struct sock *sk, int __space,
1422                    __u32 mss, __u32 *rcv_wnd,
1423                    __u32 *window_clamp, int wscale_ok,
1424                    __u8 *rcv_wscale, __u32 init_rcv_wnd);
1425 
1426 static inline int tcp_win_from_space(const struct sock *sk, int space)
1427 {
1428     int tcp_adv_win_scale = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_adv_win_scale);
1429 
1430     return tcp_adv_win_scale <= 0 ?
1431         (space>>(-tcp_adv_win_scale)) :
1432         space - (space>>tcp_adv_win_scale);
1433 }
1434 
1435 /* Note: caller must be prepared to deal with negative returns */
1436 static inline int tcp_space(const struct sock *sk)
1437 {
1438     return tcp_win_from_space(sk, READ_ONCE(sk->sk_rcvbuf) -
1439                   READ_ONCE(sk->sk_backlog.len) -
1440                   atomic_read(&sk->sk_rmem_alloc));
1441 }
1442 
1443 static inline int tcp_full_space(const struct sock *sk)
1444 {
1445     return tcp_win_from_space(sk, READ_ONCE(sk->sk_rcvbuf));
1446 }
1447 
1448 static inline void tcp_adjust_rcv_ssthresh(struct sock *sk)
1449 {
1450     int unused_mem = sk_unused_reserved_mem(sk);
1451     struct tcp_sock *tp = tcp_sk(sk);
1452 
1453     tp->rcv_ssthresh = min(tp->rcv_ssthresh, 4U * tp->advmss);
1454     if (unused_mem)
1455         tp->rcv_ssthresh = max_t(u32, tp->rcv_ssthresh,
1456                      tcp_win_from_space(sk, unused_mem));
1457 }
1458 
1459 void tcp_cleanup_rbuf(struct sock *sk, int copied);
1460 
1461 /* We provision sk_rcvbuf around 200% of sk_rcvlowat.
1462  * If 87.5 % (7/8) of the space has been consumed, we want to override
1463  * SO_RCVLOWAT constraint, since we are receiving skbs with too small
1464  * len/truesize ratio.
1465  */
1466 static inline bool tcp_rmem_pressure(const struct sock *sk)
1467 {
1468     int rcvbuf, threshold;
1469 
1470     if (tcp_under_memory_pressure(sk))
1471         return true;
1472 
1473     rcvbuf = READ_ONCE(sk->sk_rcvbuf);
1474     threshold = rcvbuf - (rcvbuf >> 3);
1475 
1476     return atomic_read(&sk->sk_rmem_alloc) > threshold;
1477 }
1478 
1479 static inline bool tcp_epollin_ready(const struct sock *sk, int target)
1480 {
1481     const struct tcp_sock *tp = tcp_sk(sk);
1482     int avail = READ_ONCE(tp->rcv_nxt) - READ_ONCE(tp->copied_seq);
1483 
1484     if (avail <= 0)
1485         return false;
1486 
1487     return (avail >= target) || tcp_rmem_pressure(sk) ||
1488            (tcp_receive_window(tp) <= inet_csk(sk)->icsk_ack.rcv_mss);
1489 }
1490 
1491 extern void tcp_openreq_init_rwin(struct request_sock *req,
1492                   const struct sock *sk_listener,
1493                   const struct dst_entry *dst);
1494 
1495 void tcp_enter_memory_pressure(struct sock *sk);
1496 void tcp_leave_memory_pressure(struct sock *sk);
1497 
1498 static inline int keepalive_intvl_when(const struct tcp_sock *tp)
1499 {
1500     struct net *net = sock_net((struct sock *)tp);
1501 
1502     return tp->keepalive_intvl ? :
1503         READ_ONCE(net->ipv4.sysctl_tcp_keepalive_intvl);
1504 }
1505 
1506 static inline int keepalive_time_when(const struct tcp_sock *tp)
1507 {
1508     struct net *net = sock_net((struct sock *)tp);
1509 
1510     return tp->keepalive_time ? :
1511         READ_ONCE(net->ipv4.sysctl_tcp_keepalive_time);
1512 }
1513 
1514 static inline int keepalive_probes(const struct tcp_sock *tp)
1515 {
1516     struct net *net = sock_net((struct sock *)tp);
1517 
1518     return tp->keepalive_probes ? :
1519         READ_ONCE(net->ipv4.sysctl_tcp_keepalive_probes);
1520 }
1521 
1522 static inline u32 keepalive_time_elapsed(const struct tcp_sock *tp)
1523 {
1524     const struct inet_connection_sock *icsk = &tp->inet_conn;
1525 
1526     return min_t(u32, tcp_jiffies32 - icsk->icsk_ack.lrcvtime,
1527               tcp_jiffies32 - tp->rcv_tstamp);
1528 }
1529 
1530 static inline int tcp_fin_time(const struct sock *sk)
1531 {
1532     int fin_timeout = tcp_sk(sk)->linger2 ? :
1533         READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_fin_timeout);
1534     const int rto = inet_csk(sk)->icsk_rto;
1535 
1536     if (fin_timeout < (rto << 2) - (rto >> 1))
1537         fin_timeout = (rto << 2) - (rto >> 1);
1538 
1539     return fin_timeout;
1540 }
1541 
1542 static inline bool tcp_paws_check(const struct tcp_options_received *rx_opt,
1543                   int paws_win)
1544 {
1545     if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win)
1546         return true;
1547     if (unlikely(!time_before32(ktime_get_seconds(),
1548                     rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS)))
1549         return true;
1550     /*
1551      * Some OSes send SYN and SYNACK messages with tsval=0 tsecr=0,
1552      * then following tcp messages have valid values. Ignore 0 value,
1553      * or else 'negative' tsval might forbid us to accept their packets.
1554      */
1555     if (!rx_opt->ts_recent)
1556         return true;
1557     return false;
1558 }
1559 
1560 static inline bool tcp_paws_reject(const struct tcp_options_received *rx_opt,
1561                    int rst)
1562 {
1563     if (tcp_paws_check(rx_opt, 0))
1564         return false;
1565 
1566     /* RST segments are not recommended to carry timestamp,
1567        and, if they do, it is recommended to ignore PAWS because
1568        "their cleanup function should take precedence over timestamps."
1569        Certainly, it is mistake. It is necessary to understand the reasons
1570        of this constraint to relax it: if peer reboots, clock may go
1571        out-of-sync and half-open connections will not be reset.
1572        Actually, the problem would be not existing if all
1573        the implementations followed draft about maintaining clock
1574        via reboots. Linux-2.2 DOES NOT!
1575 
1576        However, we can relax time bounds for RST segments to MSL.
1577      */
1578     if (rst && !time_before32(ktime_get_seconds(),
1579                   rx_opt->ts_recent_stamp + TCP_PAWS_MSL))
1580         return false;
1581     return true;
1582 }
1583 
1584 bool tcp_oow_rate_limited(struct net *net, const struct sk_buff *skb,
1585               int mib_idx, u32 *last_oow_ack_time);
1586 
1587 static inline void tcp_mib_init(struct net *net)
1588 {
1589     /* See RFC 2012 */
1590     TCP_ADD_STATS(net, TCP_MIB_RTOALGORITHM, 1);
1591     TCP_ADD_STATS(net, TCP_MIB_RTOMIN, TCP_RTO_MIN*1000/HZ);
1592     TCP_ADD_STATS(net, TCP_MIB_RTOMAX, TCP_RTO_MAX*1000/HZ);
1593     TCP_ADD_STATS(net, TCP_MIB_MAXCONN, -1);
1594 }
1595 
1596 /* from STCP */
1597 static inline void tcp_clear_retrans_hints_partial(struct tcp_sock *tp)
1598 {
1599     tp->lost_skb_hint = NULL;
1600 }
1601 
1602 static inline void tcp_clear_all_retrans_hints(struct tcp_sock *tp)
1603 {
1604     tcp_clear_retrans_hints_partial(tp);
1605     tp->retransmit_skb_hint = NULL;
1606 }
1607 
1608 union tcp_md5_addr {
1609     struct in_addr  a4;
1610 #if IS_ENABLED(CONFIG_IPV6)
1611     struct in6_addr a6;
1612 #endif
1613 };
1614 
1615 /* - key database */
1616 struct tcp_md5sig_key {
1617     struct hlist_node   node;
1618     u8          keylen;
1619     u8          family; /* AF_INET or AF_INET6 */
1620     u8          prefixlen;
1621     u8          flags;
1622     union tcp_md5_addr  addr;
1623     int         l3index; /* set if key added with L3 scope */
1624     u8          key[TCP_MD5SIG_MAXKEYLEN];
1625     struct rcu_head     rcu;
1626 };
1627 
1628 /* - sock block */
1629 struct tcp_md5sig_info {
1630     struct hlist_head   head;
1631     struct rcu_head     rcu;
1632 };
1633 
1634 /* - pseudo header */
1635 struct tcp4_pseudohdr {
1636     __be32      saddr;
1637     __be32      daddr;
1638     __u8        pad;
1639     __u8        protocol;
1640     __be16      len;
1641 };
1642 
1643 struct tcp6_pseudohdr {
1644     struct in6_addr saddr;
1645     struct in6_addr daddr;
1646     __be32      len;
1647     __be32      protocol;   /* including padding */
1648 };
1649 
1650 union tcp_md5sum_block {
1651     struct tcp4_pseudohdr ip4;
1652 #if IS_ENABLED(CONFIG_IPV6)
1653     struct tcp6_pseudohdr ip6;
1654 #endif
1655 };
1656 
1657 /* - pool: digest algorithm, hash description and scratch buffer */
1658 struct tcp_md5sig_pool {
1659     struct ahash_request    *md5_req;
1660     void            *scratch;
1661 };
1662 
1663 /* - functions */
1664 int tcp_v4_md5_hash_skb(char *md5_hash, const struct tcp_md5sig_key *key,
1665             const struct sock *sk, const struct sk_buff *skb);
1666 int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr,
1667            int family, u8 prefixlen, int l3index, u8 flags,
1668            const u8 *newkey, u8 newkeylen, gfp_t gfp);
1669 int tcp_md5_do_del(struct sock *sk, const union tcp_md5_addr *addr,
1670            int family, u8 prefixlen, int l3index, u8 flags);
1671 struct tcp_md5sig_key *tcp_v4_md5_lookup(const struct sock *sk,
1672                      const struct sock *addr_sk);
1673 
1674 #ifdef CONFIG_TCP_MD5SIG
1675 #include <linux/jump_label.h>
1676 extern struct static_key_false tcp_md5_needed;
1677 struct tcp_md5sig_key *__tcp_md5_do_lookup(const struct sock *sk, int l3index,
1678                        const union tcp_md5_addr *addr,
1679                        int family);
1680 static inline struct tcp_md5sig_key *
1681 tcp_md5_do_lookup(const struct sock *sk, int l3index,
1682           const union tcp_md5_addr *addr, int family)
1683 {
1684     if (!static_branch_unlikely(&tcp_md5_needed))
1685         return NULL;
1686     return __tcp_md5_do_lookup(sk, l3index, addr, family);
1687 }
1688 
1689 enum skb_drop_reason
1690 tcp_inbound_md5_hash(const struct sock *sk, const struct sk_buff *skb,
1691              const void *saddr, const void *daddr,
1692              int family, int dif, int sdif);
1693 
1694 
1695 #define tcp_twsk_md5_key(twsk)  ((twsk)->tw_md5_key)
1696 #else
1697 static inline struct tcp_md5sig_key *
1698 tcp_md5_do_lookup(const struct sock *sk, int l3index,
1699           const union tcp_md5_addr *addr, int family)
1700 {
1701     return NULL;
1702 }
1703 
1704 static inline enum skb_drop_reason
1705 tcp_inbound_md5_hash(const struct sock *sk, const struct sk_buff *skb,
1706              const void *saddr, const void *daddr,
1707              int family, int dif, int sdif)
1708 {
1709     return SKB_NOT_DROPPED_YET;
1710 }
1711 #define tcp_twsk_md5_key(twsk)  NULL
1712 #endif
1713 
1714 bool tcp_alloc_md5sig_pool(void);
1715 
1716 struct tcp_md5sig_pool *tcp_get_md5sig_pool(void);
1717 static inline void tcp_put_md5sig_pool(void)
1718 {
1719     local_bh_enable();
1720 }
1721 
1722 int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *, const struct sk_buff *,
1723               unsigned int header_len);
1724 int tcp_md5_hash_key(struct tcp_md5sig_pool *hp,
1725              const struct tcp_md5sig_key *key);
1726 
1727 /* From tcp_fastopen.c */
1728 void tcp_fastopen_cache_get(struct sock *sk, u16 *mss,
1729                 struct tcp_fastopen_cookie *cookie);
1730 void tcp_fastopen_cache_set(struct sock *sk, u16 mss,
1731                 struct tcp_fastopen_cookie *cookie, bool syn_lost,
1732                 u16 try_exp);
1733 struct tcp_fastopen_request {
1734     /* Fast Open cookie. Size 0 means a cookie request */
1735     struct tcp_fastopen_cookie  cookie;
1736     struct msghdr           *data;  /* data in MSG_FASTOPEN */
1737     size_t              size;
1738     int             copied; /* queued in tcp_connect() */
1739     struct ubuf_info        *uarg;
1740 };
1741 void tcp_free_fastopen_req(struct tcp_sock *tp);
1742 void tcp_fastopen_destroy_cipher(struct sock *sk);
1743 void tcp_fastopen_ctx_destroy(struct net *net);
1744 int tcp_fastopen_reset_cipher(struct net *net, struct sock *sk,
1745                   void *primary_key, void *backup_key);
1746 int tcp_fastopen_get_cipher(struct net *net, struct inet_connection_sock *icsk,
1747                 u64 *key);
1748 void tcp_fastopen_add_skb(struct sock *sk, struct sk_buff *skb);
1749 struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb,
1750                   struct request_sock *req,
1751                   struct tcp_fastopen_cookie *foc,
1752                   const struct dst_entry *dst);
1753 void tcp_fastopen_init_key_once(struct net *net);
1754 bool tcp_fastopen_cookie_check(struct sock *sk, u16 *mss,
1755                  struct tcp_fastopen_cookie *cookie);
1756 bool tcp_fastopen_defer_connect(struct sock *sk, int *err);
1757 #define TCP_FASTOPEN_KEY_LENGTH sizeof(siphash_key_t)
1758 #define TCP_FASTOPEN_KEY_MAX 2
1759 #define TCP_FASTOPEN_KEY_BUF_LENGTH \
1760     (TCP_FASTOPEN_KEY_LENGTH * TCP_FASTOPEN_KEY_MAX)
1761 
1762 /* Fastopen key context */
1763 struct tcp_fastopen_context {
1764     siphash_key_t   key[TCP_FASTOPEN_KEY_MAX];
1765     int     num;
1766     struct rcu_head rcu;
1767 };
1768 
1769 void tcp_fastopen_active_disable(struct sock *sk);
1770 bool tcp_fastopen_active_should_disable(struct sock *sk);
1771 void tcp_fastopen_active_disable_ofo_check(struct sock *sk);
1772 void tcp_fastopen_active_detect_blackhole(struct sock *sk, bool expired);
1773 
1774 /* Caller needs to wrap with rcu_read_(un)lock() */
1775 static inline
1776 struct tcp_fastopen_context *tcp_fastopen_get_ctx(const struct sock *sk)
1777 {
1778     struct tcp_fastopen_context *ctx;
1779 
1780     ctx = rcu_dereference(inet_csk(sk)->icsk_accept_queue.fastopenq.ctx);
1781     if (!ctx)
1782         ctx = rcu_dereference(sock_net(sk)->ipv4.tcp_fastopen_ctx);
1783     return ctx;
1784 }
1785 
1786 static inline
1787 bool tcp_fastopen_cookie_match(const struct tcp_fastopen_cookie *foc,
1788                    const struct tcp_fastopen_cookie *orig)
1789 {
1790     if (orig->len == TCP_FASTOPEN_COOKIE_SIZE &&
1791         orig->len == foc->len &&
1792         !memcmp(orig->val, foc->val, foc->len))
1793         return true;
1794     return false;
1795 }
1796 
1797 static inline
1798 int tcp_fastopen_context_len(const struct tcp_fastopen_context *ctx)
1799 {
1800     return ctx->num;
1801 }
1802 
1803 /* Latencies incurred by various limits for a sender. They are
1804  * chronograph-like stats that are mutually exclusive.
1805  */
1806 enum tcp_chrono {
1807     TCP_CHRONO_UNSPEC,
1808     TCP_CHRONO_BUSY, /* Actively sending data (non-empty write queue) */
1809     TCP_CHRONO_RWND_LIMITED, /* Stalled by insufficient receive window */
1810     TCP_CHRONO_SNDBUF_LIMITED, /* Stalled by insufficient send buffer */
1811     __TCP_CHRONO_MAX,
1812 };
1813 
1814 void tcp_chrono_start(struct sock *sk, const enum tcp_chrono type);
1815 void tcp_chrono_stop(struct sock *sk, const enum tcp_chrono type);
1816 
1817 /* This helper is needed, because skb->tcp_tsorted_anchor uses
1818  * the same memory storage than skb->destructor/_skb_refdst
1819  */
1820 static inline void tcp_skb_tsorted_anchor_cleanup(struct sk_buff *skb)
1821 {
1822     skb->destructor = NULL;
1823     skb->_skb_refdst = 0UL;
1824 }
1825 
1826 #define tcp_skb_tsorted_save(skb) {     \
1827     unsigned long _save = skb->_skb_refdst; \
1828     skb->_skb_refdst = 0UL;
1829 
1830 #define tcp_skb_tsorted_restore(skb)        \
1831     skb->_skb_refdst = _save;       \
1832 }
1833 
1834 void tcp_write_queue_purge(struct sock *sk);
1835 
1836 static inline struct sk_buff *tcp_rtx_queue_head(const struct sock *sk)
1837 {
1838     return skb_rb_first(&sk->tcp_rtx_queue);
1839 }
1840 
1841 static inline struct sk_buff *tcp_rtx_queue_tail(const struct sock *sk)
1842 {
1843     return skb_rb_last(&sk->tcp_rtx_queue);
1844 }
1845 
1846 static inline struct sk_buff *tcp_write_queue_tail(const struct sock *sk)
1847 {
1848     return skb_peek_tail(&sk->sk_write_queue);
1849 }
1850 
1851 #define tcp_for_write_queue_from_safe(skb, tmp, sk)         \
1852     skb_queue_walk_from_safe(&(sk)->sk_write_queue, skb, tmp)
1853 
1854 static inline struct sk_buff *tcp_send_head(const struct sock *sk)
1855 {
1856     return skb_peek(&sk->sk_write_queue);
1857 }
1858 
1859 static inline bool tcp_skb_is_last(const struct sock *sk,
1860                    const struct sk_buff *skb)
1861 {
1862     return skb_queue_is_last(&sk->sk_write_queue, skb);
1863 }
1864 
1865 /**
1866  * tcp_write_queue_empty - test if any payload (or FIN) is available in write queue
1867  * @sk: socket
1868  *
1869  * Since the write queue can have a temporary empty skb in it,
1870  * we must not use "return skb_queue_empty(&sk->sk_write_queue)"
1871  */
1872 static inline bool tcp_write_queue_empty(const struct sock *sk)
1873 {
1874     const struct tcp_sock *tp = tcp_sk(sk);
1875 
1876     return tp->write_seq == tp->snd_nxt;
1877 }
1878 
1879 static inline bool tcp_rtx_queue_empty(const struct sock *sk)
1880 {
1881     return RB_EMPTY_ROOT(&sk->tcp_rtx_queue);
1882 }
1883 
1884 static inline bool tcp_rtx_and_write_queues_empty(const struct sock *sk)
1885 {
1886     return tcp_rtx_queue_empty(sk) && tcp_write_queue_empty(sk);
1887 }
1888 
1889 static inline void tcp_add_write_queue_tail(struct sock *sk, struct sk_buff *skb)
1890 {
1891     __skb_queue_tail(&sk->sk_write_queue, skb);
1892 
1893     /* Queue it, remembering where we must start sending. */
1894     if (sk->sk_write_queue.next == skb)
1895         tcp_chrono_start(sk, TCP_CHRONO_BUSY);
1896 }
1897 
1898 /* Insert new before skb on the write queue of sk.  */
1899 static inline void tcp_insert_write_queue_before(struct sk_buff *new,
1900                           struct sk_buff *skb,
1901                           struct sock *sk)
1902 {
1903     __skb_queue_before(&sk->sk_write_queue, skb, new);
1904 }
1905 
1906 static inline void tcp_unlink_write_queue(struct sk_buff *skb, struct sock *sk)
1907 {
1908     tcp_skb_tsorted_anchor_cleanup(skb);
1909     __skb_unlink(skb, &sk->sk_write_queue);
1910 }
1911 
1912 void tcp_rbtree_insert(struct rb_root *root, struct sk_buff *skb);
1913 
1914 static inline void tcp_rtx_queue_unlink(struct sk_buff *skb, struct sock *sk)
1915 {
1916     tcp_skb_tsorted_anchor_cleanup(skb);
1917     rb_erase(&skb->rbnode, &sk->tcp_rtx_queue);
1918 }
1919 
1920 static inline void tcp_rtx_queue_unlink_and_free(struct sk_buff *skb, struct sock *sk)
1921 {
1922     list_del(&skb->tcp_tsorted_anchor);
1923     tcp_rtx_queue_unlink(skb, sk);
1924     tcp_wmem_free_skb(sk, skb);
1925 }
1926 
1927 static inline void tcp_push_pending_frames(struct sock *sk)
1928 {
1929     if (tcp_send_head(sk)) {
1930         struct tcp_sock *tp = tcp_sk(sk);
1931 
1932         __tcp_push_pending_frames(sk, tcp_current_mss(sk), tp->nonagle);
1933     }
1934 }
1935 
1936 /* Start sequence of the skb just after the highest skb with SACKed
1937  * bit, valid only if sacked_out > 0 or when the caller has ensured
1938  * validity by itself.
1939  */
1940 static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp)
1941 {
1942     if (!tp->sacked_out)
1943         return tp->snd_una;
1944 
1945     if (tp->highest_sack == NULL)
1946         return tp->snd_nxt;
1947 
1948     return TCP_SKB_CB(tp->highest_sack)->seq;
1949 }
1950 
1951 static inline void tcp_advance_highest_sack(struct sock *sk, struct sk_buff *skb)
1952 {
1953     tcp_sk(sk)->highest_sack = skb_rb_next(skb);
1954 }
1955 
1956 static inline struct sk_buff *tcp_highest_sack(struct sock *sk)
1957 {
1958     return tcp_sk(sk)->highest_sack;
1959 }
1960 
1961 static inline void tcp_highest_sack_reset(struct sock *sk)
1962 {
1963     tcp_sk(sk)->highest_sack = tcp_rtx_queue_head(sk);
1964 }
1965 
1966 /* Called when old skb is about to be deleted and replaced by new skb */
1967 static inline void tcp_highest_sack_replace(struct sock *sk,
1968                         struct sk_buff *old,
1969                         struct sk_buff *new)
1970 {
1971     if (old == tcp_highest_sack(sk))
1972         tcp_sk(sk)->highest_sack = new;
1973 }
1974 
1975 /* This helper checks if socket has IP_TRANSPARENT set */
1976 static inline bool inet_sk_transparent(const struct sock *sk)
1977 {
1978     switch (sk->sk_state) {
1979     case TCP_TIME_WAIT:
1980         return inet_twsk(sk)->tw_transparent;
1981     case TCP_NEW_SYN_RECV:
1982         return inet_rsk(inet_reqsk(sk))->no_srccheck;
1983     }
1984     return inet_sk(sk)->transparent;
1985 }
1986 
1987 /* Determines whether this is a thin stream (which may suffer from
1988  * increased latency). Used to trigger latency-reducing mechanisms.
1989  */
1990 static inline bool tcp_stream_is_thin(struct tcp_sock *tp)
1991 {
1992     return tp->packets_out < 4 && !tcp_in_initial_slowstart(tp);
1993 }
1994 
1995 /* /proc */
1996 enum tcp_seq_states {
1997     TCP_SEQ_STATE_LISTENING,
1998     TCP_SEQ_STATE_ESTABLISHED,
1999 };
2000 
2001 void *tcp_seq_start(struct seq_file *seq, loff_t *pos);
2002 void *tcp_seq_next(struct seq_file *seq, void *v, loff_t *pos);
2003 void tcp_seq_stop(struct seq_file *seq, void *v);
2004 
2005 struct tcp_seq_afinfo {
2006     sa_family_t         family;
2007 };
2008 
2009 struct tcp_iter_state {
2010     struct seq_net_private  p;
2011     enum tcp_seq_states state;
2012     struct sock     *syn_wait_sk;
2013     int         bucket, offset, sbucket, num;
2014     loff_t          last_pos;
2015 };
2016 
2017 extern struct request_sock_ops tcp_request_sock_ops;
2018 extern struct request_sock_ops tcp6_request_sock_ops;
2019 
2020 void tcp_v4_destroy_sock(struct sock *sk);
2021 
2022 struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
2023                 netdev_features_t features);
2024 struct sk_buff *tcp_gro_receive(struct list_head *head, struct sk_buff *skb);
2025 INDIRECT_CALLABLE_DECLARE(int tcp4_gro_complete(struct sk_buff *skb, int thoff));
2026 INDIRECT_CALLABLE_DECLARE(struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb));
2027 INDIRECT_CALLABLE_DECLARE(int tcp6_gro_complete(struct sk_buff *skb, int thoff));
2028 INDIRECT_CALLABLE_DECLARE(struct sk_buff *tcp6_gro_receive(struct list_head *head, struct sk_buff *skb));
2029 int tcp_gro_complete(struct sk_buff *skb);
2030 
2031 void __tcp_v4_send_check(struct sk_buff *skb, __be32 saddr, __be32 daddr);
2032 
2033 static inline u32 tcp_notsent_lowat(const struct tcp_sock *tp)
2034 {
2035     struct net *net = sock_net((struct sock *)tp);
2036     return tp->notsent_lowat ?: READ_ONCE(net->ipv4.sysctl_tcp_notsent_lowat);
2037 }
2038 
2039 bool tcp_stream_memory_free(const struct sock *sk, int wake);
2040 
2041 #ifdef CONFIG_PROC_FS
2042 int tcp4_proc_init(void);
2043 void tcp4_proc_exit(void);
2044 #endif
2045 
2046 int tcp_rtx_synack(const struct sock *sk, struct request_sock *req);
2047 int tcp_conn_request(struct request_sock_ops *rsk_ops,
2048              const struct tcp_request_sock_ops *af_ops,
2049              struct sock *sk, struct sk_buff *skb);
2050 
2051 /* TCP af-specific functions */
2052 struct tcp_sock_af_ops {
2053 #ifdef CONFIG_TCP_MD5SIG
2054     struct tcp_md5sig_key   *(*md5_lookup) (const struct sock *sk,
2055                         const struct sock *addr_sk);
2056     int     (*calc_md5_hash)(char *location,
2057                      const struct tcp_md5sig_key *md5,
2058                      const struct sock *sk,
2059                      const struct sk_buff *skb);
2060     int     (*md5_parse)(struct sock *sk,
2061                      int optname,
2062                      sockptr_t optval,
2063                      int optlen);
2064 #endif
2065 };
2066 
2067 struct tcp_request_sock_ops {
2068     u16 mss_clamp;
2069 #ifdef CONFIG_TCP_MD5SIG
2070     struct tcp_md5sig_key *(*req_md5_lookup)(const struct sock *sk,
2071                          const struct sock *addr_sk);
2072     int     (*calc_md5_hash) (char *location,
2073                       const struct tcp_md5sig_key *md5,
2074                       const struct sock *sk,
2075                       const struct sk_buff *skb);
2076 #endif
2077 #ifdef CONFIG_SYN_COOKIES
2078     __u32 (*cookie_init_seq)(const struct sk_buff *skb,
2079                  __u16 *mss);
2080 #endif
2081     struct dst_entry *(*route_req)(const struct sock *sk,
2082                        struct sk_buff *skb,
2083                        struct flowi *fl,
2084                        struct request_sock *req);
2085     u32 (*init_seq)(const struct sk_buff *skb);
2086     u32 (*init_ts_off)(const struct net *net, const struct sk_buff *skb);
2087     int (*send_synack)(const struct sock *sk, struct dst_entry *dst,
2088                struct flowi *fl, struct request_sock *req,
2089                struct tcp_fastopen_cookie *foc,
2090                enum tcp_synack_type synack_type,
2091                struct sk_buff *syn_skb);
2092 };
2093 
2094 extern const struct tcp_request_sock_ops tcp_request_sock_ipv4_ops;
2095 #if IS_ENABLED(CONFIG_IPV6)
2096 extern const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops;
2097 #endif
2098 
2099 #ifdef CONFIG_SYN_COOKIES
2100 static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
2101                      const struct sock *sk, struct sk_buff *skb,
2102                      __u16 *mss)
2103 {
2104     tcp_synq_overflow(sk);
2105     __NET_INC_STATS(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
2106     return ops->cookie_init_seq(skb, mss);
2107 }
2108 #else
2109 static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
2110                      const struct sock *sk, struct sk_buff *skb,
2111                      __u16 *mss)
2112 {
2113     return 0;
2114 }
2115 #endif
2116 
2117 int tcpv4_offload_init(void);
2118 
2119 void tcp_v4_init(void);
2120 void tcp_init(void);
2121 
2122 /* tcp_recovery.c */
2123 void tcp_mark_skb_lost(struct sock *sk, struct sk_buff *skb);
2124 void tcp_newreno_mark_lost(struct sock *sk, bool snd_una_advanced);
2125 extern s32 tcp_rack_skb_timeout(struct tcp_sock *tp, struct sk_buff *skb,
2126                 u32 reo_wnd);
2127 extern bool tcp_rack_mark_lost(struct sock *sk);
2128 extern void tcp_rack_advance(struct tcp_sock *tp, u8 sacked, u32 end_seq,
2129                  u64 xmit_time);
2130 extern void tcp_rack_reo_timeout(struct sock *sk);
2131 extern void tcp_rack_update_reo_wnd(struct sock *sk, struct rate_sample *rs);
2132 
2133 /* At how many usecs into the future should the RTO fire? */
2134 static inline s64 tcp_rto_delta_us(const struct sock *sk)
2135 {
2136     const struct sk_buff *skb = tcp_rtx_queue_head(sk);
2137     u32 rto = inet_csk(sk)->icsk_rto;
2138     u64 rto_time_stamp_us = tcp_skb_timestamp_us(skb) + jiffies_to_usecs(rto);
2139 
2140     return rto_time_stamp_us - tcp_sk(sk)->tcp_mstamp;
2141 }
2142 
2143 /*
2144  * Save and compile IPv4 options, return a pointer to it
2145  */
2146 static inline struct ip_options_rcu *tcp_v4_save_options(struct net *net,
2147                              struct sk_buff *skb)
2148 {
2149     const struct ip_options *opt = &TCP_SKB_CB(skb)->header.h4.opt;
2150     struct ip_options_rcu *dopt = NULL;
2151 
2152     if (opt->optlen) {
2153         int opt_size = sizeof(*dopt) + opt->optlen;
2154 
2155         dopt = kmalloc(opt_size, GFP_ATOMIC);
2156         if (dopt && __ip_options_echo(net, &dopt->opt, skb, opt)) {
2157             kfree(dopt);
2158             dopt = NULL;
2159         }
2160     }
2161     return dopt;
2162 }
2163 
2164 /* locally generated TCP pure ACKs have skb->truesize == 2
2165  * (check tcp_send_ack() in net/ipv4/tcp_output.c )
2166  * This is much faster than dissecting the packet to find out.
2167  * (Think of GRE encapsulations, IPv4, IPv6, ...)
2168  */
2169 static inline bool skb_is_tcp_pure_ack(const struct sk_buff *skb)
2170 {
2171     return skb->truesize == 2;
2172 }
2173 
2174 static inline void skb_set_tcp_pure_ack(struct sk_buff *skb)
2175 {
2176     skb->truesize = 2;
2177 }
2178 
2179 static inline int tcp_inq(struct sock *sk)
2180 {
2181     struct tcp_sock *tp = tcp_sk(sk);
2182     int answ;
2183 
2184     if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) {
2185         answ = 0;
2186     } else if (sock_flag(sk, SOCK_URGINLINE) ||
2187            !tp->urg_data ||
2188            before(tp->urg_seq, tp->copied_seq) ||
2189            !before(tp->urg_seq, tp->rcv_nxt)) {
2190 
2191         answ = tp->rcv_nxt - tp->copied_seq;
2192 
2193         /* Subtract 1, if FIN was received */
2194         if (answ && sock_flag(sk, SOCK_DONE))
2195             answ--;
2196     } else {
2197         answ = tp->urg_seq - tp->copied_seq;
2198     }
2199 
2200     return answ;
2201 }
2202 
2203 int tcp_peek_len(struct socket *sock);
2204 
2205 static inline void tcp_segs_in(struct tcp_sock *tp, const struct sk_buff *skb)
2206 {
2207     u16 segs_in;
2208 
2209     segs_in = max_t(u16, 1, skb_shinfo(skb)->gso_segs);
2210 
2211     /* We update these fields while other threads might
2212      * read them from tcp_get_info()
2213      */
2214     WRITE_ONCE(tp->segs_in, tp->segs_in + segs_in);
2215     if (skb->len > tcp_hdrlen(skb))
2216         WRITE_ONCE(tp->data_segs_in, tp->data_segs_in + segs_in);
2217 }
2218 
2219 /*
2220  * TCP listen path runs lockless.
2221  * We forced "struct sock" to be const qualified to make sure
2222  * we don't modify one of its field by mistake.
2223  * Here, we increment sk_drops which is an atomic_t, so we can safely
2224  * make sock writable again.
2225  */
2226 static inline void tcp_listendrop(const struct sock *sk)
2227 {
2228     atomic_inc(&((struct sock *)sk)->sk_drops);
2229     __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENDROPS);
2230 }
2231 
2232 enum hrtimer_restart tcp_pace_kick(struct hrtimer *timer);
2233 
2234 /*
2235  * Interface for adding Upper Level Protocols over TCP
2236  */
2237 
2238 #define TCP_ULP_NAME_MAX    16
2239 #define TCP_ULP_MAX     128
2240 #define TCP_ULP_BUF_MAX     (TCP_ULP_NAME_MAX*TCP_ULP_MAX)
2241 
2242 struct tcp_ulp_ops {
2243     struct list_head    list;
2244 
2245     /* initialize ulp */
2246     int (*init)(struct sock *sk);
2247     /* update ulp */
2248     void (*update)(struct sock *sk, struct proto *p,
2249                void (*write_space)(struct sock *sk));
2250     /* cleanup ulp */
2251     void (*release)(struct sock *sk);
2252     /* diagnostic */
2253     int (*get_info)(const struct sock *sk, struct sk_buff *skb);
2254     size_t (*get_info_size)(const struct sock *sk);
2255     /* clone ulp */
2256     void (*clone)(const struct request_sock *req, struct sock *newsk,
2257               const gfp_t priority);
2258 
2259     char        name[TCP_ULP_NAME_MAX];
2260     struct module   *owner;
2261 };
2262 int tcp_register_ulp(struct tcp_ulp_ops *type);
2263 void tcp_unregister_ulp(struct tcp_ulp_ops *type);
2264 int tcp_set_ulp(struct sock *sk, const char *name);
2265 void tcp_get_available_ulp(char *buf, size_t len);
2266 void tcp_cleanup_ulp(struct sock *sk);
2267 void tcp_update_ulp(struct sock *sk, struct proto *p,
2268             void (*write_space)(struct sock *sk));
2269 
2270 #define MODULE_ALIAS_TCP_ULP(name)              \
2271     __MODULE_INFO(alias, alias_userspace, name);        \
2272     __MODULE_INFO(alias, alias_tcp_ulp, "tcp-ulp-" name)
2273 
2274 #ifdef CONFIG_NET_SOCK_MSG
2275 struct sk_msg;
2276 struct sk_psock;
2277 
2278 #ifdef CONFIG_BPF_SYSCALL
2279 struct proto *tcp_bpf_get_proto(struct sock *sk, struct sk_psock *psock);
2280 int tcp_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);
2281 void tcp_bpf_clone(const struct sock *sk, struct sock *newsk);
2282 #endif /* CONFIG_BPF_SYSCALL */
2283 
2284 int tcp_bpf_sendmsg_redir(struct sock *sk, struct sk_msg *msg, u32 bytes,
2285               int flags);
2286 #endif /* CONFIG_NET_SOCK_MSG */
2287 
2288 #if !defined(CONFIG_BPF_SYSCALL) || !defined(CONFIG_NET_SOCK_MSG)
2289 static inline void tcp_bpf_clone(const struct sock *sk, struct sock *newsk)
2290 {
2291 }
2292 #endif
2293 
2294 #ifdef CONFIG_CGROUP_BPF
2295 static inline void bpf_skops_init_skb(struct bpf_sock_ops_kern *skops,
2296                       struct sk_buff *skb,
2297                       unsigned int end_offset)
2298 {
2299     skops->skb = skb;
2300     skops->skb_data_end = skb->data + end_offset;
2301 }
2302 #else
2303 static inline void bpf_skops_init_skb(struct bpf_sock_ops_kern *skops,
2304                       struct sk_buff *skb,
2305                       unsigned int end_offset)
2306 {
2307 }
2308 #endif
2309 
2310 /* Call BPF_SOCK_OPS program that returns an int. If the return value
2311  * is < 0, then the BPF op failed (for example if the loaded BPF
2312  * program does not support the chosen operation or there is no BPF
2313  * program loaded).
2314  */
2315 #ifdef CONFIG_BPF
2316 static inline int tcp_call_bpf(struct sock *sk, int op, u32 nargs, u32 *args)
2317 {
2318     struct bpf_sock_ops_kern sock_ops;
2319     int ret;
2320 
2321     memset(&sock_ops, 0, offsetof(struct bpf_sock_ops_kern, temp));
2322     if (sk_fullsock(sk)) {
2323         sock_ops.is_fullsock = 1;
2324         sock_owned_by_me(sk);
2325     }
2326 
2327     sock_ops.sk = sk;
2328     sock_ops.op = op;
2329     if (nargs > 0)
2330         memcpy(sock_ops.args, args, nargs * sizeof(*args));
2331 
2332     ret = BPF_CGROUP_RUN_PROG_SOCK_OPS(&sock_ops);
2333     if (ret == 0)
2334         ret = sock_ops.reply;
2335     else
2336         ret = -1;
2337     return ret;
2338 }
2339 
2340 static inline int tcp_call_bpf_2arg(struct sock *sk, int op, u32 arg1, u32 arg2)
2341 {
2342     u32 args[2] = {arg1, arg2};
2343 
2344     return tcp_call_bpf(sk, op, 2, args);
2345 }
2346 
2347 static inline int tcp_call_bpf_3arg(struct sock *sk, int op, u32 arg1, u32 arg2,
2348                     u32 arg3)
2349 {
2350     u32 args[3] = {arg1, arg2, arg3};
2351 
2352     return tcp_call_bpf(sk, op, 3, args);
2353 }
2354 
2355 #else
2356 static inline int tcp_call_bpf(struct sock *sk, int op, u32 nargs, u32 *args)
2357 {
2358     return -EPERM;
2359 }
2360 
2361 static inline int tcp_call_bpf_2arg(struct sock *sk, int op, u32 arg1, u32 arg2)
2362 {
2363     return -EPERM;
2364 }
2365 
2366 static inline int tcp_call_bpf_3arg(struct sock *sk, int op, u32 arg1, u32 arg2,
2367                     u32 arg3)
2368 {
2369     return -EPERM;
2370 }
2371 
2372 #endif
2373 
2374 static inline u32 tcp_timeout_init(struct sock *sk)
2375 {
2376     int timeout;
2377 
2378     timeout = tcp_call_bpf(sk, BPF_SOCK_OPS_TIMEOUT_INIT, 0, NULL);
2379 
2380     if (timeout <= 0)
2381         timeout = TCP_TIMEOUT_INIT;
2382     return min_t(int, timeout, TCP_RTO_MAX);
2383 }
2384 
2385 static inline u32 tcp_rwnd_init_bpf(struct sock *sk)
2386 {
2387     int rwnd;
2388 
2389     rwnd = tcp_call_bpf(sk, BPF_SOCK_OPS_RWND_INIT, 0, NULL);
2390 
2391     if (rwnd < 0)
2392         rwnd = 0;
2393     return rwnd;
2394 }
2395 
2396 static inline bool tcp_bpf_ca_needs_ecn(struct sock *sk)
2397 {
2398     return (tcp_call_bpf(sk, BPF_SOCK_OPS_NEEDS_ECN, 0, NULL) == 1);
2399 }
2400 
2401 static inline void tcp_bpf_rtt(struct sock *sk)
2402 {
2403     if (BPF_SOCK_OPS_TEST_FLAG(tcp_sk(sk), BPF_SOCK_OPS_RTT_CB_FLAG))
2404         tcp_call_bpf(sk, BPF_SOCK_OPS_RTT_CB, 0, NULL);
2405 }
2406 
2407 #if IS_ENABLED(CONFIG_SMC)
2408 extern struct static_key_false tcp_have_smc;
2409 #endif
2410 
2411 #if IS_ENABLED(CONFIG_TLS_DEVICE)
2412 void clean_acked_data_enable(struct inet_connection_sock *icsk,
2413                  void (*cad)(struct sock *sk, u32 ack_seq));
2414 void clean_acked_data_disable(struct inet_connection_sock *icsk);
2415 void clean_acked_data_flush(void);
2416 #endif
2417 
2418 DECLARE_STATIC_KEY_FALSE(tcp_tx_delay_enabled);
2419 static inline void tcp_add_tx_delay(struct sk_buff *skb,
2420                     const struct tcp_sock *tp)
2421 {
2422     if (static_branch_unlikely(&tcp_tx_delay_enabled))
2423         skb->skb_mstamp_ns += (u64)tp->tcp_tx_delay * NSEC_PER_USEC;
2424 }
2425 
2426 /* Compute Earliest Departure Time for some control packets
2427  * like ACK or RST for TIME_WAIT or non ESTABLISHED sockets.
2428  */
2429 static inline u64 tcp_transmit_time(const struct sock *sk)
2430 {
2431     if (static_branch_unlikely(&tcp_tx_delay_enabled)) {
2432         u32 delay = (sk->sk_state == TCP_TIME_WAIT) ?
2433             tcp_twsk(sk)->tw_tx_delay : tcp_sk(sk)->tcp_tx_delay;
2434 
2435         return tcp_clock_ns() + (u64)delay * NSEC_PER_USEC;
2436     }
2437     return 0;
2438 }
2439 
2440 #endif  /* _TCP_H */