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 TCP_DEBUG 1
22#define FASTRETRANS_DEBUG 1
23
24#include <linux/list.h>
25#include <linux/tcp.h>
26#include <linux/slab.h>
27#include <linux/cache.h>
28#include <linux/percpu.h>
29#include <linux/skbuff.h>
30#include <linux/dmaengine.h>
31
32#include <net/inet_connection_sock.h>
33#include <net/inet_timewait_sock.h>
34#include <net/inet_hashtables.h>
35#include <net/checksum.h>
36#include <net/request_sock.h>
37#include <net/sock.h>
38#include <net/snmp.h>
39#include <net/ip.h>
40#include <net/tcp_states.h>
41
42#include <linux/seq_file.h>
43
44extern struct inet_hashinfo tcp_hashinfo;
45
46extern atomic_t tcp_orphan_count;
47extern void tcp_time_wait(struct sock *sk, int state, int timeo);
48
49#define MAX_TCP_HEADER (128 + MAX_HEADER)
50
51
52
53
54
55#define MAX_TCP_WINDOW 32767U
56
57
58#define TCP_MIN_MSS 88U
59
60
61#define TCP_MIN_RCVMSS 536U
62
63
64#define TCP_BASE_MSS 512
65
66
67#define TCP_FASTRETRANS_THRESH 3
68
69
70#define TCP_MAX_REORDERING 127
71
72
73#define TCP_MAX_QUICKACKS 16U
74
75
76#define TCP_URG_VALID 0x0100
77#define TCP_URG_NOTYET 0x0200
78#define TCP_URG_READ 0x0400
79
80#define TCP_RETR1 3
81
82
83
84
85
86
87#define TCP_RETR2 15
88
89
90
91
92
93
94#define TCP_SYN_RETRIES 5
95
96
97#define TCP_SYNACK_RETRIES 5
98
99
100
101#define TCP_ORPHAN_RETRIES 7
102
103
104
105
106#define TCP_TIMEWAIT_LEN (60*HZ)
107
108#define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
109
110
111
112
113
114
115#define TCP_DELACK_MAX ((unsigned)(HZ/5))
116#if HZ >= 100
117#define TCP_DELACK_MIN ((unsigned)(HZ/25))
118#define TCP_ATO_MIN ((unsigned)(HZ/25))
119#else
120#define TCP_DELACK_MIN 4U
121#define TCP_ATO_MIN 4U
122#endif
123#define TCP_RTO_MAX ((unsigned)(120*HZ))
124#define TCP_RTO_MIN ((unsigned)(HZ/5))
125#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ))
126
127#define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U))
128
129
130
131#define TCP_KEEPALIVE_TIME (120*60*HZ)
132#define TCP_KEEPALIVE_PROBES 9
133#define TCP_KEEPALIVE_INTVL (75*HZ)
134
135#define MAX_TCP_KEEPIDLE 32767
136#define MAX_TCP_KEEPINTVL 32767
137#define MAX_TCP_KEEPCNT 127
138#define MAX_TCP_SYNCNT 127
139
140#define TCP_SYNQ_INTERVAL (HZ/5)
141#define TCP_SYNQ_HSIZE 512
142
143#define TCP_PAWS_24DAYS (60 * 60 * 24 * 24)
144#define TCP_PAWS_MSL 60
145
146
147
148
149
150#define TCP_PAWS_WINDOW 1
151
152
153
154
155
156
157
158#define TCPOPT_NOP 1
159#define TCPOPT_EOL 0
160#define TCPOPT_MSS 2
161#define TCPOPT_WINDOW 3
162#define TCPOPT_SACK_PERM 4
163#define TCPOPT_SACK 5
164#define TCPOPT_TIMESTAMP 8
165
166
167
168
169
170#define TCPOLEN_MSS 4
171#define TCPOLEN_WINDOW 3
172#define TCPOLEN_SACK_PERM 2
173#define TCPOLEN_TIMESTAMP 10
174
175
176#define TCPOLEN_TSTAMP_ALIGNED 12
177#define TCPOLEN_WSCALE_ALIGNED 4
178#define TCPOLEN_SACKPERM_ALIGNED 4
179#define TCPOLEN_SACK_BASE 2
180#define TCPOLEN_SACK_BASE_ALIGNED 4
181#define TCPOLEN_SACK_PERBLOCK 8
182
183
184#define TCP_NAGLE_OFF 1
185#define TCP_NAGLE_CORK 2
186#define TCP_NAGLE_PUSH 4
187
188extern struct inet_timewait_death_row tcp_death_row;
189
190
191extern int sysctl_tcp_timestamps;
192extern int sysctl_tcp_window_scaling;
193extern int sysctl_tcp_sack;
194extern int sysctl_tcp_fin_timeout;
195extern int sysctl_tcp_keepalive_time;
196extern int sysctl_tcp_keepalive_probes;
197extern int sysctl_tcp_keepalive_intvl;
198extern int sysctl_tcp_syn_retries;
199extern int sysctl_tcp_synack_retries;
200extern int sysctl_tcp_retries1;
201extern int sysctl_tcp_retries2;
202extern int sysctl_tcp_orphan_retries;
203extern int sysctl_tcp_syncookies;
204extern int sysctl_tcp_retrans_collapse;
205extern int sysctl_tcp_stdurg;
206extern int sysctl_tcp_rfc1337;
207extern int sysctl_tcp_abort_on_overflow;
208extern int sysctl_tcp_max_orphans;
209extern int sysctl_tcp_fack;
210extern int sysctl_tcp_reordering;
211extern int sysctl_tcp_ecn;
212extern int sysctl_tcp_dsack;
213extern int sysctl_tcp_mem[3];
214extern int sysctl_tcp_wmem[3];
215extern int sysctl_tcp_rmem[3];
216extern int sysctl_tcp_app_win;
217extern int sysctl_tcp_adv_win_scale;
218extern int sysctl_tcp_tw_reuse;
219extern int sysctl_tcp_frto;
220extern int sysctl_tcp_low_latency;
221extern int sysctl_tcp_dma_copybreak;
222extern int sysctl_tcp_nometrics_save;
223extern int sysctl_tcp_moderate_rcvbuf;
224extern int sysctl_tcp_tso_win_divisor;
225extern int sysctl_tcp_abc;
226extern int sysctl_tcp_mtu_probing;
227extern int sysctl_tcp_base_mss;
228extern int sysctl_tcp_workaround_signed_windows;
229extern int sysctl_tcp_slow_start_after_idle;
230
231extern atomic_t tcp_memory_allocated;
232extern atomic_t tcp_sockets_allocated;
233extern int tcp_memory_pressure;
234
235
236
237
238
239
240static inline int before(__u32 seq1, __u32 seq2)
241{
242 return (__s32)(seq1-seq2) < 0;
243}
244
245static inline int after(__u32 seq1, __u32 seq2)
246{
247 return (__s32)(seq2-seq1) < 0;
248}
249
250
251
252static inline int between(__u32 seq1, __u32 seq2, __u32 seq3)
253{
254 return seq3 - seq2 >= seq1 - seq2;
255}
256
257
258extern struct proto tcp_prot;
259
260DECLARE_SNMP_STAT(struct tcp_mib, tcp_statistics);
261#define TCP_INC_STATS(field) SNMP_INC_STATS(tcp_statistics, field)
262#define TCP_INC_STATS_BH(field) SNMP_INC_STATS_BH(tcp_statistics, field)
263#define TCP_INC_STATS_USER(field) SNMP_INC_STATS_USER(tcp_statistics, field)
264#define TCP_DEC_STATS(field) SNMP_DEC_STATS(tcp_statistics, field)
265#define TCP_ADD_STATS_BH(field, val) SNMP_ADD_STATS_BH(tcp_statistics, field, val)
266#define TCP_ADD_STATS_USER(field, val) SNMP_ADD_STATS_USER(tcp_statistics, field, val)
267
268extern void tcp_v4_err(struct sk_buff *skb, u32);
269
270extern void tcp_shutdown (struct sock *sk, int how);
271
272extern int tcp_v4_rcv(struct sk_buff *skb);
273
274extern int tcp_v4_remember_stamp(struct sock *sk);
275
276extern int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);
277
278extern int tcp_sendmsg(struct kiocb *iocb, struct sock *sk,
279 struct msghdr *msg, size_t size);
280extern ssize_t tcp_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags);
281
282extern int tcp_ioctl(struct sock *sk,
283 int cmd,
284 unsigned long arg);
285
286extern int tcp_rcv_state_process(struct sock *sk,
287 struct sk_buff *skb,
288 struct tcphdr *th,
289 unsigned len);
290
291extern int tcp_rcv_established(struct sock *sk,
292 struct sk_buff *skb,
293 struct tcphdr *th,
294 unsigned len);
295
296extern void tcp_rcv_space_adjust(struct sock *sk);
297
298extern void tcp_cleanup_rbuf(struct sock *sk, int copied);
299
300extern int tcp_twsk_unique(struct sock *sk,
301 struct sock *sktw, void *twp);
302
303static inline void tcp_dec_quickack_mode(struct sock *sk,
304 const unsigned int pkts)
305{
306 struct inet_connection_sock *icsk = inet_csk(sk);
307
308 if (icsk->icsk_ack.quick) {
309 if (pkts >= icsk->icsk_ack.quick) {
310 icsk->icsk_ack.quick = 0;
311
312 icsk->icsk_ack.ato = TCP_ATO_MIN;
313 } else
314 icsk->icsk_ack.quick -= pkts;
315 }
316}
317
318extern void tcp_enter_quickack_mode(struct sock *sk);
319
320static inline void tcp_clear_options(struct tcp_options_received *rx_opt)
321{
322 rx_opt->tstamp_ok = rx_opt->sack_ok = rx_opt->wscale_ok = rx_opt->snd_wscale = 0;
323}
324
325enum tcp_tw_status
326{
327 TCP_TW_SUCCESS = 0,
328 TCP_TW_RST = 1,
329 TCP_TW_ACK = 2,
330 TCP_TW_SYN = 3
331};
332
333
334extern enum tcp_tw_status tcp_timewait_state_process(struct inet_timewait_sock *tw,
335 struct sk_buff *skb,
336 const struct tcphdr *th);
337
338extern struct sock * tcp_check_req(struct sock *sk,struct sk_buff *skb,
339 struct request_sock *req,
340 struct request_sock **prev);
341extern int tcp_child_process(struct sock *parent,
342 struct sock *child,
343 struct sk_buff *skb);
344extern void tcp_enter_frto(struct sock *sk);
345extern void tcp_enter_loss(struct sock *sk, int how);
346extern void tcp_clear_retrans(struct tcp_sock *tp);
347extern void tcp_update_metrics(struct sock *sk);
348
349extern void tcp_close(struct sock *sk,
350 long timeout);
351extern unsigned int tcp_poll(struct file * file, struct socket *sock, struct poll_table_struct *wait);
352
353extern int tcp_getsockopt(struct sock *sk, int level,
354 int optname,
355 char __user *optval,
356 int __user *optlen);
357extern int tcp_setsockopt(struct sock *sk, int level,
358 int optname, char __user *optval,
359 int optlen);
360extern int compat_tcp_getsockopt(struct sock *sk,
361 int level, int optname,
362 char __user *optval, int __user *optlen);
363extern int compat_tcp_setsockopt(struct sock *sk,
364 int level, int optname,
365 char __user *optval, int optlen);
366extern void tcp_set_keepalive(struct sock *sk, int val);
367extern int tcp_recvmsg(struct kiocb *iocb, struct sock *sk,
368 struct msghdr *msg,
369 size_t len, int nonblock,
370 int flags, int *addr_len);
371
372extern void tcp_parse_options(struct sk_buff *skb,
373 struct tcp_options_received *opt_rx,
374 int estab);
375
376
377
378
379
380extern void tcp_v4_send_check(struct sock *sk, int len,
381 struct sk_buff *skb);
382
383extern int tcp_v4_conn_request(struct sock *sk,
384 struct sk_buff *skb);
385
386extern struct sock * tcp_create_openreq_child(struct sock *sk,
387 struct request_sock *req,
388 struct sk_buff *skb);
389
390extern struct sock * tcp_v4_syn_recv_sock(struct sock *sk,
391 struct sk_buff *skb,
392 struct request_sock *req,
393 struct dst_entry *dst);
394
395extern int tcp_v4_do_rcv(struct sock *sk,
396 struct sk_buff *skb);
397
398extern int tcp_v4_connect(struct sock *sk,
399 struct sockaddr *uaddr,
400 int addr_len);
401
402extern int tcp_connect(struct sock *sk);
403
404extern struct sk_buff * tcp_make_synack(struct sock *sk,
405 struct dst_entry *dst,
406 struct request_sock *req);
407
408extern int tcp_disconnect(struct sock *sk, int flags);
409
410extern void tcp_unhash(struct sock *sk);
411
412
413extern struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb,
414 struct ip_options *opt);
415extern __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb,
416 __u16 *mss);
417
418
419
420extern void __tcp_push_pending_frames(struct sock *sk, struct tcp_sock *tp,
421 unsigned int cur_mss, int nonagle);
422extern int tcp_may_send_now(struct sock *sk, struct tcp_sock *tp);
423extern int tcp_retransmit_skb(struct sock *, struct sk_buff *);
424extern void tcp_xmit_retransmit_queue(struct sock *);
425extern void tcp_simple_retransmit(struct sock *);
426extern int tcp_trim_head(struct sock *, struct sk_buff *, u32);
427extern int tcp_fragment(struct sock *, struct sk_buff *, u32, unsigned int);
428
429extern void tcp_send_probe0(struct sock *);
430extern void tcp_send_partial(struct sock *);
431extern int tcp_write_wakeup(struct sock *);
432extern void tcp_send_fin(struct sock *sk);
433extern void tcp_send_active_reset(struct sock *sk, gfp_t priority);
434extern int tcp_send_synack(struct sock *);
435extern void tcp_push_one(struct sock *, unsigned int mss_now);
436extern void tcp_send_ack(struct sock *sk);
437extern void tcp_send_delayed_ack(struct sock *sk);
438
439
440extern void tcp_cwnd_application_limited(struct sock *sk);
441
442
443extern void tcp_init_xmit_timers(struct sock *);
444static inline void tcp_clear_xmit_timers(struct sock *sk)
445{
446 inet_csk_clear_xmit_timers(sk);
447}
448
449extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
450extern unsigned int tcp_current_mss(struct sock *sk, int large);
451
452
453extern void tcp_get_info(struct sock *, struct tcp_info *);
454
455
456typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *,
457 unsigned int, size_t);
458extern int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
459 sk_read_actor_t recv_actor);
460
461extern void tcp_initialize_rcv_mss(struct sock *sk);
462
463extern int tcp_mtu_to_mss(struct sock *sk, int pmtu);
464extern int tcp_mss_to_mtu(struct sock *sk, int mss);
465extern void tcp_mtup_init(struct sock *sk);
466
467static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
468{
469 tp->pred_flags = htonl((tp->tcp_header_len << 26) |
470 ntohl(TCP_FLAG_ACK) |
471 snd_wnd);
472}
473
474static inline void tcp_fast_path_on(struct tcp_sock *tp)
475{
476 __tcp_fast_path_on(tp, tp->snd_wnd >> tp->rx_opt.snd_wscale);
477}
478
479static inline void tcp_fast_path_check(struct sock *sk, struct tcp_sock *tp)
480{
481 if (skb_queue_empty(&tp->out_of_order_queue) &&
482 tp->rcv_wnd &&
483 atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf &&
484 !tp->urg_data)
485 tcp_fast_path_on(tp);
486}
487
488
489
490
491
492static inline u32 tcp_receive_window(const struct tcp_sock *tp)
493{
494 s32 win = tp->rcv_wup + tp->rcv_wnd - tp->rcv_nxt;
495
496 if (win < 0)
497 win = 0;
498 return (u32) win;
499}
500
501
502
503
504
505extern u32 __tcp_select_window(struct sock *sk);
506
507
508
509
510
511
512
513#define tcp_time_stamp ((__u32)(jiffies))
514
515
516
517
518
519
520
521
522struct tcp_skb_cb {
523 union {
524 struct inet_skb_parm h4;
525#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
526 struct inet6_skb_parm h6;
527#endif
528 } header;
529 __u32 seq;
530 __u32 end_seq;
531 __u32 when;
532 __u8 flags;
533
534
535
536
537#define TCPCB_FLAG_FIN 0x01
538#define TCPCB_FLAG_SYN 0x02
539#define TCPCB_FLAG_RST 0x04
540#define TCPCB_FLAG_PSH 0x08
541#define TCPCB_FLAG_ACK 0x10
542#define TCPCB_FLAG_URG 0x20
543#define TCPCB_FLAG_ECE 0x40
544#define TCPCB_FLAG_CWR 0x80
545
546 __u8 sacked;
547#define TCPCB_SACKED_ACKED 0x01
548#define TCPCB_SACKED_RETRANS 0x02
549#define TCPCB_LOST 0x04
550#define TCPCB_TAGBITS 0x07
551
552#define TCPCB_EVER_RETRANS 0x80
553#define TCPCB_RETRANS (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS)
554
555#define TCPCB_URG 0x20
556
557#define TCPCB_AT_TAIL (TCPCB_URG)
558
559 __u16 urg_ptr;
560 __u32 ack_seq;
561};
562
563#define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0]))
564
565#include <net/tcp_ecn.h>
566
567
568
569
570static inline int tcp_skb_pcount(const struct sk_buff *skb)
571{
572 return skb_shinfo(skb)->gso_segs;
573}
574
575
576static inline int tcp_skb_mss(const struct sk_buff *skb)
577{
578 return skb_shinfo(skb)->gso_size;
579}
580
581static inline void tcp_dec_pcount_approx(__u32 *count,
582 const struct sk_buff *skb)
583{
584 if (*count) {
585 *count -= tcp_skb_pcount(skb);
586 if ((int)*count < 0)
587 *count = 0;
588 }
589}
590
591static inline void tcp_packets_out_inc(struct sock *sk,
592 struct tcp_sock *tp,
593 const struct sk_buff *skb)
594{
595 int orig = tp->packets_out;
596
597 tp->packets_out += tcp_skb_pcount(skb);
598 if (!orig)
599 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
600 inet_csk(sk)->icsk_rto, TCP_RTO_MAX);
601}
602
603static inline void tcp_packets_out_dec(struct tcp_sock *tp,
604 const struct sk_buff *skb)
605{
606 tp->packets_out -= tcp_skb_pcount(skb);
607}
608
609
610enum tcp_ca_event {
611 CA_EVENT_TX_START,
612 CA_EVENT_CWND_RESTART,
613 CA_EVENT_COMPLETE_CWR,
614 CA_EVENT_FRTO,
615 CA_EVENT_LOSS,
616 CA_EVENT_FAST_ACK,
617 CA_EVENT_SLOW_ACK,
618};
619
620
621
622
623#define TCP_CA_NAME_MAX 16
624struct tcp_congestion_ops {
625 struct list_head list;
626
627
628 void (*init)(struct sock *sk);
629
630 void (*release)(struct sock *sk);
631
632
633 u32 (*ssthresh)(struct sock *sk);
634
635 u32 (*min_cwnd)(const struct sock *sk);
636
637 void (*cong_avoid)(struct sock *sk, u32 ack,
638 u32 rtt, u32 in_flight, int good_ack);
639
640 void (*rtt_sample)(struct sock *sk, u32 usrtt);
641
642 void (*set_state)(struct sock *sk, u8 new_state);
643
644 void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
645
646 u32 (*undo_cwnd)(struct sock *sk);
647
648 void (*pkts_acked)(struct sock *sk, u32 num_acked);
649
650 void (*get_info)(struct sock *sk, u32 ext, struct sk_buff *skb);
651
652 char name[TCP_CA_NAME_MAX];
653 struct module *owner;
654};
655
656extern int tcp_register_congestion_control(struct tcp_congestion_ops *type);
657extern void tcp_unregister_congestion_control(struct tcp_congestion_ops *type);
658
659extern void tcp_init_congestion_control(struct sock *sk);
660extern void tcp_cleanup_congestion_control(struct sock *sk);
661extern int tcp_set_default_congestion_control(const char *name);
662extern void tcp_get_default_congestion_control(char *name);
663extern int tcp_set_congestion_control(struct sock *sk, const char *name);
664extern void tcp_slow_start(struct tcp_sock *tp);
665
666extern struct tcp_congestion_ops tcp_init_congestion_ops;
667extern u32 tcp_reno_ssthresh(struct sock *sk);
668extern void tcp_reno_cong_avoid(struct sock *sk, u32 ack,
669 u32 rtt, u32 in_flight, int flag);
670extern u32 tcp_reno_min_cwnd(const struct sock *sk);
671extern struct tcp_congestion_ops tcp_reno;
672
673static inline void tcp_set_ca_state(struct sock *sk, const u8 ca_state)
674{
675 struct inet_connection_sock *icsk = inet_csk(sk);
676
677 if (icsk->icsk_ca_ops->set_state)
678 icsk->icsk_ca_ops->set_state(sk, ca_state);
679 icsk->icsk_ca_state = ca_state;
680}
681
682static inline void tcp_ca_event(struct sock *sk, const enum tcp_ca_event event)
683{
684 const struct inet_connection_sock *icsk = inet_csk(sk);
685
686 if (icsk->icsk_ca_ops->cwnd_event)
687 icsk->icsk_ca_ops->cwnd_event(sk, event);
688}
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704static inline unsigned int tcp_packets_in_flight(const struct tcp_sock *tp)
705{
706 return (tp->packets_out - tp->left_out + tp->retrans_out);
707}
708
709
710
711
712
713static inline __u32 tcp_current_ssthresh(const struct sock *sk)
714{
715 const struct tcp_sock *tp = tcp_sk(sk);
716 if ((1 << inet_csk(sk)->icsk_ca_state) & (TCPF_CA_CWR | TCPF_CA_Recovery))
717 return tp->snd_ssthresh;
718 else
719 return max(tp->snd_ssthresh,
720 ((tp->snd_cwnd >> 1) +
721 (tp->snd_cwnd >> 2)));
722}
723
724static inline void tcp_sync_left_out(struct tcp_sock *tp)
725{
726 if (tp->rx_opt.sack_ok &&
727 (tp->sacked_out >= tp->packets_out - tp->lost_out))
728 tp->sacked_out = tp->packets_out - tp->lost_out;
729 tp->left_out = tp->sacked_out + tp->lost_out;
730}
731
732extern void tcp_enter_cwr(struct sock *sk);
733extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst);
734
735
736
737
738static __inline__ __u32 tcp_max_burst(const struct tcp_sock *tp)
739{
740 return 3;
741}
742
743
744
745
746static inline int tcp_is_cwnd_limited(const struct sock *sk, u32 in_flight)
747{
748 const struct tcp_sock *tp = tcp_sk(sk);
749 u32 left;
750
751 if (in_flight >= tp->snd_cwnd)
752 return 1;
753
754 if (!sk_can_gso(sk))
755 return 0;
756
757 left = tp->snd_cwnd - in_flight;
758 if (sysctl_tcp_tso_win_divisor)
759 return left * sysctl_tcp_tso_win_divisor < tp->snd_cwnd;
760 else
761 return left <= tcp_max_burst(tp);
762}
763
764static inline void tcp_minshall_update(struct tcp_sock *tp, int mss,
765 const struct sk_buff *skb)
766{
767 if (skb->len < mss)
768 tp->snd_sml = TCP_SKB_CB(skb)->end_seq;
769}
770
771static inline void tcp_check_probe_timer(struct sock *sk, struct tcp_sock *tp)
772{
773 const struct inet_connection_sock *icsk = inet_csk(sk);
774 if (!tp->packets_out && !icsk->icsk_pending)
775 inet_csk_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
776 icsk->icsk_rto, TCP_RTO_MAX);
777}
778
779static inline void tcp_push_pending_frames(struct sock *sk,
780 struct tcp_sock *tp)
781{
782 __tcp_push_pending_frames(sk, tp, tcp_current_mss(sk, 1), tp->nonagle);
783}
784
785static inline void tcp_init_wl(struct tcp_sock *tp, u32 ack, u32 seq)
786{
787 tp->snd_wl1 = seq;
788}
789
790static inline void tcp_update_wl(struct tcp_sock *tp, u32 ack, u32 seq)
791{
792 tp->snd_wl1 = seq;
793}
794
795
796
797
798static inline u16 tcp_v4_check(struct tcphdr *th, int len,
799 unsigned long saddr, unsigned long daddr,
800 unsigned long base)
801{
802 return csum_tcpudp_magic(saddr,daddr,len,IPPROTO_TCP,base);
803}
804
805static inline int __tcp_checksum_complete(struct sk_buff *skb)
806{
807 return __skb_checksum_complete(skb);
808}
809
810static inline int tcp_checksum_complete(struct sk_buff *skb)
811{
812 return skb->ip_summed != CHECKSUM_UNNECESSARY &&
813 __tcp_checksum_complete(skb);
814}
815
816
817
818static inline void tcp_prequeue_init(struct tcp_sock *tp)
819{
820 tp->ucopy.task = NULL;
821 tp->ucopy.len = 0;
822 tp->ucopy.memory = 0;
823 skb_queue_head_init(&tp->ucopy.prequeue);
824#ifdef CONFIG_NET_DMA
825 tp->ucopy.dma_chan = NULL;
826 tp->ucopy.wakeup = 0;
827 tp->ucopy.pinned_list = NULL;
828 tp->ucopy.dma_cookie = 0;
829#endif
830}
831
832
833
834
835
836
837
838
839
840static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb)
841{
842 struct tcp_sock *tp = tcp_sk(sk);
843
844 if (!sysctl_tcp_low_latency && tp->ucopy.task) {
845 __skb_queue_tail(&tp->ucopy.prequeue, skb);
846 tp->ucopy.memory += skb->truesize;
847 if (tp->ucopy.memory > sk->sk_rcvbuf) {
848 struct sk_buff *skb1;
849
850 BUG_ON(sock_owned_by_user(sk));
851
852 while ((skb1 = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) {
853 sk->sk_backlog_rcv(sk, skb1);
854 NET_INC_STATS_BH(LINUX_MIB_TCPPREQUEUEDROPPED);
855 }
856
857 tp->ucopy.memory = 0;
858 } else if (skb_queue_len(&tp->ucopy.prequeue) == 1) {
859 wake_up_interruptible(sk->sk_sleep);
860 if (!inet_csk_ack_scheduled(sk))
861 inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
862 (3 * TCP_RTO_MIN) / 4,
863 TCP_RTO_MAX);
864 }
865 return 1;
866 }
867 return 0;
868}
869
870
871#undef STATE_TRACE
872
873#ifdef STATE_TRACE
874static const char *statename[]={
875 "Unused","Established","Syn Sent","Syn Recv",
876 "Fin Wait 1","Fin Wait 2","Time Wait", "Close",
877 "Close Wait","Last ACK","Listen","Closing"
878};
879#endif
880
881static inline void tcp_set_state(struct sock *sk, int state)
882{
883 int oldstate = sk->sk_state;
884
885 switch (state) {
886 case TCP_ESTABLISHED:
887 if (oldstate != TCP_ESTABLISHED)
888 TCP_INC_STATS(TCP_MIB_CURRESTAB);
889 break;
890
891 case TCP_CLOSE:
892 if (oldstate == TCP_CLOSE_WAIT || oldstate == TCP_ESTABLISHED)
893 TCP_INC_STATS(TCP_MIB_ESTABRESETS);
894
895 sk->sk_prot->unhash(sk);
896 if (inet_csk(sk)->icsk_bind_hash &&
897 !(sk->sk_userlocks & SOCK_BINDPORT_LOCK))
898 inet_put_port(&tcp_hashinfo, sk);
899
900 default:
901 if (oldstate==TCP_ESTABLISHED)
902 TCP_DEC_STATS(TCP_MIB_CURRESTAB);
903 }
904
905
906
907
908 sk->sk_state = state;
909
910#ifdef STATE_TRACE
911 SOCK_DEBUG(sk, "TCP sk=%p, State %s -> %s\n",sk, statename[oldstate],statename[state]);
912#endif
913}
914
915static inline void tcp_done(struct sock *sk)
916{
917 if(sk->sk_state == TCP_SYN_SENT || sk->sk_state == TCP_SYN_RECV)
918 TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS);
919
920 tcp_set_state(sk, TCP_CLOSE);
921 tcp_clear_xmit_timers(sk);
922
923 sk->sk_shutdown = SHUTDOWN_MASK;
924
925 if (!sock_flag(sk, SOCK_DEAD))
926 sk->sk_state_change(sk);
927 else
928 inet_csk_destroy_sock(sk);
929}
930
931static inline void tcp_sack_reset(struct tcp_options_received *rx_opt)
932{
933 rx_opt->dsack = 0;
934 rx_opt->eff_sacks = 0;
935 rx_opt->num_sacks = 0;
936}
937
938
939extern void tcp_select_initial_window(int __space, __u32 mss,
940 __u32 *rcv_wnd, __u32 *window_clamp,
941 int wscale_ok, __u8 *rcv_wscale);
942
943static inline int tcp_win_from_space(int space)
944{
945 return sysctl_tcp_adv_win_scale<=0 ?
946 (space>>(-sysctl_tcp_adv_win_scale)) :
947 space - (space>>sysctl_tcp_adv_win_scale);
948}
949
950
951static inline int tcp_space(const struct sock *sk)
952{
953 return tcp_win_from_space(sk->sk_rcvbuf -
954 atomic_read(&sk->sk_rmem_alloc));
955}
956
957static inline int tcp_full_space(const struct sock *sk)
958{
959 return tcp_win_from_space(sk->sk_rcvbuf);
960}
961
962static inline void tcp_openreq_init(struct request_sock *req,
963 struct tcp_options_received *rx_opt,
964 struct sk_buff *skb)
965{
966 struct inet_request_sock *ireq = inet_rsk(req);
967
968 req->rcv_wnd = 0;
969 tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq;
970 req->mss = rx_opt->mss_clamp;
971 req->ts_recent = rx_opt->saw_tstamp ? rx_opt->rcv_tsval : 0;
972 ireq->tstamp_ok = rx_opt->tstamp_ok;
973 ireq->sack_ok = rx_opt->sack_ok;
974 ireq->snd_wscale = rx_opt->snd_wscale;
975 ireq->wscale_ok = rx_opt->wscale_ok;
976 ireq->acked = 0;
977 ireq->ecn_ok = 0;
978 ireq->rmt_port = skb->h.th->source;
979}
980
981extern void tcp_enter_memory_pressure(void);
982
983static inline int keepalive_intvl_when(const struct tcp_sock *tp)
984{
985 return tp->keepalive_intvl ? : sysctl_tcp_keepalive_intvl;
986}
987
988static inline int keepalive_time_when(const struct tcp_sock *tp)
989{
990 return tp->keepalive_time ? : sysctl_tcp_keepalive_time;
991}
992
993static inline int tcp_fin_time(const struct sock *sk)
994{
995 int fin_timeout = tcp_sk(sk)->linger2 ? : sysctl_tcp_fin_timeout;
996 const int rto = inet_csk(sk)->icsk_rto;
997
998 if (fin_timeout < (rto << 2) - (rto >> 1))
999 fin_timeout = (rto << 2) - (rto >> 1);
1000
1001 return fin_timeout;
1002}
1003
1004static inline int tcp_paws_check(const struct tcp_options_received *rx_opt, int rst)
1005{
1006 if ((s32)(rx_opt->rcv_tsval - rx_opt->ts_recent) >= 0)
1007 return 0;
1008 if (xtime.tv_sec >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS)
1009 return 0;
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023 if (rst && xtime.tv_sec >= rx_opt->ts_recent_stamp + TCP_PAWS_MSL)
1024 return 0;
1025 return 1;
1026}
1027
1028#define TCP_CHECK_TIMER(sk) do { } while (0)
1029
1030static inline int tcp_use_frto(const struct sock *sk)
1031{
1032 const struct tcp_sock *tp = tcp_sk(sk);
1033
1034
1035
1036
1037
1038 return (sysctl_tcp_frto && sk->sk_send_head &&
1039 !after(TCP_SKB_CB(sk->sk_send_head)->end_seq,
1040 tp->snd_una + tp->snd_wnd));
1041}
1042
1043static inline void tcp_mib_init(void)
1044{
1045
1046 TCP_ADD_STATS_USER(TCP_MIB_RTOALGORITHM, 1);
1047 TCP_ADD_STATS_USER(TCP_MIB_RTOMIN, TCP_RTO_MIN*1000/HZ);
1048 TCP_ADD_STATS_USER(TCP_MIB_RTOMAX, TCP_RTO_MAX*1000/HZ);
1049 TCP_ADD_STATS_USER(TCP_MIB_MAXCONN, -1);
1050}
1051
1052
1053static inline void clear_all_retrans_hints(struct tcp_sock *tp){
1054 tp->lost_skb_hint = NULL;
1055 tp->scoreboard_skb_hint = NULL;
1056 tp->retransmit_skb_hint = NULL;
1057 tp->forward_skb_hint = NULL;
1058 tp->fastpath_skb_hint = NULL;
1059}
1060
1061
1062enum tcp_seq_states {
1063 TCP_SEQ_STATE_LISTENING,
1064 TCP_SEQ_STATE_OPENREQ,
1065 TCP_SEQ_STATE_ESTABLISHED,
1066 TCP_SEQ_STATE_TIME_WAIT,
1067};
1068
1069struct tcp_seq_afinfo {
1070 struct module *owner;
1071 char *name;
1072 sa_family_t family;
1073 int (*seq_show) (struct seq_file *m, void *v);
1074 struct file_operations *seq_fops;
1075};
1076
1077struct tcp_iter_state {
1078 sa_family_t family;
1079 enum tcp_seq_states state;
1080 struct sock *syn_wait_sk;
1081 int bucket, sbucket, num, uid;
1082 struct seq_operations seq_ops;
1083};
1084
1085extern int tcp_proc_register(struct tcp_seq_afinfo *afinfo);
1086extern void tcp_proc_unregister(struct tcp_seq_afinfo *afinfo);
1087
1088extern struct request_sock_ops tcp_request_sock_ops;
1089
1090extern int tcp_v4_destroy_sock(struct sock *sk);
1091
1092extern int tcp_v4_gso_send_check(struct sk_buff *skb);
1093extern struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features);
1094
1095#ifdef CONFIG_PROC_FS
1096extern int tcp4_proc_init(void);
1097extern void tcp4_proc_exit(void);
1098#endif
1099
1100extern void tcp_v4_init(struct net_proto_family *ops);
1101extern void tcp_init(void);
1102
1103#endif
1104