0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
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
0063
0064
0065 #define MAX_TCP_WINDOW 32767U
0066
0067
0068 #define TCP_MIN_MSS 88U
0069
0070
0071 #define TCP_BASE_MSS 1024
0072
0073
0074 #define TCP_PROBE_INTERVAL 600
0075
0076
0077 #define TCP_PROBE_THRESHOLD 8
0078
0079
0080 #define TCP_FASTRETRANS_THRESH 3
0081
0082
0083 #define TCP_MAX_QUICKACKS 16U
0084
0085
0086 #define TCP_MAX_WSCALE 14U
0087
0088
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
0095
0096
0097
0098
0099
0100 #define TCP_RETR2 15
0101
0102
0103
0104
0105
0106
0107 #define TCP_SYN_RETRIES 6
0108
0109
0110
0111
0112
0113
0114
0115
0116 #define TCP_SYNACK_RETRIES 5
0117
0118
0119
0120
0121
0122
0123 #define TCP_TIMEWAIT_LEN (60*HZ)
0124
0125 #define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
0126
0127
0128
0129
0130
0131 #define TCP_FIN_TIMEOUT_MAX (120 * HZ)
0132
0133 #define TCP_DELACK_MAX ((unsigned)(HZ/5))
0134 #if HZ >= 100
0135 #define TCP_DELACK_MIN ((unsigned)(HZ/25))
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)
0144 #define TCP_TIMEOUT_INIT ((unsigned)(1*HZ))
0145 #define TCP_TIMEOUT_FALLBACK ((unsigned)(3*HZ))
0146
0147
0148
0149
0150
0151
0152 #define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U))
0153
0154
0155 #define TCP_KEEPALIVE_TIME (120*60*HZ)
0156 #define TCP_KEEPALIVE_PROBES 9
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)
0165
0166 #define TCP_PAWS_24DAYS (60 * 60 * 24 * 24)
0167 #define TCP_PAWS_MSL 60
0168
0169
0170
0171
0172
0173 #define TCP_PAWS_WINDOW 1
0174
0175
0176
0177
0178
0179
0180
0181 #define TCPOPT_NOP 1
0182 #define TCPOPT_EOL 0
0183 #define TCPOPT_MSS 2
0184 #define TCPOPT_WINDOW 3
0185 #define TCPOPT_SACK_PERM 4
0186 #define TCPOPT_SACK 5
0187 #define TCPOPT_TIMESTAMP 8
0188 #define TCPOPT_MD5SIG 19
0189 #define TCPOPT_MPTCP 30
0190 #define TCPOPT_FASTOPEN 34
0191 #define TCPOPT_EXP 254
0192
0193
0194
0195 #define TCPOPT_FASTOPEN_MAGIC 0xF989
0196 #define TCPOPT_SMC_MAGIC 0xE2D4C3D9
0197
0198
0199
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
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
0223 #define TCP_NAGLE_OFF 1
0224 #define TCP_NAGLE_CORK 2
0225 #define TCP_NAGLE_PUSH 4
0226
0227
0228 #define TCP_THIN_LINEAR_RETRIES 6
0229
0230
0231 #define TCP_INIT_CWND 10
0232
0233
0234 #define TFO_CLIENT_ENABLE 1
0235 #define TFO_SERVER_ENABLE 2
0236 #define TFO_CLIENT_NO_COOKIE 4
0237
0238
0239 #define TFO_SERVER_COOKIE_NOT_REQD 0x200
0240
0241
0242
0243
0244 #define TFO_SERVER_WO_SOCKOPT1 0x400
0245
0246
0247
0248 extern int sysctl_tcp_max_orphans;
0249 extern long sysctl_tcp_mem[3];
0250
0251 #define TCP_RACK_LOSS_DETECTION 0x1
0252 #define TCP_RACK_STATIC_REO_WND 0x2
0253 #define TCP_RACK_NO_DUPTHRESH 0x4
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
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
0272
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
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
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
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
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
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
0491
0492
0493
0494
0495
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
0502
0503
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
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
0549
0550
0551
0552
0553
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
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
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
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
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
0647 static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize)
0648 {
0649 int cutoff;
0650
0651
0652
0653
0654
0655
0656
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
0670 void tcp_get_info(struct sock *, struct tcp_info *);
0671
0672
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
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
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
0745 static inline u32 tcp_min_rtt(const struct tcp_sock *tp)
0746 {
0747 return minmax_get(&tp->rtt_min);
0748 }
0749
0750
0751
0752
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
0764
0765
0766
0767 u32 __tcp_select_window(struct sock *sk);
0768
0769 void tcp_send_window_probe(struct sock *sk);
0770
0771
0772
0773
0774
0775 #define tcp_jiffies32 ((u32)jiffies)
0776
0777
0778
0779
0780
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
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
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
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
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
0845
0846
0847
0848
0849
0850 struct tcp_skb_cb {
0851 __u32 seq;
0852 __u32 end_seq;
0853 union {
0854
0855
0856
0857
0858
0859
0860 __u32 tcp_tw_isn;
0861 struct {
0862 u16 tcp_gso_segs;
0863 u16 tcp_gso_size;
0864 };
0865 };
0866 __u8 tcp_flags;
0867
0868 __u8 sacked;
0869 #define TCPCB_SACKED_ACKED 0x01
0870 #define TCPCB_SACKED_RETRANS 0x02
0871 #define TCPCB_LOST 0x04
0872 #define TCPCB_TAGBITS 0x07
0873 #define TCPCB_REPAIRED 0x10
0874 #define TCPCB_EVER_RETRANS 0x80
0875 #define TCPCB_RETRANS (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS| \
0876 TCPCB_REPAIRED)
0877
0878 __u8 ip_dsfield;
0879 __u8 txstamp_ack:1,
0880 eor:1,
0881 has_rxtstamp:1,
0882 unused:5;
0883 __u32 ack_seq;
0884 union {
0885 struct {
0886 #define TCPCB_DELIVERED_CE_MASK ((1U<<20) - 1)
0887
0888 __u32 is_app_limited:1,
0889 delivered_ce:20,
0890 unused:11;
0891
0892 __u32 delivered;
0893
0894 u64 first_tx_mstamp;
0895
0896 u64 delivered_mstamp;
0897 } tx;
0898 union {
0899 struct inet_skb_parm h4;
0900 #if IS_ENABLED(CONFIG_IPV6)
0901 struct inet6_skb_parm h6;
0902 #endif
0903 } header;
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
0913
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
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
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
0956
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
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
0993 enum tcp_ca_event {
0994 CA_EVENT_TX_START,
0995 CA_EVENT_CWND_RESTART,
0996 CA_EVENT_COMPLETE_CWR,
0997 CA_EVENT_LOSS,
0998 CA_EVENT_ECN_NO_CE,
0999 CA_EVENT_ECN_IS_CE,
1000 };
1001
1002
1003 enum tcp_ca_ack_event_flags {
1004 CA_ACK_SLOWPATH = (1 << 0),
1005 CA_ACK_WIN_UPDATE = (1 << 1),
1006 CA_ACK_ECE = (1 << 2),
1007 };
1008
1009
1010
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
1019 #define TCP_CONG_NON_RESTRICTED 0x1
1020
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
1033
1034
1035
1036
1037
1038
1039
1040 struct rate_sample {
1041 u64 prior_mstamp;
1042 u32 prior_delivered;
1043 u32 prior_delivered_ce;
1044 s32 delivered;
1045 s32 delivered_ce;
1046 long interval_us;
1047 u32 snd_interval_us;
1048 u32 rcv_interval_us;
1049 long rtt_us;
1050 int losses;
1051 u32 acked_sacked;
1052 u32 prior_in_flight;
1053 u32 last_end_seq;
1054 bool is_app_limited;
1055 bool is_retrans;
1056 bool is_ack_delayed;
1057 };
1058
1059 struct tcp_congestion_ops {
1060
1061
1062
1063 u32 (*ssthresh)(struct sock *sk);
1064
1065
1066 void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked);
1067
1068
1069 void (*set_state)(struct sock *sk, u8 new_state);
1070
1071
1072 void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
1073
1074
1075 void (*in_ack_event)(struct sock *sk, u32 flags);
1076
1077
1078 void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
1079
1080
1081 u32 (*min_tso_segs)(struct sock *sk);
1082
1083
1084
1085
1086 void (*cong_control)(struct sock *sk, const struct rate_sample *rs);
1087
1088
1089
1090 u32 (*undo_cwnd)(struct sock *sk);
1091
1092 u32 (*sndbuf_expand)(struct sock *sk);
1093
1094
1095
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
1106 void (*init)(struct sock *sk);
1107
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
1160 void tcp_set_ca_state(struct sock *sk, const u8 ca_state);
1161
1162
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
1176
1177
1178
1179
1180
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
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
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
1246
1247
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
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
1268
1269
1270 static inline __u32 tcp_max_tso_deferred_mss(const struct tcp_sock *tp)
1271 {
1272 return 3;
1273 }
1274
1275
1276 static inline u32 tcp_wnd_end(const struct tcp_sock *tp)
1277 {
1278 return tp->snd_una + tp->snd_wnd;
1279 }
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
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
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
1306
1307
1308
1309
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
1317
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
1336
1337
1338
1339
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
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
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
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
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
1462
1463
1464
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
1552
1553
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
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
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
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
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
1616 struct tcp_md5sig_key {
1617 struct hlist_node node;
1618 u8 keylen;
1619 u8 family;
1620 u8 prefixlen;
1621 u8 flags;
1622 union tcp_md5_addr addr;
1623 int l3index;
1624 u8 key[TCP_MD5SIG_MAXKEYLEN];
1625 struct rcu_head rcu;
1626 };
1627
1628
1629 struct tcp_md5sig_info {
1630 struct hlist_head head;
1631 struct rcu_head rcu;
1632 };
1633
1634
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;
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
1658 struct tcp_md5sig_pool {
1659 struct ahash_request *md5_req;
1660 void *scratch;
1661 };
1662
1663
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
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
1735 struct tcp_fastopen_cookie cookie;
1736 struct msghdr *data;
1737 size_t size;
1738 int copied;
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
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
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
1804
1805
1806 enum tcp_chrono {
1807 TCP_CHRONO_UNSPEC,
1808 TCP_CHRONO_BUSY,
1809 TCP_CHRONO_RWND_LIMITED,
1810 TCP_CHRONO_SNDBUF_LIMITED,
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
1818
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
1867
1868
1869
1870
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
1894 if (sk->sk_write_queue.next == skb)
1895 tcp_chrono_start(sk, TCP_CHRONO_BUSY);
1896 }
1897
1898
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
1937
1938
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
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
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
1988
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
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
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
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
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
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
2165
2166
2167
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
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
2212
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
2221
2222
2223
2224
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
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
2246 int (*init)(struct sock *sk);
2247
2248 void (*update)(struct sock *sk, struct proto *p,
2249 void (*write_space)(struct sock *sk));
2250
2251 void (*release)(struct sock *sk);
2252
2253 int (*get_info)(const struct sock *sk, struct sk_buff *skb);
2254 size_t (*get_info_size)(const struct sock *sk);
2255
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
2283
2284 int tcp_bpf_sendmsg_redir(struct sock *sk, struct sk_msg *msg, u32 bytes,
2285 int flags);
2286 #endif
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
2311
2312
2313
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
2427
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