1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef _TCP_H
15#define _TCP_H
16
17#define FASTRETRANS_DEBUG 1
18
19#include <linux/list.h>
20#include <linux/tcp.h>
21#include <linux/bug.h>
22#include <linux/slab.h>
23#include <linux/cache.h>
24#include <linux/percpu.h>
25#include <linux/skbuff.h>
26#include <linux/kref.h>
27#include <linux/ktime.h>
28#include <linux/indirect_call_wrapper.h>
29
30#include <net/inet_connection_sock.h>
31#include <net/inet_timewait_sock.h>
32#include <net/inet_hashtables.h>
33#include <net/checksum.h>
34#include <net/request_sock.h>
35#include <net/sock_reuseport.h>
36#include <net/sock.h>
37#include <net/snmp.h>
38#include <net/ip.h>
39#include <net/tcp_states.h>
40#include <net/inet_ecn.h>
41#include <net/dst.h>
42#include <net/mptcp.h>
43
44#include <linux/seq_file.h>
45#include <linux/memcontrol.h>
46#include <linux/bpf-cgroup.h>
47#include <linux/siphash.h>
48
49extern struct inet_hashinfo tcp_hashinfo;
50
51extern struct percpu_counter tcp_orphan_count;
52void tcp_time_wait(struct sock *sk, int state, int timeo);
53
54#define MAX_TCP_HEADER L1_CACHE_ALIGN(128 + MAX_HEADER)
55#define MAX_TCP_OPTION_SPACE 40
56#define TCP_MIN_SND_MSS 48
57#define TCP_MIN_GSO_SIZE (TCP_MIN_SND_MSS - MAX_TCP_OPTION_SPACE)
58
59
60
61
62
63#define MAX_TCP_WINDOW 32767U
64
65
66#define TCP_MIN_MSS 88U
67
68
69#define TCP_BASE_MSS 1024
70
71
72#define TCP_PROBE_INTERVAL 600
73
74
75#define TCP_PROBE_THRESHOLD 8
76
77
78#define TCP_FASTRETRANS_THRESH 3
79
80
81#define TCP_MAX_QUICKACKS 16U
82
83
84#define TCP_MAX_WSCALE 14U
85
86
87#define TCP_URG_VALID 0x0100
88#define TCP_URG_NOTYET 0x0200
89#define TCP_URG_READ 0x0400
90
91#define TCP_RETR1 3
92
93
94
95
96
97
98#define TCP_RETR2 15
99
100
101
102
103
104
105#define TCP_SYN_RETRIES 6
106
107
108
109
110
111
112
113
114#define TCP_SYNACK_RETRIES 5
115
116
117
118
119
120
121#define TCP_TIMEWAIT_LEN (60*HZ)
122
123#define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
124
125
126
127
128
129#define TCP_FIN_TIMEOUT_MAX (120 * HZ)
130
131#define TCP_DELACK_MAX ((unsigned)(HZ/5))
132#if HZ >= 100
133#define TCP_DELACK_MIN ((unsigned)(HZ/25))
134#define TCP_ATO_MIN ((unsigned)(HZ/25))
135#else
136#define TCP_DELACK_MIN 4U
137#define TCP_ATO_MIN 4U
138#endif
139#define TCP_RTO_MAX ((unsigned)(120*HZ))
140#define TCP_RTO_MIN ((unsigned)(HZ/5))
141#define TCP_TIMEOUT_MIN (2U)
142#define TCP_TIMEOUT_INIT ((unsigned)(1*HZ))
143#define TCP_TIMEOUT_FALLBACK ((unsigned)(3*HZ))
144
145
146
147
148
149
150#define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U))
151
152
153#define TCP_KEEPALIVE_TIME (120*60*HZ)
154#define TCP_KEEPALIVE_PROBES 9
155#define TCP_KEEPALIVE_INTVL (75*HZ)
156
157#define MAX_TCP_KEEPIDLE 32767
158#define MAX_TCP_KEEPINTVL 32767
159#define MAX_TCP_KEEPCNT 127
160#define MAX_TCP_SYNCNT 127
161
162#define TCP_SYNQ_INTERVAL (HZ/5)
163
164#define TCP_PAWS_24DAYS (60 * 60 * 24 * 24)
165#define TCP_PAWS_MSL 60
166
167
168
169
170
171#define TCP_PAWS_WINDOW 1
172
173
174
175
176
177
178
179#define TCPOPT_NOP 1
180#define TCPOPT_EOL 0
181#define TCPOPT_MSS 2
182#define TCPOPT_WINDOW 3
183#define TCPOPT_SACK_PERM 4
184#define TCPOPT_SACK 5
185#define TCPOPT_TIMESTAMP 8
186#define TCPOPT_MD5SIG 19
187#define TCPOPT_MPTCP 30
188#define TCPOPT_FASTOPEN 34
189#define TCPOPT_EXP 254
190
191
192
193#define TCPOPT_FASTOPEN_MAGIC 0xF989
194#define TCPOPT_SMC_MAGIC 0xE2D4C3D9
195
196
197
198
199
200#define TCPOLEN_MSS 4
201#define TCPOLEN_WINDOW 3
202#define TCPOLEN_SACK_PERM 2
203#define TCPOLEN_TIMESTAMP 10
204#define TCPOLEN_MD5SIG 18
205#define TCPOLEN_FASTOPEN_BASE 2
206#define TCPOLEN_EXP_FASTOPEN_BASE 4
207#define TCPOLEN_EXP_SMC_BASE 6
208
209
210#define TCPOLEN_TSTAMP_ALIGNED 12
211#define TCPOLEN_WSCALE_ALIGNED 4
212#define TCPOLEN_SACKPERM_ALIGNED 4
213#define TCPOLEN_SACK_BASE 2
214#define TCPOLEN_SACK_BASE_ALIGNED 4
215#define TCPOLEN_SACK_PERBLOCK 8
216#define TCPOLEN_MD5SIG_ALIGNED 20
217#define TCPOLEN_MSS_ALIGNED 4
218#define TCPOLEN_EXP_SMC_BASE_ALIGNED 8
219
220
221#define TCP_NAGLE_OFF 1
222#define TCP_NAGLE_CORK 2
223#define TCP_NAGLE_PUSH 4
224
225
226#define TCP_THIN_LINEAR_RETRIES 6
227
228
229#define TCP_INIT_CWND 10
230
231
232#define TFO_CLIENT_ENABLE 1
233#define TFO_SERVER_ENABLE 2
234#define TFO_CLIENT_NO_COOKIE 4
235
236
237#define TFO_SERVER_COOKIE_NOT_REQD 0x200
238
239
240
241
242#define TFO_SERVER_WO_SOCKOPT1 0x400
243
244
245
246extern int sysctl_tcp_max_orphans;
247extern long sysctl_tcp_mem[3];
248
249#define TCP_RACK_LOSS_DETECTION 0x1
250#define TCP_RACK_STATIC_REO_WND 0x2
251#define TCP_RACK_NO_DUPTHRESH 0x4
252
253extern atomic_long_t tcp_memory_allocated;
254extern struct percpu_counter tcp_sockets_allocated;
255extern unsigned long tcp_memory_pressure;
256
257
258static inline bool tcp_under_memory_pressure(const struct sock *sk)
259{
260 if (mem_cgroup_sockets_enabled && sk->sk_memcg &&
261 mem_cgroup_under_socket_pressure(sk->sk_memcg))
262 return true;
263
264 return READ_ONCE(tcp_memory_pressure);
265}
266
267
268
269
270
271static inline bool before(__u32 seq1, __u32 seq2)
272{
273 return (__s32)(seq1-seq2) < 0;
274}
275#define after(seq2, seq1) before(seq1, seq2)
276
277
278static inline bool between(__u32 seq1, __u32 seq2, __u32 seq3)
279{
280 return seq3 - seq2 >= seq1 - seq2;
281}
282
283static inline bool tcp_out_of_memory(struct sock *sk)
284{
285 if (sk->sk_wmem_queued > SOCK_MIN_SNDBUF &&
286 sk_memory_allocated(sk) > sk_prot_mem_limits(sk, 2))
287 return true;
288 return false;
289}
290
291void sk_forced_mem_schedule(struct sock *sk, int size);
292
293static inline bool tcp_too_many_orphans(struct sock *sk, int shift)
294{
295 struct percpu_counter *ocp = sk->sk_prot->orphan_count;
296 int orphans = percpu_counter_read_positive(ocp);
297
298 if (orphans << shift > sysctl_tcp_max_orphans) {
299 orphans = percpu_counter_sum_positive(ocp);
300 if (orphans << shift > sysctl_tcp_max_orphans)
301 return true;
302 }
303 return false;
304}
305
306bool tcp_check_oom(struct sock *sk, int shift);
307
308
309extern struct proto tcp_prot;
310
311#define TCP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.tcp_statistics, field)
312#define __TCP_INC_STATS(net, field) __SNMP_INC_STATS((net)->mib.tcp_statistics, field)
313#define TCP_DEC_STATS(net, field) SNMP_DEC_STATS((net)->mib.tcp_statistics, field)
314#define TCP_ADD_STATS(net, field, val) SNMP_ADD_STATS((net)->mib.tcp_statistics, field, val)
315
316void tcp_tasklet_init(void);
317
318int tcp_v4_err(struct sk_buff *skb, u32);
319
320void tcp_shutdown(struct sock *sk, int how);
321
322int tcp_v4_early_demux(struct sk_buff *skb);
323int tcp_v4_rcv(struct sk_buff *skb);
324
325int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);
326int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
327int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size);
328int tcp_sendpage(struct sock *sk, struct page *page, int offset, size_t size,
329 int flags);
330int tcp_sendpage_locked(struct sock *sk, struct page *page, int offset,
331 size_t size, int flags);
332ssize_t do_tcp_sendpages(struct sock *sk, struct page *page, int offset,
333 size_t size, int flags);
334int tcp_send_mss(struct sock *sk, int *size_goal, int flags);
335void tcp_push(struct sock *sk, int flags, int mss_now, int nonagle,
336 int size_goal);
337void tcp_release_cb(struct sock *sk);
338void tcp_wfree(struct sk_buff *skb);
339void tcp_write_timer_handler(struct sock *sk);
340void tcp_delack_timer_handler(struct sock *sk);
341int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg);
342int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb);
343void tcp_rcv_established(struct sock *sk, struct sk_buff *skb);
344void tcp_rcv_space_adjust(struct sock *sk);
345int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp);
346void tcp_twsk_destructor(struct sock *sk);
347ssize_t tcp_splice_read(struct socket *sk, loff_t *ppos,
348 struct pipe_inode_info *pipe, size_t len,
349 unsigned int flags);
350
351void tcp_enter_quickack_mode(struct sock *sk, unsigned int max_quickacks);
352static inline void tcp_dec_quickack_mode(struct sock *sk,
353 const unsigned int pkts)
354{
355 struct inet_connection_sock *icsk = inet_csk(sk);
356
357 if (icsk->icsk_ack.quick) {
358 if (pkts >= icsk->icsk_ack.quick) {
359 icsk->icsk_ack.quick = 0;
360
361 icsk->icsk_ack.ato = TCP_ATO_MIN;
362 } else
363 icsk->icsk_ack.quick -= pkts;
364 }
365}
366
367#define TCP_ECN_OK 1
368#define TCP_ECN_QUEUE_CWR 2
369#define TCP_ECN_DEMAND_CWR 4
370#define TCP_ECN_SEEN 8
371
372enum tcp_tw_status {
373 TCP_TW_SUCCESS = 0,
374 TCP_TW_RST = 1,
375 TCP_TW_ACK = 2,
376 TCP_TW_SYN = 3
377};
378
379
380enum tcp_tw_status tcp_timewait_state_process(struct inet_timewait_sock *tw,
381 struct sk_buff *skb,
382 const struct tcphdr *th);
383struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
384 struct request_sock *req, bool fastopen,
385 bool *lost_race);
386int tcp_child_process(struct sock *parent, struct sock *child,
387 struct sk_buff *skb);
388void tcp_enter_loss(struct sock *sk);
389void tcp_cwnd_reduction(struct sock *sk, int newly_acked_sacked, int flag);
390void tcp_clear_retrans(struct tcp_sock *tp);
391void tcp_update_metrics(struct sock *sk);
392void tcp_init_metrics(struct sock *sk);
393void tcp_metrics_init(void);
394bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst);
395void tcp_close(struct sock *sk, long timeout);
396void tcp_init_sock(struct sock *sk);
397void tcp_init_transfer(struct sock *sk, int bpf_op, struct sk_buff *skb);
398__poll_t tcp_poll(struct file *file, struct socket *sock,
399 struct poll_table_struct *wait);
400int tcp_getsockopt(struct sock *sk, int level, int optname,
401 char __user *optval, int __user *optlen);
402int tcp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
403 unsigned int optlen);
404void tcp_set_keepalive(struct sock *sk, int val);
405void tcp_syn_ack_timeout(const struct request_sock *req);
406int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
407 int flags, int *addr_len);
408int tcp_set_rcvlowat(struct sock *sk, int val);
409void tcp_data_ready(struct sock *sk);
410#ifdef CONFIG_MMU
411int tcp_mmap(struct file *file, struct socket *sock,
412 struct vm_area_struct *vma);
413#endif
414void tcp_parse_options(const struct net *net, const struct sk_buff *skb,
415 struct tcp_options_received *opt_rx,
416 int estab, struct tcp_fastopen_cookie *foc);
417const u8 *tcp_parse_md5sig_option(const struct tcphdr *th);
418
419
420
421
422u16 tcp_v4_get_syncookie(struct sock *sk, struct iphdr *iph,
423 struct tcphdr *th, u32 *cookie);
424u16 tcp_v6_get_syncookie(struct sock *sk, struct ipv6hdr *iph,
425 struct tcphdr *th, u32 *cookie);
426u16 tcp_get_syncookie_mss(struct request_sock_ops *rsk_ops,
427 const struct tcp_request_sock_ops *af_ops,
428 struct sock *sk, struct tcphdr *th);
429
430
431
432
433void tcp_v4_send_check(struct sock *sk, struct sk_buff *skb);
434void tcp_v4_mtu_reduced(struct sock *sk);
435void tcp_req_err(struct sock *sk, u32 seq, bool abort);
436void tcp_ld_RTO_revert(struct sock *sk, u32 seq);
437int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb);
438struct sock *tcp_create_openreq_child(const struct sock *sk,
439 struct request_sock *req,
440 struct sk_buff *skb);
441void tcp_ca_openreq_child(struct sock *sk, const struct dst_entry *dst);
442struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
443 struct request_sock *req,
444 struct dst_entry *dst,
445 struct request_sock *req_unhash,
446 bool *own_req);
447int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb);
448int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
449int tcp_connect(struct sock *sk);
450enum tcp_synack_type {
451 TCP_SYNACK_NORMAL,
452 TCP_SYNACK_FASTOPEN,
453 TCP_SYNACK_COOKIE,
454};
455struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
456 struct request_sock *req,
457 struct tcp_fastopen_cookie *foc,
458 enum tcp_synack_type synack_type,
459 struct sk_buff *syn_skb);
460int tcp_disconnect(struct sock *sk, int flags);
461
462void tcp_finish_connect(struct sock *sk, struct sk_buff *skb);
463int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, size_t size);
464void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb);
465
466
467struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
468 struct request_sock *req,
469 struct dst_entry *dst, u32 tsoff);
470int __cookie_v4_check(const struct iphdr *iph, const struct tcphdr *th,
471 u32 cookie);
472struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb);
473struct request_sock *cookie_tcp_reqsk_alloc(const struct request_sock_ops *ops,
474 struct sock *sk, struct sk_buff *skb);
475#ifdef CONFIG_SYN_COOKIES
476
477
478
479
480
481
482
483
484#define MAX_SYNCOOKIE_AGE 2
485#define TCP_SYNCOOKIE_PERIOD (60 * HZ)
486#define TCP_SYNCOOKIE_VALID (MAX_SYNCOOKIE_AGE * TCP_SYNCOOKIE_PERIOD)
487
488
489
490
491
492static inline void tcp_synq_overflow(const struct sock *sk)
493{
494 unsigned int last_overflow;
495 unsigned int now = jiffies;
496
497 if (sk->sk_reuseport) {
498 struct sock_reuseport *reuse;
499
500 reuse = rcu_dereference(sk->sk_reuseport_cb);
501 if (likely(reuse)) {
502 last_overflow = READ_ONCE(reuse->synq_overflow_ts);
503 if (!time_between32(now, last_overflow,
504 last_overflow + HZ))
505 WRITE_ONCE(reuse->synq_overflow_ts, now);
506 return;
507 }
508 }
509
510 last_overflow = READ_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp);
511 if (!time_between32(now, last_overflow, last_overflow + HZ))
512 WRITE_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp, now);
513}
514
515
516static inline bool tcp_synq_no_recent_overflow(const struct sock *sk)
517{
518 unsigned int last_overflow;
519 unsigned int now = jiffies;
520
521 if (sk->sk_reuseport) {
522 struct sock_reuseport *reuse;
523
524 reuse = rcu_dereference(sk->sk_reuseport_cb);
525 if (likely(reuse)) {
526 last_overflow = READ_ONCE(reuse->synq_overflow_ts);
527 return !time_between32(now, last_overflow - HZ,
528 last_overflow +
529 TCP_SYNCOOKIE_VALID);
530 }
531 }
532
533 last_overflow = READ_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp);
534
535
536
537
538
539
540
541
542 return !time_between32(now, last_overflow - HZ,
543 last_overflow + TCP_SYNCOOKIE_VALID);
544}
545
546static inline u32 tcp_cookie_time(void)
547{
548 u64 val = get_jiffies_64();
549
550 do_div(val, TCP_SYNCOOKIE_PERIOD);
551 return val;
552}
553
554u32 __cookie_v4_init_sequence(const struct iphdr *iph, const struct tcphdr *th,
555 u16 *mssp);
556__u32 cookie_v4_init_sequence(const struct sk_buff *skb, __u16 *mss);
557u64 cookie_init_timestamp(struct request_sock *req, u64 now);
558bool cookie_timestamp_decode(const struct net *net,
559 struct tcp_options_received *opt);
560bool cookie_ecn_ok(const struct tcp_options_received *opt,
561 const struct net *net, const struct dst_entry *dst);
562
563
564int __cookie_v6_check(const struct ipv6hdr *iph, const struct tcphdr *th,
565 u32 cookie);
566struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb);
567
568u32 __cookie_v6_init_sequence(const struct ipv6hdr *iph,
569 const struct tcphdr *th, u16 *mssp);
570__u32 cookie_v6_init_sequence(const struct sk_buff *skb, __u16 *mss);
571#endif
572
573
574void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss,
575 int nonagle);
576int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs);
577int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs);
578void tcp_retransmit_timer(struct sock *sk);
579void tcp_xmit_retransmit_queue(struct sock *);
580void tcp_simple_retransmit(struct sock *);
581void tcp_enter_recovery(struct sock *sk, bool ece_ack);
582int tcp_trim_head(struct sock *, struct sk_buff *, u32);
583enum tcp_queue {
584 TCP_FRAG_IN_WRITE_QUEUE,
585 TCP_FRAG_IN_RTX_QUEUE,
586};
587int tcp_fragment(struct sock *sk, enum tcp_queue tcp_queue,
588 struct sk_buff *skb, u32 len,
589 unsigned int mss_now, gfp_t gfp);
590
591void tcp_send_probe0(struct sock *);
592void tcp_send_partial(struct sock *);
593int tcp_write_wakeup(struct sock *, int mib);
594void tcp_send_fin(struct sock *sk);
595void tcp_send_active_reset(struct sock *sk, gfp_t priority);
596int tcp_send_synack(struct sock *);
597void tcp_push_one(struct sock *, unsigned int mss_now);
598void __tcp_send_ack(struct sock *sk, u32 rcv_nxt);
599void tcp_send_ack(struct sock *sk);
600void tcp_send_delayed_ack(struct sock *sk);
601void tcp_send_loss_probe(struct sock *sk);
602bool tcp_schedule_loss_probe(struct sock *sk, bool advancing_rto);
603void tcp_skb_collapse_tstamp(struct sk_buff *skb,
604 const struct sk_buff *next_skb);
605
606
607void tcp_rearm_rto(struct sock *sk);
608void tcp_synack_rtt_meas(struct sock *sk, struct request_sock *req);
609void tcp_reset(struct sock *sk);
610void tcp_skb_mark_lost_uncond_verify(struct tcp_sock *tp, struct sk_buff *skb);
611void tcp_fin(struct sock *sk);
612
613
614void tcp_init_xmit_timers(struct sock *);
615static inline void tcp_clear_xmit_timers(struct sock *sk)
616{
617 if (hrtimer_try_to_cancel(&tcp_sk(sk)->pacing_timer) == 1)
618 __sock_put(sk);
619
620 if (hrtimer_try_to_cancel(&tcp_sk(sk)->compressed_ack_timer) == 1)
621 __sock_put(sk);
622
623 inet_csk_clear_xmit_timers(sk);
624}
625
626unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
627unsigned int tcp_current_mss(struct sock *sk);
628
629
630static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize)
631{
632 int cutoff;
633
634
635
636
637
638
639
640
641 if (tp->max_window > TCP_MSS_DEFAULT)
642 cutoff = (tp->max_window >> 1);
643 else
644 cutoff = tp->max_window;
645
646 if (cutoff && pktsize > cutoff)
647 return max_t(int, cutoff, 68U - tp->tcp_header_len);
648 else
649 return pktsize;
650}
651
652
653void tcp_get_info(struct sock *, struct tcp_info *);
654
655
656int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
657 sk_read_actor_t recv_actor);
658
659void tcp_initialize_rcv_mss(struct sock *sk);
660
661int tcp_mtu_to_mss(struct sock *sk, int pmtu);
662int tcp_mss_to_mtu(struct sock *sk, int mss);
663void tcp_mtup_init(struct sock *sk);
664
665static inline void tcp_bound_rto(const struct sock *sk)
666{
667 if (inet_csk(sk)->icsk_rto > TCP_RTO_MAX)
668 inet_csk(sk)->icsk_rto = TCP_RTO_MAX;
669}
670
671static inline u32 __tcp_set_rto(const struct tcp_sock *tp)
672{
673 return usecs_to_jiffies((tp->srtt_us >> 3) + tp->rttvar_us);
674}
675
676static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
677{
678 tp->pred_flags = htonl((tp->tcp_header_len << 26) |
679 ntohl(TCP_FLAG_ACK) |
680 snd_wnd);
681}
682
683static inline void tcp_fast_path_on(struct tcp_sock *tp)
684{
685 __tcp_fast_path_on(tp, tp->snd_wnd >> tp->rx_opt.snd_wscale);
686}
687
688static inline void tcp_fast_path_check(struct sock *sk)
689{
690 struct tcp_sock *tp = tcp_sk(sk);
691
692 if (RB_EMPTY_ROOT(&tp->out_of_order_queue) &&
693 tp->rcv_wnd &&
694 atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf &&
695 !tp->urg_data)
696 tcp_fast_path_on(tp);
697}
698
699
700static inline u32 tcp_rto_min(struct sock *sk)
701{
702 const struct dst_entry *dst = __sk_dst_get(sk);
703 u32 rto_min = inet_csk(sk)->icsk_rto_min;
704
705 if (dst && dst_metric_locked(dst, RTAX_RTO_MIN))
706 rto_min = dst_metric_rtt(dst, RTAX_RTO_MIN);
707 return rto_min;
708}
709
710static inline u32 tcp_rto_min_us(struct sock *sk)
711{
712 return jiffies_to_usecs(tcp_rto_min(sk));
713}
714
715static inline bool tcp_ca_dst_locked(const struct dst_entry *dst)
716{
717 return dst_metric_locked(dst, RTAX_CC_ALGO);
718}
719
720
721static inline u32 tcp_min_rtt(const struct tcp_sock *tp)
722{
723 return minmax_get(&tp->rtt_min);
724}
725
726
727
728
729
730static inline u32 tcp_receive_window(const struct tcp_sock *tp)
731{
732 s32 win = tp->rcv_wup + tp->rcv_wnd - tp->rcv_nxt;
733
734 if (win < 0)
735 win = 0;
736 return (u32) win;
737}
738
739
740
741
742
743u32 __tcp_select_window(struct sock *sk);
744
745void tcp_send_window_probe(struct sock *sk);
746
747
748
749
750
751#define tcp_jiffies32 ((u32)jiffies)
752
753
754
755
756
757
758#define TCP_TS_HZ 1000
759
760static inline u64 tcp_clock_ns(void)
761{
762 return ktime_get_ns();
763}
764
765static inline u64 tcp_clock_us(void)
766{
767 return div_u64(tcp_clock_ns(), NSEC_PER_USEC);
768}
769
770
771static inline u32 tcp_time_stamp(const struct tcp_sock *tp)
772{
773 return div_u64(tp->tcp_mstamp, USEC_PER_SEC / TCP_TS_HZ);
774}
775
776
777static inline u32 tcp_ns_to_ts(u64 ns)
778{
779 return div_u64(ns, NSEC_PER_SEC / TCP_TS_HZ);
780}
781
782
783static inline u32 tcp_time_stamp_raw(void)
784{
785 return tcp_ns_to_ts(tcp_clock_ns());
786}
787
788void tcp_mstamp_refresh(struct tcp_sock *tp);
789
790static inline u32 tcp_stamp_us_delta(u64 t1, u64 t0)
791{
792 return max_t(s64, t1 - t0, 0);
793}
794
795static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
796{
797 return tcp_ns_to_ts(skb->skb_mstamp_ns);
798}
799
800
801static inline u64 tcp_skb_timestamp_us(const struct sk_buff *skb)
802{
803 return div_u64(skb->skb_mstamp_ns, NSEC_PER_USEC);
804}
805
806
807#define tcp_flag_byte(th) (((u_int8_t *)th)[13])
808
809#define TCPHDR_FIN 0x01
810#define TCPHDR_SYN 0x02
811#define TCPHDR_RST 0x04
812#define TCPHDR_PSH 0x08
813#define TCPHDR_ACK 0x10
814#define TCPHDR_URG 0x20
815#define TCPHDR_ECE 0x40
816#define TCPHDR_CWR 0x80
817
818#define TCPHDR_SYN_ECN (TCPHDR_SYN | TCPHDR_ECE | TCPHDR_CWR)
819
820
821
822
823
824
825
826struct tcp_skb_cb {
827 __u32 seq;
828 __u32 end_seq;
829 union {
830
831
832
833
834
835
836 __u32 tcp_tw_isn;
837 struct {
838 u16 tcp_gso_segs;
839 u16 tcp_gso_size;
840 };
841 };
842 __u8 tcp_flags;
843
844 __u8 sacked;
845#define TCPCB_SACKED_ACKED 0x01
846#define TCPCB_SACKED_RETRANS 0x02
847#define TCPCB_LOST 0x04
848#define TCPCB_TAGBITS 0x07
849#define TCPCB_REPAIRED 0x10
850#define TCPCB_EVER_RETRANS 0x80
851#define TCPCB_RETRANS (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS| \
852 TCPCB_REPAIRED)
853
854 __u8 ip_dsfield;
855 __u8 txstamp_ack:1,
856 eor:1,
857 has_rxtstamp:1,
858 unused:5;
859 __u32 ack_seq;
860 union {
861 struct {
862
863 __u32 in_flight:30,
864 is_app_limited:1,
865 unused:1;
866
867 __u32 delivered;
868
869 u64 first_tx_mstamp;
870
871 u64 delivered_mstamp;
872 } tx;
873 union {
874 struct inet_skb_parm h4;
875#if IS_ENABLED(CONFIG_IPV6)
876 struct inet6_skb_parm h6;
877#endif
878 } header;
879 struct {
880 __u32 flags;
881 struct sock *sk_redir;
882 void *data_end;
883 } bpf;
884 };
885};
886
887#define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0]))
888
889static inline void bpf_compute_data_end_sk_skb(struct sk_buff *skb)
890{
891 TCP_SKB_CB(skb)->bpf.data_end = skb->data + skb_headlen(skb);
892}
893
894static inline bool tcp_skb_bpf_ingress(const struct sk_buff *skb)
895{
896 return TCP_SKB_CB(skb)->bpf.flags & BPF_F_INGRESS;
897}
898
899static inline struct sock *tcp_skb_bpf_redirect_fetch(struct sk_buff *skb)
900{
901 return TCP_SKB_CB(skb)->bpf.sk_redir;
902}
903
904static inline void tcp_skb_bpf_redirect_clear(struct sk_buff *skb)
905{
906 TCP_SKB_CB(skb)->bpf.sk_redir = NULL;
907}
908
909extern const struct inet_connection_sock_af_ops ipv4_specific;
910
911#if IS_ENABLED(CONFIG_IPV6)
912
913
914
915static inline int tcp_v6_iif(const struct sk_buff *skb)
916{
917 return TCP_SKB_CB(skb)->header.h6.iif;
918}
919
920static inline int tcp_v6_iif_l3_slave(const struct sk_buff *skb)
921{
922 bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags);
923
924 return l3_slave ? skb->skb_iif : TCP_SKB_CB(skb)->header.h6.iif;
925}
926
927
928static inline int tcp_v6_sdif(const struct sk_buff *skb)
929{
930#if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
931 if (skb && ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags))
932 return TCP_SKB_CB(skb)->header.h6.iif;
933#endif
934 return 0;
935}
936
937extern const struct inet_connection_sock_af_ops ipv6_specific;
938
939INDIRECT_CALLABLE_DECLARE(void tcp_v6_send_check(struct sock *sk, struct sk_buff *skb));
940INDIRECT_CALLABLE_DECLARE(int tcp_v6_rcv(struct sk_buff *skb));
941INDIRECT_CALLABLE_DECLARE(void tcp_v6_early_demux(struct sk_buff *skb));
942
943#endif
944
945
946static inline int tcp_v4_sdif(struct sk_buff *skb)
947{
948#if IS_ENABLED(CONFIG_NET_L3_MASTER_DEV)
949 if (skb && ipv4_l3mdev_skb(TCP_SKB_CB(skb)->header.h4.flags))
950 return TCP_SKB_CB(skb)->header.h4.iif;
951#endif
952 return 0;
953}
954
955
956
957
958static inline int tcp_skb_pcount(const struct sk_buff *skb)
959{
960 return TCP_SKB_CB(skb)->tcp_gso_segs;
961}
962
963static inline void tcp_skb_pcount_set(struct sk_buff *skb, int segs)
964{
965 TCP_SKB_CB(skb)->tcp_gso_segs = segs;
966}
967
968static inline void tcp_skb_pcount_add(struct sk_buff *skb, int segs)
969{
970 TCP_SKB_CB(skb)->tcp_gso_segs += segs;
971}
972
973
974static inline int tcp_skb_mss(const struct sk_buff *skb)
975{
976 return TCP_SKB_CB(skb)->tcp_gso_size;
977}
978
979static inline bool tcp_skb_can_collapse_to(const struct sk_buff *skb)
980{
981 return likely(!TCP_SKB_CB(skb)->eor);
982}
983
984static inline bool tcp_skb_can_collapse(const struct sk_buff *to,
985 const struct sk_buff *from)
986{
987 return likely(tcp_skb_can_collapse_to(to) &&
988 mptcp_skb_can_collapse(to, from));
989}
990
991
992enum tcp_ca_event {
993 CA_EVENT_TX_START,
994 CA_EVENT_CWND_RESTART,
995 CA_EVENT_COMPLETE_CWR,
996 CA_EVENT_LOSS,
997 CA_EVENT_ECN_NO_CE,
998 CA_EVENT_ECN_IS_CE,
999};
1000
1001
1002enum tcp_ca_ack_event_flags {
1003 CA_ACK_SLOWPATH = (1 << 0),
1004 CA_ACK_WIN_UPDATE = (1 << 1),
1005 CA_ACK_ECE = (1 << 2),
1006};
1007
1008
1009
1010
1011#define TCP_CA_NAME_MAX 16
1012#define TCP_CA_MAX 128
1013#define TCP_CA_BUF_MAX (TCP_CA_NAME_MAX*TCP_CA_MAX)
1014
1015#define TCP_CA_UNSPEC 0
1016
1017
1018#define TCP_CONG_NON_RESTRICTED 0x1
1019
1020#define TCP_CONG_NEEDS_ECN 0x2
1021#define TCP_CONG_MASK (TCP_CONG_NON_RESTRICTED | TCP_CONG_NEEDS_ECN)
1022
1023union tcp_cc_info;
1024
1025struct ack_sample {
1026 u32 pkts_acked;
1027 s32 rtt_us;
1028 u32 in_flight;
1029};
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039struct rate_sample {
1040 u64 prior_mstamp;
1041 u32 prior_delivered;
1042 s32 delivered;
1043 long interval_us;
1044 u32 snd_interval_us;
1045 u32 rcv_interval_us;
1046 long rtt_us;
1047 int losses;
1048 u32 acked_sacked;
1049 u32 prior_in_flight;
1050 bool is_app_limited;
1051 bool is_retrans;
1052 bool is_ack_delayed;
1053};
1054
1055struct tcp_congestion_ops {
1056 struct list_head list;
1057 u32 key;
1058 u32 flags;
1059
1060
1061 void (*init)(struct sock *sk);
1062
1063 void (*release)(struct sock *sk);
1064
1065
1066 u32 (*ssthresh)(struct sock *sk);
1067
1068 void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked);
1069
1070 void (*set_state)(struct sock *sk, u8 new_state);
1071
1072 void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
1073
1074 void (*in_ack_event)(struct sock *sk, u32 flags);
1075
1076 u32 (*undo_cwnd)(struct sock *sk);
1077
1078 void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
1079
1080 u32 (*min_tso_segs)(struct sock *sk);
1081
1082 u32 (*sndbuf_expand)(struct sock *sk);
1083
1084
1085
1086 void (*cong_control)(struct sock *sk, const struct rate_sample *rs);
1087
1088 size_t (*get_info)(struct sock *sk, u32 ext, int *attr,
1089 union tcp_cc_info *info);
1090
1091 char name[TCP_CA_NAME_MAX];
1092 struct module *owner;
1093};
1094
1095int tcp_register_congestion_control(struct tcp_congestion_ops *type);
1096void tcp_unregister_congestion_control(struct tcp_congestion_ops *type);
1097
1098void tcp_assign_congestion_control(struct sock *sk);
1099void tcp_init_congestion_control(struct sock *sk);
1100void tcp_cleanup_congestion_control(struct sock *sk);
1101int tcp_set_default_congestion_control(struct net *net, const char *name);
1102void tcp_get_default_congestion_control(struct net *net, char *name);
1103void tcp_get_available_congestion_control(char *buf, size_t len);
1104void tcp_get_allowed_congestion_control(char *buf, size_t len);
1105int tcp_set_allowed_congestion_control(char *allowed);
1106int tcp_set_congestion_control(struct sock *sk, const char *name, bool load,
1107 bool cap_net_admin);
1108u32 tcp_slow_start(struct tcp_sock *tp, u32 acked);
1109void tcp_cong_avoid_ai(struct tcp_sock *tp, u32 w, u32 acked);
1110
1111u32 tcp_reno_ssthresh(struct sock *sk);
1112u32 tcp_reno_undo_cwnd(struct sock *sk);
1113void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 acked);
1114extern struct tcp_congestion_ops tcp_reno;
1115
1116struct tcp_congestion_ops *tcp_ca_find(const char *name);
1117struct tcp_congestion_ops *tcp_ca_find_key(u32 key);
1118u32 tcp_ca_get_key_by_name(struct net *net, const char *name, bool *ecn_ca);
1119#ifdef CONFIG_INET
1120char *tcp_ca_get_name_by_key(u32 key, char *buffer);
1121#else
1122static inline char *tcp_ca_get_name_by_key(u32 key, char *buffer)
1123{
1124 return NULL;
1125}
1126#endif
1127
1128static inline bool tcp_ca_needs_ecn(const struct sock *sk)
1129{
1130 const struct inet_connection_sock *icsk = inet_csk(sk);
1131
1132 return icsk->icsk_ca_ops->flags & TCP_CONG_NEEDS_ECN;
1133}
1134
1135static inline void tcp_set_ca_state(struct sock *sk, const u8 ca_state)
1136{
1137 struct inet_connection_sock *icsk = inet_csk(sk);
1138
1139 if (icsk->icsk_ca_ops->set_state)
1140 icsk->icsk_ca_ops->set_state(sk, ca_state);
1141 icsk->icsk_ca_state = ca_state;
1142}
1143
1144static inline void tcp_ca_event(struct sock *sk, const enum tcp_ca_event event)
1145{
1146 const struct inet_connection_sock *icsk = inet_csk(sk);
1147
1148 if (icsk->icsk_ca_ops->cwnd_event)
1149 icsk->icsk_ca_ops->cwnd_event(sk, event);
1150}
1151
1152
1153void tcp_rate_skb_sent(struct sock *sk, struct sk_buff *skb);
1154void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb,
1155 struct rate_sample *rs);
1156void tcp_rate_gen(struct sock *sk, u32 delivered, u32 lost,
1157 bool is_sack_reneg, struct rate_sample *rs);
1158void tcp_rate_check_app_limited(struct sock *sk);
1159
1160
1161
1162
1163
1164
1165
1166
1167static inline int tcp_is_sack(const struct tcp_sock *tp)
1168{
1169 return likely(tp->rx_opt.sack_ok);
1170}
1171
1172static inline bool tcp_is_reno(const struct tcp_sock *tp)
1173{
1174 return !tcp_is_sack(tp);
1175}
1176
1177static inline unsigned int tcp_left_out(const struct tcp_sock *tp)
1178{
1179 return tp->sacked_out + tp->lost_out;
1180}
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196static inline unsigned int tcp_packets_in_flight(const struct tcp_sock *tp)
1197{
1198 return tp->packets_out - tcp_left_out(tp) + tp->retrans_out;
1199}
1200
1201#define TCP_INFINITE_SSTHRESH 0x7fffffff
1202
1203static inline bool tcp_in_slow_start(const struct tcp_sock *tp)
1204{
1205 return tp->snd_cwnd < tp->snd_ssthresh;
1206}
1207
1208static inline bool tcp_in_initial_slowstart(const struct tcp_sock *tp)
1209{
1210 return tp->snd_ssthresh >= TCP_INFINITE_SSTHRESH;
1211}
1212
1213static inline bool tcp_in_cwnd_reduction(const struct sock *sk)
1214{
1215 return (TCPF_CA_CWR | TCPF_CA_Recovery) &
1216 (1 << inet_csk(sk)->icsk_ca_state);
1217}
1218
1219
1220
1221
1222
1223static inline __u32 tcp_current_ssthresh(const struct sock *sk)
1224{
1225 const struct tcp_sock *tp = tcp_sk(sk);
1226
1227 if (tcp_in_cwnd_reduction(sk))
1228 return tp->snd_ssthresh;
1229 else
1230 return max(tp->snd_ssthresh,
1231 ((tp->snd_cwnd >> 1) +
1232 (tp->snd_cwnd >> 2)));
1233}
1234
1235
1236#define tcp_verify_left_out(tp) WARN_ON(tcp_left_out(tp) > tp->packets_out)
1237
1238void tcp_enter_cwr(struct sock *sk);
1239__u32 tcp_init_cwnd(const struct tcp_sock *tp, const struct dst_entry *dst);
1240
1241
1242
1243
1244static inline __u32 tcp_max_tso_deferred_mss(const struct tcp_sock *tp)
1245{
1246 return 3;
1247}
1248
1249
1250static inline u32 tcp_wnd_end(const struct tcp_sock *tp)
1251{
1252 return tp->snd_una + tp->snd_wnd;
1253}
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268static inline bool tcp_is_cwnd_limited(const struct sock *sk)
1269{
1270 const struct tcp_sock *tp = tcp_sk(sk);
1271
1272
1273 if (tcp_in_slow_start(tp))
1274 return tp->snd_cwnd < 2 * tp->max_packets_out;
1275
1276 return tp->is_cwnd_limited;
1277}
1278
1279
1280
1281
1282
1283
1284
1285static inline bool tcp_needs_internal_pacing(const struct sock *sk)
1286{
1287 return smp_load_acquire(&sk->sk_pacing_status) == SK_PACING_NEEDED;
1288}
1289
1290
1291
1292
1293static inline unsigned long tcp_pacing_delay(const struct sock *sk)
1294{
1295 s64 delay = tcp_sk(sk)->tcp_wstamp_ns - tcp_sk(sk)->tcp_clock_cache;
1296
1297 return delay > 0 ? nsecs_to_jiffies(delay) : 0;
1298}
1299
1300static inline void tcp_reset_xmit_timer(struct sock *sk,
1301 const int what,
1302 unsigned long when,
1303 const unsigned long max_when)
1304{
1305 inet_csk_reset_xmit_timer(sk, what, when + tcp_pacing_delay(sk),
1306 max_when);
1307}
1308
1309
1310
1311
1312
1313
1314
1315static inline unsigned long tcp_probe0_base(const struct sock *sk)
1316{
1317 return max_t(unsigned long, inet_csk(sk)->icsk_rto, TCP_RTO_MIN);
1318}
1319
1320
1321static inline unsigned long tcp_probe0_when(const struct sock *sk,
1322 unsigned long max_when)
1323{
1324 u64 when = (u64)tcp_probe0_base(sk) << inet_csk(sk)->icsk_backoff;
1325
1326 return (unsigned long)min_t(u64, when, max_when);
1327}
1328
1329static inline void tcp_check_probe_timer(struct sock *sk)
1330{
1331 if (!tcp_sk(sk)->packets_out && !inet_csk(sk)->icsk_pending)
1332 tcp_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
1333 tcp_probe0_base(sk), TCP_RTO_MAX);
1334}
1335
1336static inline void tcp_init_wl(struct tcp_sock *tp, u32 seq)
1337{
1338 tp->snd_wl1 = seq;
1339}
1340
1341static inline void tcp_update_wl(struct tcp_sock *tp, u32 seq)
1342{
1343 tp->snd_wl1 = seq;
1344}
1345
1346
1347
1348
1349static inline __sum16 tcp_v4_check(int len, __be32 saddr,
1350 __be32 daddr, __wsum base)
1351{
1352 return csum_tcpudp_magic(saddr, daddr, len, IPPROTO_TCP, base);
1353}
1354
1355static inline bool tcp_checksum_complete(struct sk_buff *skb)
1356{
1357 return !skb_csum_unnecessary(skb) &&
1358 __skb_checksum_complete(skb);
1359}
1360
1361bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb);
1362int tcp_filter(struct sock *sk, struct sk_buff *skb);
1363void tcp_set_state(struct sock *sk, int state);
1364void tcp_done(struct sock *sk);
1365int tcp_abort(struct sock *sk, int err);
1366
1367static inline void tcp_sack_reset(struct tcp_options_received *rx_opt)
1368{
1369 rx_opt->dsack = 0;
1370 rx_opt->num_sacks = 0;
1371}
1372
1373void tcp_cwnd_restart(struct sock *sk, s32 delta);
1374
1375static inline void tcp_slow_start_after_idle_check(struct sock *sk)
1376{
1377 const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
1378 struct tcp_sock *tp = tcp_sk(sk);
1379 s32 delta;
1380
1381 if (!sock_net(sk)->ipv4.sysctl_tcp_slow_start_after_idle || tp->packets_out ||
1382 ca_ops->cong_control)
1383 return;
1384 delta = tcp_jiffies32 - tp->lsndtime;
1385 if (delta > inet_csk(sk)->icsk_rto)
1386 tcp_cwnd_restart(sk, delta);
1387}
1388
1389
1390void tcp_select_initial_window(const struct sock *sk, int __space,
1391 __u32 mss, __u32 *rcv_wnd,
1392 __u32 *window_clamp, int wscale_ok,
1393 __u8 *rcv_wscale, __u32 init_rcv_wnd);
1394
1395static inline int tcp_win_from_space(const struct sock *sk, int space)
1396{
1397 int tcp_adv_win_scale = sock_net(sk)->ipv4.sysctl_tcp_adv_win_scale;
1398
1399 return tcp_adv_win_scale <= 0 ?
1400 (space>>(-tcp_adv_win_scale)) :
1401 space - (space>>tcp_adv_win_scale);
1402}
1403
1404
1405static inline int tcp_space(const struct sock *sk)
1406{
1407 return tcp_win_from_space(sk, READ_ONCE(sk->sk_rcvbuf) -
1408 READ_ONCE(sk->sk_backlog.len) -
1409 atomic_read(&sk->sk_rmem_alloc));
1410}
1411
1412static inline int tcp_full_space(const struct sock *sk)
1413{
1414 return tcp_win_from_space(sk, READ_ONCE(sk->sk_rcvbuf));
1415}
1416
1417void tcp_cleanup_rbuf(struct sock *sk, int copied);
1418
1419
1420
1421
1422
1423
1424static inline bool tcp_rmem_pressure(const struct sock *sk)
1425{
1426 int rcvbuf = READ_ONCE(sk->sk_rcvbuf);
1427 int threshold = rcvbuf - (rcvbuf >> 3);
1428
1429 return atomic_read(&sk->sk_rmem_alloc) > threshold;
1430}
1431
1432extern void tcp_openreq_init_rwin(struct request_sock *req,
1433 const struct sock *sk_listener,
1434 const struct dst_entry *dst);
1435
1436void tcp_enter_memory_pressure(struct sock *sk);
1437void tcp_leave_memory_pressure(struct sock *sk);
1438
1439static inline int keepalive_intvl_when(const struct tcp_sock *tp)
1440{
1441 struct net *net = sock_net((struct sock *)tp);
1442
1443 return tp->keepalive_intvl ? : net->ipv4.sysctl_tcp_keepalive_intvl;
1444}
1445
1446static inline int keepalive_time_when(const struct tcp_sock *tp)
1447{
1448 struct net *net = sock_net((struct sock *)tp);
1449
1450 return tp->keepalive_time ? : net->ipv4.sysctl_tcp_keepalive_time;
1451}
1452
1453static inline int keepalive_probes(const struct tcp_sock *tp)
1454{
1455 struct net *net = sock_net((struct sock *)tp);
1456
1457 return tp->keepalive_probes ? : net->ipv4.sysctl_tcp_keepalive_probes;
1458}
1459
1460static inline u32 keepalive_time_elapsed(const struct tcp_sock *tp)
1461{
1462 const struct inet_connection_sock *icsk = &tp->inet_conn;
1463
1464 return min_t(u32, tcp_jiffies32 - icsk->icsk_ack.lrcvtime,
1465 tcp_jiffies32 - tp->rcv_tstamp);
1466}
1467
1468static inline int tcp_fin_time(const struct sock *sk)
1469{
1470 int fin_timeout = tcp_sk(sk)->linger2 ? : sock_net(sk)->ipv4.sysctl_tcp_fin_timeout;
1471 const int rto = inet_csk(sk)->icsk_rto;
1472
1473 if (fin_timeout < (rto << 2) - (rto >> 1))
1474 fin_timeout = (rto << 2) - (rto >> 1);
1475
1476 return fin_timeout;
1477}
1478
1479static inline bool tcp_paws_check(const struct tcp_options_received *rx_opt,
1480 int paws_win)
1481{
1482 if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win)
1483 return true;
1484 if (unlikely(!time_before32(ktime_get_seconds(),
1485 rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS)))
1486 return true;
1487
1488
1489
1490
1491
1492 if (!rx_opt->ts_recent)
1493 return true;
1494 return false;
1495}
1496
1497static inline bool tcp_paws_reject(const struct tcp_options_received *rx_opt,
1498 int rst)
1499{
1500 if (tcp_paws_check(rx_opt, 0))
1501 return false;
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515 if (rst && !time_before32(ktime_get_seconds(),
1516 rx_opt->ts_recent_stamp + TCP_PAWS_MSL))
1517 return false;
1518 return true;
1519}
1520
1521bool tcp_oow_rate_limited(struct net *net, const struct sk_buff *skb,
1522 int mib_idx, u32 *last_oow_ack_time);
1523
1524static inline void tcp_mib_init(struct net *net)
1525{
1526
1527 TCP_ADD_STATS(net, TCP_MIB_RTOALGORITHM, 1);
1528 TCP_ADD_STATS(net, TCP_MIB_RTOMIN, TCP_RTO_MIN*1000/HZ);
1529 TCP_ADD_STATS(net, TCP_MIB_RTOMAX, TCP_RTO_MAX*1000/HZ);
1530 TCP_ADD_STATS(net, TCP_MIB_MAXCONN, -1);
1531}
1532
1533
1534static inline void tcp_clear_retrans_hints_partial(struct tcp_sock *tp)
1535{
1536 tp->lost_skb_hint = NULL;
1537}
1538
1539static inline void tcp_clear_all_retrans_hints(struct tcp_sock *tp)
1540{
1541 tcp_clear_retrans_hints_partial(tp);
1542 tp->retransmit_skb_hint = NULL;
1543}
1544
1545union tcp_md5_addr {
1546 struct in_addr a4;
1547#if IS_ENABLED(CONFIG_IPV6)
1548 struct in6_addr a6;
1549#endif
1550};
1551
1552
1553struct tcp_md5sig_key {
1554 struct hlist_node node;
1555 u8 keylen;
1556 u8 family;
1557 u8 prefixlen;
1558 union tcp_md5_addr addr;
1559 int l3index;
1560 u8 key[TCP_MD5SIG_MAXKEYLEN];
1561 struct rcu_head rcu;
1562};
1563
1564
1565struct tcp_md5sig_info {
1566 struct hlist_head head;
1567 struct rcu_head rcu;
1568};
1569
1570
1571struct tcp4_pseudohdr {
1572 __be32 saddr;
1573 __be32 daddr;
1574 __u8 pad;
1575 __u8 protocol;
1576 __be16 len;
1577};
1578
1579struct tcp6_pseudohdr {
1580 struct in6_addr saddr;
1581 struct in6_addr daddr;
1582 __be32 len;
1583 __be32 protocol;
1584};
1585
1586union tcp_md5sum_block {
1587 struct tcp4_pseudohdr ip4;
1588#if IS_ENABLED(CONFIG_IPV6)
1589 struct tcp6_pseudohdr ip6;
1590#endif
1591};
1592
1593
1594struct tcp_md5sig_pool {
1595 struct ahash_request *md5_req;
1596 void *scratch;
1597};
1598
1599
1600int tcp_v4_md5_hash_skb(char *md5_hash, const struct tcp_md5sig_key *key,
1601 const struct sock *sk, const struct sk_buff *skb);
1602int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr,
1603 int family, u8 prefixlen, int l3index,
1604 const u8 *newkey, u8 newkeylen, gfp_t gfp);
1605int tcp_md5_do_del(struct sock *sk, const union tcp_md5_addr *addr,
1606 int family, u8 prefixlen, int l3index);
1607struct tcp_md5sig_key *tcp_v4_md5_lookup(const struct sock *sk,
1608 const struct sock *addr_sk);
1609
1610#ifdef CONFIG_TCP_MD5SIG
1611#include <linux/jump_label.h>
1612extern struct static_key_false tcp_md5_needed;
1613struct tcp_md5sig_key *__tcp_md5_do_lookup(const struct sock *sk, int l3index,
1614 const union tcp_md5_addr *addr,
1615 int family);
1616static inline struct tcp_md5sig_key *
1617tcp_md5_do_lookup(const struct sock *sk, int l3index,
1618 const union tcp_md5_addr *addr, int family)
1619{
1620 if (!static_branch_unlikely(&tcp_md5_needed))
1621 return NULL;
1622 return __tcp_md5_do_lookup(sk, l3index, addr, family);
1623}
1624
1625#define tcp_twsk_md5_key(twsk) ((twsk)->tw_md5_key)
1626#else
1627static inline struct tcp_md5sig_key *
1628tcp_md5_do_lookup(const struct sock *sk, int l3index,
1629 const union tcp_md5_addr *addr, int family)
1630{
1631 return NULL;
1632}
1633#define tcp_twsk_md5_key(twsk) NULL
1634#endif
1635
1636bool tcp_alloc_md5sig_pool(void);
1637
1638struct tcp_md5sig_pool *tcp_get_md5sig_pool(void);
1639static inline void tcp_put_md5sig_pool(void)
1640{
1641 local_bh_enable();
1642}
1643
1644int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *, const struct sk_buff *,
1645 unsigned int header_len);
1646int tcp_md5_hash_key(struct tcp_md5sig_pool *hp,
1647 const struct tcp_md5sig_key *key);
1648
1649
1650void tcp_fastopen_cache_get(struct sock *sk, u16 *mss,
1651 struct tcp_fastopen_cookie *cookie);
1652void tcp_fastopen_cache_set(struct sock *sk, u16 mss,
1653 struct tcp_fastopen_cookie *cookie, bool syn_lost,
1654 u16 try_exp);
1655struct tcp_fastopen_request {
1656
1657 struct tcp_fastopen_cookie cookie;
1658 struct msghdr *data;
1659 size_t size;
1660 int copied;
1661 struct ubuf_info *uarg;
1662};
1663void tcp_free_fastopen_req(struct tcp_sock *tp);
1664void tcp_fastopen_destroy_cipher(struct sock *sk);
1665void tcp_fastopen_ctx_destroy(struct net *net);
1666int tcp_fastopen_reset_cipher(struct net *net, struct sock *sk,
1667 void *primary_key, void *backup_key);
1668int tcp_fastopen_get_cipher(struct net *net, struct inet_connection_sock *icsk,
1669 u64 *key);
1670void tcp_fastopen_add_skb(struct sock *sk, struct sk_buff *skb);
1671struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb,
1672 struct request_sock *req,
1673 struct tcp_fastopen_cookie *foc,
1674 const struct dst_entry *dst);
1675void tcp_fastopen_init_key_once(struct net *net);
1676bool tcp_fastopen_cookie_check(struct sock *sk, u16 *mss,
1677 struct tcp_fastopen_cookie *cookie);
1678bool tcp_fastopen_defer_connect(struct sock *sk, int *err);
1679#define TCP_FASTOPEN_KEY_LENGTH sizeof(siphash_key_t)
1680#define TCP_FASTOPEN_KEY_MAX 2
1681#define TCP_FASTOPEN_KEY_BUF_LENGTH \
1682 (TCP_FASTOPEN_KEY_LENGTH * TCP_FASTOPEN_KEY_MAX)
1683
1684
1685struct tcp_fastopen_context {
1686 siphash_key_t key[TCP_FASTOPEN_KEY_MAX];
1687 int num;
1688 struct rcu_head rcu;
1689};
1690
1691extern unsigned int sysctl_tcp_fastopen_blackhole_timeout;
1692void tcp_fastopen_active_disable(struct sock *sk);
1693bool tcp_fastopen_active_should_disable(struct sock *sk);
1694void tcp_fastopen_active_disable_ofo_check(struct sock *sk);
1695void tcp_fastopen_active_detect_blackhole(struct sock *sk, bool expired);
1696
1697
1698static inline
1699struct tcp_fastopen_context *tcp_fastopen_get_ctx(const struct sock *sk)
1700{
1701 struct tcp_fastopen_context *ctx;
1702
1703 ctx = rcu_dereference(inet_csk(sk)->icsk_accept_queue.fastopenq.ctx);
1704 if (!ctx)
1705 ctx = rcu_dereference(sock_net(sk)->ipv4.tcp_fastopen_ctx);
1706 return ctx;
1707}
1708
1709static inline
1710bool tcp_fastopen_cookie_match(const struct tcp_fastopen_cookie *foc,
1711 const struct tcp_fastopen_cookie *orig)
1712{
1713 if (orig->len == TCP_FASTOPEN_COOKIE_SIZE &&
1714 orig->len == foc->len &&
1715 !memcmp(orig->val, foc->val, foc->len))
1716 return true;
1717 return false;
1718}
1719
1720static inline
1721int tcp_fastopen_context_len(const struct tcp_fastopen_context *ctx)
1722{
1723 return ctx->num;
1724}
1725
1726
1727
1728
1729enum tcp_chrono {
1730 TCP_CHRONO_UNSPEC,
1731 TCP_CHRONO_BUSY,
1732 TCP_CHRONO_RWND_LIMITED,
1733 TCP_CHRONO_SNDBUF_LIMITED,
1734 __TCP_CHRONO_MAX,
1735};
1736
1737void tcp_chrono_start(struct sock *sk, const enum tcp_chrono type);
1738void tcp_chrono_stop(struct sock *sk, const enum tcp_chrono type);
1739
1740
1741
1742
1743static inline void tcp_skb_tsorted_anchor_cleanup(struct sk_buff *skb)
1744{
1745 skb->destructor = NULL;
1746 skb->_skb_refdst = 0UL;
1747}
1748
1749#define tcp_skb_tsorted_save(skb) { \
1750 unsigned long _save = skb->_skb_refdst; \
1751 skb->_skb_refdst = 0UL;
1752
1753#define tcp_skb_tsorted_restore(skb) \
1754 skb->_skb_refdst = _save; \
1755}
1756
1757void tcp_write_queue_purge(struct sock *sk);
1758
1759static inline struct sk_buff *tcp_rtx_queue_head(const struct sock *sk)
1760{
1761 return skb_rb_first(&sk->tcp_rtx_queue);
1762}
1763
1764static inline struct sk_buff *tcp_rtx_queue_tail(const struct sock *sk)
1765{
1766 return skb_rb_last(&sk->tcp_rtx_queue);
1767}
1768
1769static inline struct sk_buff *tcp_write_queue_head(const struct sock *sk)
1770{
1771 return skb_peek(&sk->sk_write_queue);
1772}
1773
1774static inline struct sk_buff *tcp_write_queue_tail(const struct sock *sk)
1775{
1776 return skb_peek_tail(&sk->sk_write_queue);
1777}
1778
1779#define tcp_for_write_queue_from_safe(skb, tmp, sk) \
1780 skb_queue_walk_from_safe(&(sk)->sk_write_queue, skb, tmp)
1781
1782static inline struct sk_buff *tcp_send_head(const struct sock *sk)
1783{
1784 return skb_peek(&sk->sk_write_queue);
1785}
1786
1787static inline bool tcp_skb_is_last(const struct sock *sk,
1788 const struct sk_buff *skb)
1789{
1790 return skb_queue_is_last(&sk->sk_write_queue, skb);
1791}
1792
1793
1794
1795
1796
1797
1798
1799
1800static inline bool tcp_write_queue_empty(const struct sock *sk)
1801{
1802 const struct tcp_sock *tp = tcp_sk(sk);
1803
1804 return tp->write_seq == tp->snd_nxt;
1805}
1806
1807static inline bool tcp_rtx_queue_empty(const struct sock *sk)
1808{
1809 return RB_EMPTY_ROOT(&sk->tcp_rtx_queue);
1810}
1811
1812static inline bool tcp_rtx_and_write_queues_empty(const struct sock *sk)
1813{
1814 return tcp_rtx_queue_empty(sk) && tcp_write_queue_empty(sk);
1815}
1816
1817static inline void tcp_add_write_queue_tail(struct sock *sk, struct sk_buff *skb)
1818{
1819 __skb_queue_tail(&sk->sk_write_queue, skb);
1820
1821
1822 if (sk->sk_write_queue.next == skb)
1823 tcp_chrono_start(sk, TCP_CHRONO_BUSY);
1824}
1825
1826
1827static inline void tcp_insert_write_queue_before(struct sk_buff *new,
1828 struct sk_buff *skb,
1829 struct sock *sk)
1830{
1831 __skb_queue_before(&sk->sk_write_queue, skb, new);
1832}
1833
1834static inline void tcp_unlink_write_queue(struct sk_buff *skb, struct sock *sk)
1835{
1836 tcp_skb_tsorted_anchor_cleanup(skb);
1837 __skb_unlink(skb, &sk->sk_write_queue);
1838}
1839
1840void tcp_rbtree_insert(struct rb_root *root, struct sk_buff *skb);
1841
1842static inline void tcp_rtx_queue_unlink(struct sk_buff *skb, struct sock *sk)
1843{
1844 tcp_skb_tsorted_anchor_cleanup(skb);
1845 rb_erase(&skb->rbnode, &sk->tcp_rtx_queue);
1846}
1847
1848static inline void tcp_rtx_queue_unlink_and_free(struct sk_buff *skb, struct sock *sk)
1849{
1850 list_del(&skb->tcp_tsorted_anchor);
1851 tcp_rtx_queue_unlink(skb, sk);
1852 sk_wmem_free_skb(sk, skb);
1853}
1854
1855static inline void tcp_push_pending_frames(struct sock *sk)
1856{
1857 if (tcp_send_head(sk)) {
1858 struct tcp_sock *tp = tcp_sk(sk);
1859
1860 __tcp_push_pending_frames(sk, tcp_current_mss(sk), tp->nonagle);
1861 }
1862}
1863
1864
1865
1866
1867
1868static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp)
1869{
1870 if (!tp->sacked_out)
1871 return tp->snd_una;
1872
1873 if (tp->highest_sack == NULL)
1874 return tp->snd_nxt;
1875
1876 return TCP_SKB_CB(tp->highest_sack)->seq;
1877}
1878
1879static inline void tcp_advance_highest_sack(struct sock *sk, struct sk_buff *skb)
1880{
1881 tcp_sk(sk)->highest_sack = skb_rb_next(skb);
1882}
1883
1884static inline struct sk_buff *tcp_highest_sack(struct sock *sk)
1885{
1886 return tcp_sk(sk)->highest_sack;
1887}
1888
1889static inline void tcp_highest_sack_reset(struct sock *sk)
1890{
1891 tcp_sk(sk)->highest_sack = tcp_rtx_queue_head(sk);
1892}
1893
1894
1895static inline void tcp_highest_sack_replace(struct sock *sk,
1896 struct sk_buff *old,
1897 struct sk_buff *new)
1898{
1899 if (old == tcp_highest_sack(sk))
1900 tcp_sk(sk)->highest_sack = new;
1901}
1902
1903
1904static inline bool inet_sk_transparent(const struct sock *sk)
1905{
1906 switch (sk->sk_state) {
1907 case TCP_TIME_WAIT:
1908 return inet_twsk(sk)->tw_transparent;
1909 case TCP_NEW_SYN_RECV:
1910 return inet_rsk(inet_reqsk(sk))->no_srccheck;
1911 }
1912 return inet_sk(sk)->transparent;
1913}
1914
1915
1916
1917
1918static inline bool tcp_stream_is_thin(struct tcp_sock *tp)
1919{
1920 return tp->packets_out < 4 && !tcp_in_initial_slowstart(tp);
1921}
1922
1923
1924enum tcp_seq_states {
1925 TCP_SEQ_STATE_LISTENING,
1926 TCP_SEQ_STATE_ESTABLISHED,
1927};
1928
1929void *tcp_seq_start(struct seq_file *seq, loff_t *pos);
1930void *tcp_seq_next(struct seq_file *seq, void *v, loff_t *pos);
1931void tcp_seq_stop(struct seq_file *seq, void *v);
1932
1933struct tcp_seq_afinfo {
1934 sa_family_t family;
1935};
1936
1937struct tcp_iter_state {
1938 struct seq_net_private p;
1939 enum tcp_seq_states state;
1940 struct sock *syn_wait_sk;
1941 struct tcp_seq_afinfo *bpf_seq_afinfo;
1942 int bucket, offset, sbucket, num;
1943 loff_t last_pos;
1944};
1945
1946extern struct request_sock_ops tcp_request_sock_ops;
1947extern struct request_sock_ops tcp6_request_sock_ops;
1948
1949void tcp_v4_destroy_sock(struct sock *sk);
1950
1951struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
1952 netdev_features_t features);
1953struct sk_buff *tcp_gro_receive(struct list_head *head, struct sk_buff *skb);
1954INDIRECT_CALLABLE_DECLARE(int tcp4_gro_complete(struct sk_buff *skb, int thoff));
1955INDIRECT_CALLABLE_DECLARE(struct sk_buff *tcp4_gro_receive(struct list_head *head, struct sk_buff *skb));
1956INDIRECT_CALLABLE_DECLARE(int tcp6_gro_complete(struct sk_buff *skb, int thoff));
1957INDIRECT_CALLABLE_DECLARE(struct sk_buff *tcp6_gro_receive(struct list_head *head, struct sk_buff *skb));
1958int tcp_gro_complete(struct sk_buff *skb);
1959
1960void __tcp_v4_send_check(struct sk_buff *skb, __be32 saddr, __be32 daddr);
1961
1962static inline u32 tcp_notsent_lowat(const struct tcp_sock *tp)
1963{
1964 struct net *net = sock_net((struct sock *)tp);
1965 return tp->notsent_lowat ?: net->ipv4.sysctl_tcp_notsent_lowat;
1966}
1967
1968
1969
1970
1971
1972static inline bool tcp_stream_memory_free(const struct sock *sk, int wake)
1973{
1974 const struct tcp_sock *tp = tcp_sk(sk);
1975 u32 notsent_bytes = READ_ONCE(tp->write_seq) -
1976 READ_ONCE(tp->snd_nxt);
1977
1978 return (notsent_bytes << wake) < tcp_notsent_lowat(tp);
1979}
1980
1981#ifdef CONFIG_PROC_FS
1982int tcp4_proc_init(void);
1983void tcp4_proc_exit(void);
1984#endif
1985
1986int tcp_rtx_synack(const struct sock *sk, struct request_sock *req);
1987int tcp_conn_request(struct request_sock_ops *rsk_ops,
1988 const struct tcp_request_sock_ops *af_ops,
1989 struct sock *sk, struct sk_buff *skb);
1990
1991
1992struct tcp_sock_af_ops {
1993#ifdef CONFIG_TCP_MD5SIG
1994 struct tcp_md5sig_key *(*md5_lookup) (const struct sock *sk,
1995 const struct sock *addr_sk);
1996 int (*calc_md5_hash)(char *location,
1997 const struct tcp_md5sig_key *md5,
1998 const struct sock *sk,
1999 const struct sk_buff *skb);
2000 int (*md5_parse)(struct sock *sk,
2001 int optname,
2002 sockptr_t optval,
2003 int optlen);
2004#endif
2005};
2006
2007struct tcp_request_sock_ops {
2008 u16 mss_clamp;
2009#ifdef CONFIG_TCP_MD5SIG
2010 struct tcp_md5sig_key *(*req_md5_lookup)(const struct sock *sk,
2011 const struct sock *addr_sk);
2012 int (*calc_md5_hash) (char *location,
2013 const struct tcp_md5sig_key *md5,
2014 const struct sock *sk,
2015 const struct sk_buff *skb);
2016#endif
2017 void (*init_req)(struct request_sock *req,
2018 const struct sock *sk_listener,
2019 struct sk_buff *skb);
2020#ifdef CONFIG_SYN_COOKIES
2021 __u32 (*cookie_init_seq)(const struct sk_buff *skb,
2022 __u16 *mss);
2023#endif
2024 struct dst_entry *(*route_req)(const struct sock *sk, struct flowi *fl,
2025 const struct request_sock *req);
2026 u32 (*init_seq)(const struct sk_buff *skb);
2027 u32 (*init_ts_off)(const struct net *net, const struct sk_buff *skb);
2028 int (*send_synack)(const struct sock *sk, struct dst_entry *dst,
2029 struct flowi *fl, struct request_sock *req,
2030 struct tcp_fastopen_cookie *foc,
2031 enum tcp_synack_type synack_type,
2032 struct sk_buff *syn_skb);
2033};
2034
2035extern const struct tcp_request_sock_ops tcp_request_sock_ipv4_ops;
2036#if IS_ENABLED(CONFIG_IPV6)
2037extern const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops;
2038#endif
2039
2040#ifdef CONFIG_SYN_COOKIES
2041static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
2042 const struct sock *sk, struct sk_buff *skb,
2043 __u16 *mss)
2044{
2045 tcp_synq_overflow(sk);
2046 __NET_INC_STATS(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
2047 return ops->cookie_init_seq(skb, mss);
2048}
2049#else
2050static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
2051 const struct sock *sk, struct sk_buff *skb,
2052 __u16 *mss)
2053{
2054 return 0;
2055}
2056#endif
2057
2058int tcpv4_offload_init(void);
2059
2060void tcp_v4_init(void);
2061void tcp_init(void);
2062
2063
2064void tcp_mark_skb_lost(struct sock *sk, struct sk_buff *skb);
2065void tcp_newreno_mark_lost(struct sock *sk, bool snd_una_advanced);
2066extern s32 tcp_rack_skb_timeout(struct tcp_sock *tp, struct sk_buff *skb,
2067 u32 reo_wnd);
2068extern void tcp_rack_mark_lost(struct sock *sk);
2069extern void tcp_rack_advance(struct tcp_sock *tp, u8 sacked, u32 end_seq,
2070 u64 xmit_time);
2071extern void tcp_rack_reo_timeout(struct sock *sk);
2072extern void tcp_rack_update_reo_wnd(struct sock *sk, struct rate_sample *rs);
2073
2074
2075static inline s64 tcp_rto_delta_us(const struct sock *sk)
2076{
2077 const struct sk_buff *skb = tcp_rtx_queue_head(sk);
2078 u32 rto = inet_csk(sk)->icsk_rto;
2079 u64 rto_time_stamp_us = tcp_skb_timestamp_us(skb) + jiffies_to_usecs(rto);
2080
2081 return rto_time_stamp_us - tcp_sk(sk)->tcp_mstamp;
2082}
2083
2084
2085
2086
2087static inline struct ip_options_rcu *tcp_v4_save_options(struct net *net,
2088 struct sk_buff *skb)
2089{
2090 const struct ip_options *opt = &TCP_SKB_CB(skb)->header.h4.opt;
2091 struct ip_options_rcu *dopt = NULL;
2092
2093 if (opt->optlen) {
2094 int opt_size = sizeof(*dopt) + opt->optlen;
2095
2096 dopt = kmalloc(opt_size, GFP_ATOMIC);
2097 if (dopt && __ip_options_echo(net, &dopt->opt, skb, opt)) {
2098 kfree(dopt);
2099 dopt = NULL;
2100 }
2101 }
2102 return dopt;
2103}
2104
2105
2106
2107
2108
2109
2110static inline bool skb_is_tcp_pure_ack(const struct sk_buff *skb)
2111{
2112 return skb->truesize == 2;
2113}
2114
2115static inline void skb_set_tcp_pure_ack(struct sk_buff *skb)
2116{
2117 skb->truesize = 2;
2118}
2119
2120static inline int tcp_inq(struct sock *sk)
2121{
2122 struct tcp_sock *tp = tcp_sk(sk);
2123 int answ;
2124
2125 if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) {
2126 answ = 0;
2127 } else if (sock_flag(sk, SOCK_URGINLINE) ||
2128 !tp->urg_data ||
2129 before(tp->urg_seq, tp->copied_seq) ||
2130 !before(tp->urg_seq, tp->rcv_nxt)) {
2131
2132 answ = tp->rcv_nxt - tp->copied_seq;
2133
2134
2135 if (answ && sock_flag(sk, SOCK_DONE))
2136 answ--;
2137 } else {
2138 answ = tp->urg_seq - tp->copied_seq;
2139 }
2140
2141 return answ;
2142}
2143
2144int tcp_peek_len(struct socket *sock);
2145
2146static inline void tcp_segs_in(struct tcp_sock *tp, const struct sk_buff *skb)
2147{
2148 u16 segs_in;
2149
2150 segs_in = max_t(u16, 1, skb_shinfo(skb)->gso_segs);
2151 tp->segs_in += segs_in;
2152 if (skb->len > tcp_hdrlen(skb))
2153 tp->data_segs_in += segs_in;
2154}
2155
2156
2157
2158
2159
2160
2161
2162
2163static inline void tcp_listendrop(const struct sock *sk)
2164{
2165 atomic_inc(&((struct sock *)sk)->sk_drops);
2166 __NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENDROPS);
2167}
2168
2169enum hrtimer_restart tcp_pace_kick(struct hrtimer *timer);
2170
2171
2172
2173
2174
2175#define TCP_ULP_NAME_MAX 16
2176#define TCP_ULP_MAX 128
2177#define TCP_ULP_BUF_MAX (TCP_ULP_NAME_MAX*TCP_ULP_MAX)
2178
2179struct tcp_ulp_ops {
2180 struct list_head list;
2181
2182
2183 int (*init)(struct sock *sk);
2184
2185 void (*update)(struct sock *sk, struct proto *p,
2186 void (*write_space)(struct sock *sk));
2187
2188 void (*release)(struct sock *sk);
2189
2190 int (*get_info)(const struct sock *sk, struct sk_buff *skb);
2191 size_t (*get_info_size)(const struct sock *sk);
2192
2193 void (*clone)(const struct request_sock *req, struct sock *newsk,
2194 const gfp_t priority);
2195
2196 char name[TCP_ULP_NAME_MAX];
2197 struct module *owner;
2198};
2199int tcp_register_ulp(struct tcp_ulp_ops *type);
2200void tcp_unregister_ulp(struct tcp_ulp_ops *type);
2201int tcp_set_ulp(struct sock *sk, const char *name);
2202void tcp_get_available_ulp(char *buf, size_t len);
2203void tcp_cleanup_ulp(struct sock *sk);
2204void tcp_update_ulp(struct sock *sk, struct proto *p,
2205 void (*write_space)(struct sock *sk));
2206
2207#define MODULE_ALIAS_TCP_ULP(name) \
2208 __MODULE_INFO(alias, alias_userspace, name); \
2209 __MODULE_INFO(alias, alias_tcp_ulp, "tcp-ulp-" name)
2210
2211struct sk_msg;
2212struct sk_psock;
2213
2214#ifdef CONFIG_BPF_STREAM_PARSER
2215struct proto *tcp_bpf_get_proto(struct sock *sk, struct sk_psock *psock);
2216void tcp_bpf_clone(const struct sock *sk, struct sock *newsk);
2217#else
2218static inline void tcp_bpf_clone(const struct sock *sk, struct sock *newsk)
2219{
2220}
2221#endif
2222
2223#ifdef CONFIG_NET_SOCK_MSG
2224int tcp_bpf_sendmsg_redir(struct sock *sk, struct sk_msg *msg, u32 bytes,
2225 int flags);
2226int __tcp_bpf_recvmsg(struct sock *sk, struct sk_psock *psock,
2227 struct msghdr *msg, int len, int flags);
2228#endif
2229
2230#ifdef CONFIG_CGROUP_BPF
2231static inline void bpf_skops_init_skb(struct bpf_sock_ops_kern *skops,
2232 struct sk_buff *skb,
2233 unsigned int end_offset)
2234{
2235 skops->skb = skb;
2236 skops->skb_data_end = skb->data + end_offset;
2237}
2238#else
2239static inline void bpf_skops_init_skb(struct bpf_sock_ops_kern *skops,
2240 struct sk_buff *skb,
2241 unsigned int end_offset)
2242{
2243}
2244#endif
2245
2246
2247
2248
2249
2250
2251#ifdef CONFIG_BPF
2252static inline int tcp_call_bpf(struct sock *sk, int op, u32 nargs, u32 *args)
2253{
2254 struct bpf_sock_ops_kern sock_ops;
2255 int ret;
2256
2257 memset(&sock_ops, 0, offsetof(struct bpf_sock_ops_kern, temp));
2258 if (sk_fullsock(sk)) {
2259 sock_ops.is_fullsock = 1;
2260 sock_owned_by_me(sk);
2261 }
2262
2263 sock_ops.sk = sk;
2264 sock_ops.op = op;
2265 if (nargs > 0)
2266 memcpy(sock_ops.args, args, nargs * sizeof(*args));
2267
2268 ret = BPF_CGROUP_RUN_PROG_SOCK_OPS(&sock_ops);
2269 if (ret == 0)
2270 ret = sock_ops.reply;
2271 else
2272 ret = -1;
2273 return ret;
2274}
2275
2276static inline int tcp_call_bpf_2arg(struct sock *sk, int op, u32 arg1, u32 arg2)
2277{
2278 u32 args[2] = {arg1, arg2};
2279
2280 return tcp_call_bpf(sk, op, 2, args);
2281}
2282
2283static inline int tcp_call_bpf_3arg(struct sock *sk, int op, u32 arg1, u32 arg2,
2284 u32 arg3)
2285{
2286 u32 args[3] = {arg1, arg2, arg3};
2287
2288 return tcp_call_bpf(sk, op, 3, args);
2289}
2290
2291#else
2292static inline int tcp_call_bpf(struct sock *sk, int op, u32 nargs, u32 *args)
2293{
2294 return -EPERM;
2295}
2296
2297static inline int tcp_call_bpf_2arg(struct sock *sk, int op, u32 arg1, u32 arg2)
2298{
2299 return -EPERM;
2300}
2301
2302static inline int tcp_call_bpf_3arg(struct sock *sk, int op, u32 arg1, u32 arg2,
2303 u32 arg3)
2304{
2305 return -EPERM;
2306}
2307
2308#endif
2309
2310static inline u32 tcp_timeout_init(struct sock *sk)
2311{
2312 int timeout;
2313
2314 timeout = tcp_call_bpf(sk, BPF_SOCK_OPS_TIMEOUT_INIT, 0, NULL);
2315
2316 if (timeout <= 0)
2317 timeout = TCP_TIMEOUT_INIT;
2318 return timeout;
2319}
2320
2321static inline u32 tcp_rwnd_init_bpf(struct sock *sk)
2322{
2323 int rwnd;
2324
2325 rwnd = tcp_call_bpf(sk, BPF_SOCK_OPS_RWND_INIT, 0, NULL);
2326
2327 if (rwnd < 0)
2328 rwnd = 0;
2329 return rwnd;
2330}
2331
2332static inline bool tcp_bpf_ca_needs_ecn(struct sock *sk)
2333{
2334 return (tcp_call_bpf(sk, BPF_SOCK_OPS_NEEDS_ECN, 0, NULL) == 1);
2335}
2336
2337static inline void tcp_bpf_rtt(struct sock *sk)
2338{
2339 if (BPF_SOCK_OPS_TEST_FLAG(tcp_sk(sk), BPF_SOCK_OPS_RTT_CB_FLAG))
2340 tcp_call_bpf(sk, BPF_SOCK_OPS_RTT_CB, 0, NULL);
2341}
2342
2343#if IS_ENABLED(CONFIG_SMC)
2344extern struct static_key_false tcp_have_smc;
2345#endif
2346
2347#if IS_ENABLED(CONFIG_TLS_DEVICE)
2348void clean_acked_data_enable(struct inet_connection_sock *icsk,
2349 void (*cad)(struct sock *sk, u32 ack_seq));
2350void clean_acked_data_disable(struct inet_connection_sock *icsk);
2351void clean_acked_data_flush(void);
2352#endif
2353
2354DECLARE_STATIC_KEY_FALSE(tcp_tx_delay_enabled);
2355static inline void tcp_add_tx_delay(struct sk_buff *skb,
2356 const struct tcp_sock *tp)
2357{
2358 if (static_branch_unlikely(&tcp_tx_delay_enabled))
2359 skb->skb_mstamp_ns += (u64)tp->tcp_tx_delay * NSEC_PER_USEC;
2360}
2361
2362
2363
2364
2365static inline u64 tcp_transmit_time(const struct sock *sk)
2366{
2367 if (static_branch_unlikely(&tcp_tx_delay_enabled)) {
2368 u32 delay = (sk->sk_state == TCP_TIME_WAIT) ?
2369 tcp_twsk(sk)->tw_tx_delay : tcp_sk(sk)->tcp_tx_delay;
2370
2371 return tcp_clock_ns() + (u64)delay * NSEC_PER_USEC;
2372 }
2373 return 0;
2374}
2375
2376#endif
2377