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