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