1/*
2 * INET		An implementation of the TCP/IP protocol suite for the LINUX
3 *		operating system.  INET is implemented using the  BSD Socket
4 *		interface as the means of communication with the user level.
5 *
6 *		Definitions for the TCP module.
7 *
8 * Version:	@(#)tcp.h	1.0.5	05/23/93
9 *
10 * Authors:	Ross Biro
11 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
12 *
13 *		This program is free software; you can redistribute it and/or
14 *		modify it under the terms of the GNU General Public License
15 *		as published by the Free Software Foundation; either version
16 *		2 of the License, or (at your option) any later version.
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#include <linux/crypto.h>
32
33#include <net/inet_connection_sock.h>
34#include <net/inet_timewait_sock.h>
35#include <net/inet_hashtables.h>
36#include <net/checksum.h>
37#include <net/request_sock.h>
38#include <net/sock.h>
39#include <net/snmp.h>
40#include <net/ip.h>
41#include <net/tcp_states.h>
42
43#include <linux/seq_file.h>
44
45extern struct inet_hashinfo tcp_hashinfo;
46
47extern atomic_t tcp_orphan_count;
48extern void tcp_time_wait(struct sock *sk, int state, int timeo);
49
50#define MAX_TCP_HEADER	(128 + MAX_HEADER)
51
52/*
53 * Never offer a window over 32767 without using window scaling. Some
54 * poor stacks do signed 16bit maths!
55 */
56#define MAX_TCP_WINDOW		32767U
57
58/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
59#define TCP_MIN_MSS		88U
60
61/* Minimal RCV_MSS. */
62#define TCP_MIN_RCVMSS		536U
63
64/* The least MTU to use for probing */
65#define TCP_BASE_MSS		512
66
67/* After receiving this amount of duplicate ACKs fast retransmit starts. */
68#define TCP_FASTRETRANS_THRESH 3
69
70/* Maximal reordering. */
71#define TCP_MAX_REORDERING	127
72
73/* Maximal number of ACKs sent quickly to accelerate slow-start. */
74#define TCP_MAX_QUICKACKS	16U
75
76/* urg_data states */
77#define TCP_URG_VALID	0x0100
78#define TCP_URG_NOTYET	0x0200
79#define TCP_URG_READ	0x0400
80
81#define TCP_RETR1	3	/*
82				 * This is how many retries it does before it
83				 * tries to figure out if the gateway is
84				 * down. Minimal RFC value is 3; it corresponds
85				 * to ~3sec-8min depending on RTO.
86				 */
87
88#define TCP_RETR2	15	/*
89				 * This should take at least
90				 * 90 minutes to time out.
91				 * RFC1122 says that the limit is 100 sec.
92				 * 15 is ~13-30min depending on RTO.
93				 */
94
95#define TCP_SYN_RETRIES	 5	/* number of times to retry active opening a
96				 * connection: ~180sec is RFC minimum	*/
97
98#define TCP_SYNACK_RETRIES 5	/* number of times to retry passive opening a
99				 * connection: ~180sec is RFC minimum	*/
100
101
102#define TCP_ORPHAN_RETRIES 7	/* number of times to retry on an orphaned
103				 * socket. 7 is ~50sec-16min.
104				 */
105
106
107#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
108				  * state, about 60 seconds	*/
109#define TCP_FIN_TIMEOUT	TCP_TIMEWAIT_LEN
110                                 /* BSD style FIN_WAIT2 deadlock breaker.
111				  * It used to be 3min, new value is 60sec,
112				  * to combine FIN-WAIT-2 timeout with
113				  * TIME-WAIT timer.
114				  */
115
116#define TCP_DELACK_MAX	((unsigned)(HZ/5))	/* maximal time to delay before sending an ACK */
117#if HZ >= 100
118#define TCP_DELACK_MIN	((unsigned)(HZ/25))	/* minimal time to delay before sending an ACK */
119#define TCP_ATO_MIN	((unsigned)(HZ/25))
120#else
121#define TCP_DELACK_MIN	4U
122#define TCP_ATO_MIN	4U
123#endif
124#define TCP_RTO_MAX	((unsigned)(120*HZ))
125#define TCP_RTO_MIN	((unsigned)(HZ/5))
126#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ))	/* RFC 1122 initial RTO value	*/
127
128#define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U)) /* Maximal interval between probes
129					                 * for local resources.
130					                 */
131
132#define TCP_KEEPALIVE_TIME	(120*60*HZ)	/* two hours */
133#define TCP_KEEPALIVE_PROBES	9		/* Max of 9 keepalive probes	*/
134#define TCP_KEEPALIVE_INTVL	(75*HZ)
135
136#define MAX_TCP_KEEPIDLE	32767
137#define MAX_TCP_KEEPINTVL	32767
138#define MAX_TCP_KEEPCNT		127
139#define MAX_TCP_SYNCNT		127
140
141#define TCP_SYNQ_INTERVAL	(HZ/5)	/* Period of SYNACK timer */
142
143#define TCP_PAWS_24DAYS	(60 * 60 * 24 * 24)
144#define TCP_PAWS_MSL	60		/* Per-host timestamps are invalidated
145					 * after this time. It should be equal
146					 * (or greater than) TCP_TIMEWAIT_LEN
147					 * to provide reliability equal to one
148					 * provided by timewait state.
149					 */
150#define TCP_PAWS_WINDOW	1		/* Replay window for per-host
151					 * timestamps. It must be less than
152					 * minimal timewait lifetime.
153					 */
154/*
155 *	TCP option
156 */
157
158#define TCPOPT_NOP		1	/* Padding */
159#define TCPOPT_EOL		0	/* End of options */
160#define TCPOPT_MSS		2	/* Segment size negotiating */
161#define TCPOPT_WINDOW		3	/* Window scaling */
162#define TCPOPT_SACK_PERM        4       /* SACK Permitted */
163#define TCPOPT_SACK             5       /* SACK Block */
164#define TCPOPT_TIMESTAMP	8	/* Better RTT estimations/PAWS */
165#define TCPOPT_MD5SIG		19	/* MD5 Signature (RFC2385) */
166
167/*
168 *     TCP option lengths
169 */
170
171#define TCPOLEN_MSS            4
172#define TCPOLEN_WINDOW         3
173#define TCPOLEN_SACK_PERM      2
174#define TCPOLEN_TIMESTAMP      10
175#define TCPOLEN_MD5SIG         18
176
177/* But this is what stacks really send out. */
178#define TCPOLEN_TSTAMP_ALIGNED		12
179#define TCPOLEN_WSCALE_ALIGNED		4
180#define TCPOLEN_SACKPERM_ALIGNED	4
181#define TCPOLEN_SACK_BASE		2
182#define TCPOLEN_SACK_BASE_ALIGNED	4
183#define TCPOLEN_SACK_PERBLOCK		8
184#define TCPOLEN_MD5SIG_ALIGNED		20
185
186/* Flags in tp->nonagle */
187#define TCP_NAGLE_OFF		1	/* Nagle's algo is disabled */
188#define TCP_NAGLE_CORK		2	/* Socket is corked	    */
189#define TCP_NAGLE_PUSH		4	/* Cork is overridden for already queued data */
190
191extern struct inet_timewait_death_row tcp_death_row;
192
193/* sysctl variables for tcp */
194extern int sysctl_tcp_timestamps;
195extern int sysctl_tcp_window_scaling;
196extern int sysctl_tcp_sack;
197extern int sysctl_tcp_fin_timeout;
198extern int sysctl_tcp_keepalive_time;
199extern int sysctl_tcp_keepalive_probes;
200extern int sysctl_tcp_keepalive_intvl;
201extern int sysctl_tcp_syn_retries;
202extern int sysctl_tcp_synack_retries;
203extern int sysctl_tcp_retries1;
204extern int sysctl_tcp_retries2;
205extern int sysctl_tcp_orphan_retries;
206extern int sysctl_tcp_syncookies;
207extern int sysctl_tcp_retrans_collapse;
208extern int sysctl_tcp_stdurg;
209extern int sysctl_tcp_rfc1337;
210extern int sysctl_tcp_abort_on_overflow;
211extern int sysctl_tcp_max_orphans;
212extern int sysctl_tcp_fack;
213extern int sysctl_tcp_reordering;
214extern int sysctl_tcp_ecn;
215extern int sysctl_tcp_dsack;
216extern int sysctl_tcp_mem[3];
217extern int sysctl_tcp_wmem[3];
218extern int sysctl_tcp_rmem[3];
219extern int sysctl_tcp_app_win;
220extern int sysctl_tcp_adv_win_scale;
221extern int sysctl_tcp_tw_reuse;
222extern int sysctl_tcp_frto;
223extern int sysctl_tcp_frto_response;
224extern int sysctl_tcp_low_latency;
225extern int sysctl_tcp_dma_copybreak;
226extern int sysctl_tcp_nometrics_save;
227extern int sysctl_tcp_moderate_rcvbuf;
228extern int sysctl_tcp_tso_win_divisor;
229extern int sysctl_tcp_abc;
230extern int sysctl_tcp_mtu_probing;
231extern int sysctl_tcp_base_mss;
232extern int sysctl_tcp_workaround_signed_windows;
233extern int sysctl_tcp_slow_start_after_idle;
234extern int sysctl_tcp_max_ssthresh;
235
236extern atomic_t tcp_memory_allocated;
237extern atomic_t tcp_sockets_allocated;
238extern int tcp_memory_pressure;
239
240/*
241 * The next routines deal with comparing 32 bit unsigned ints
242 * and worry about wraparound (automatic with unsigned arithmetic).
243 */
244
245static inline int before(__u32 seq1, __u32 seq2)
246{
247        return (__s32)(seq1-seq2) < 0;
248}
249#define after(seq2, seq1) 	before(seq1, seq2)
250
251/* is s2<=s1<=s3 ? */
252static inline int between(__u32 seq1, __u32 seq2, __u32 seq3)
253{
254	return seq3 - seq2 >= seq1 - seq2;
255}
256
257static inline int tcp_too_many_orphans(struct sock *sk, int num)
258{
259	return (num > sysctl_tcp_max_orphans) ||
260		(sk->sk_wmem_queued > SOCK_MIN_SNDBUF &&
261		 atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2]);
262}
263
264extern struct proto tcp_prot;
265
266DECLARE_SNMP_STAT(struct tcp_mib, tcp_statistics);
267#define TCP_INC_STATS(field)		SNMP_INC_STATS(tcp_statistics, field)
268#define TCP_INC_STATS_BH(field)		SNMP_INC_STATS_BH(tcp_statistics, field)
269#define TCP_INC_STATS_USER(field) 	SNMP_INC_STATS_USER(tcp_statistics, field)
270#define TCP_DEC_STATS(field)		SNMP_DEC_STATS(tcp_statistics, field)
271#define TCP_ADD_STATS_BH(field, val)	SNMP_ADD_STATS_BH(tcp_statistics, field, val)
272#define TCP_ADD_STATS_USER(field, val)	SNMP_ADD_STATS_USER(tcp_statistics, field, val)
273
274extern void			tcp_v4_err(struct sk_buff *skb, u32);
275
276extern void			tcp_shutdown (struct sock *sk, int how);
277
278extern int			tcp_v4_rcv(struct sk_buff *skb);
279
280extern int			tcp_v4_remember_stamp(struct sock *sk);
281
282extern int		    	tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);
283
284extern int			tcp_sendmsg(struct kiocb *iocb, struct sock *sk,
285					    struct msghdr *msg, size_t size);
286extern ssize_t			tcp_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags);
287
288extern int			tcp_ioctl(struct sock *sk,
289					  int cmd,
290					  unsigned long arg);
291
292extern int			tcp_rcv_state_process(struct sock *sk,
293						      struct sk_buff *skb,
294						      struct tcphdr *th,
295						      unsigned len);
296
297extern int			tcp_rcv_established(struct sock *sk,
298						    struct sk_buff *skb,
299						    struct tcphdr *th,
300						    unsigned len);
301
302extern void			tcp_rcv_space_adjust(struct sock *sk);
303
304extern void			tcp_cleanup_rbuf(struct sock *sk, int copied);
305
306extern int			tcp_twsk_unique(struct sock *sk,
307						struct sock *sktw, void *twp);
308
309extern void			tcp_twsk_destructor(struct sock *sk);
310
311static inline void tcp_dec_quickack_mode(struct sock *sk,
312					 const unsigned int pkts)
313{
314	struct inet_connection_sock *icsk = inet_csk(sk);
315
316	if (icsk->icsk_ack.quick) {
317		if (pkts >= icsk->icsk_ack.quick) {
318			icsk->icsk_ack.quick = 0;
319			/* Leaving quickack mode we deflate ATO. */
320			icsk->icsk_ack.ato   = TCP_ATO_MIN;
321		} else
322			icsk->icsk_ack.quick -= pkts;
323	}
324}
325
326extern void tcp_enter_quickack_mode(struct sock *sk);
327
328static inline void tcp_clear_options(struct tcp_options_received *rx_opt)
329{
330 	rx_opt->tstamp_ok = rx_opt->sack_ok = rx_opt->wscale_ok = rx_opt->snd_wscale = 0;
331}
332
333enum tcp_tw_status
334{
335	TCP_TW_SUCCESS = 0,
336	TCP_TW_RST = 1,
337	TCP_TW_ACK = 2,
338	TCP_TW_SYN = 3
339};
340
341
342extern enum tcp_tw_status	tcp_timewait_state_process(struct inet_timewait_sock *tw,
343							   struct sk_buff *skb,
344							   const struct tcphdr *th);
345
346extern struct sock *		tcp_check_req(struct sock *sk,struct sk_buff *skb,
347					      struct request_sock *req,
348					      struct request_sock **prev);
349extern int			tcp_child_process(struct sock *parent,
350						  struct sock *child,
351						  struct sk_buff *skb);
352extern int			tcp_use_frto(struct sock *sk);
353extern void			tcp_enter_frto(struct sock *sk);
354extern void			tcp_enter_loss(struct sock *sk, int how);
355extern void			tcp_clear_retrans(struct tcp_sock *tp);
356extern void			tcp_update_metrics(struct sock *sk);
357
358extern void			tcp_close(struct sock *sk,
359					  long timeout);
360extern unsigned int		tcp_poll(struct file * file, struct socket *sock, struct poll_table_struct *wait);
361
362extern int			tcp_getsockopt(struct sock *sk, int level,
363					       int optname,
364					       char __user *optval,
365					       int __user *optlen);
366extern int			tcp_setsockopt(struct sock *sk, int level,
367					       int optname, char __user *optval,
368					       int optlen);
369extern int			compat_tcp_getsockopt(struct sock *sk,
370					int level, int optname,
371					char __user *optval, int __user *optlen);
372extern int			compat_tcp_setsockopt(struct sock *sk,
373					int level, int optname,
374					char __user *optval, int optlen);
375extern void			tcp_set_keepalive(struct sock *sk, int val);
376extern int			tcp_recvmsg(struct kiocb *iocb, struct sock *sk,
377					    struct msghdr *msg,
378					    size_t len, int nonblock,
379					    int flags, int *addr_len);
380
381extern void			tcp_parse_options(struct sk_buff *skb,
382						  struct tcp_options_received *opt_rx,
383						  int estab);
384
385/*
386 *	TCP v4 functions exported for the inet6 API
387 */
388
389extern void		       	tcp_v4_send_check(struct sock *sk, int len,
390						  struct sk_buff *skb);
391
392extern int			tcp_v4_conn_request(struct sock *sk,
393						    struct sk_buff *skb);
394
395extern struct sock *		tcp_create_openreq_child(struct sock *sk,
396							 struct request_sock *req,
397							 struct sk_buff *skb);
398
399extern struct sock *		tcp_v4_syn_recv_sock(struct sock *sk,
400						     struct sk_buff *skb,
401						     struct request_sock *req,
402							struct dst_entry *dst);
403
404extern int			tcp_v4_do_rcv(struct sock *sk,
405					      struct sk_buff *skb);
406
407extern int			tcp_v4_connect(struct sock *sk,
408					       struct sockaddr *uaddr,
409					       int addr_len);
410
411extern int			tcp_connect(struct sock *sk);
412
413extern struct sk_buff *		tcp_make_synack(struct sock *sk,
414						struct dst_entry *dst,
415						struct request_sock *req);
416
417extern int			tcp_disconnect(struct sock *sk, int flags);
418
419extern void			tcp_unhash(struct sock *sk);
420
421/* From syncookies.c */
422extern struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb,
423				    struct ip_options *opt);
424extern __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb,
425				     __u16 *mss);
426
427/* tcp_output.c */
428
429extern void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss,
430				      int nonagle);
431extern int tcp_may_send_now(struct sock *sk);
432extern int tcp_retransmit_skb(struct sock *, struct sk_buff *);
433extern void tcp_xmit_retransmit_queue(struct sock *);
434extern void tcp_simple_retransmit(struct sock *);
435extern int tcp_trim_head(struct sock *, struct sk_buff *, u32);
436extern int tcp_fragment(struct sock *, struct sk_buff *, u32, unsigned int);
437
438extern void tcp_send_probe0(struct sock *);
439extern void tcp_send_partial(struct sock *);
440extern int  tcp_write_wakeup(struct sock *);
441extern void tcp_send_fin(struct sock *sk);
442extern void tcp_send_active_reset(struct sock *sk, gfp_t priority);
443extern int  tcp_send_synack(struct sock *);
444extern void tcp_push_one(struct sock *, unsigned int mss_now);
445extern void tcp_send_ack(struct sock *sk);
446extern void tcp_send_delayed_ack(struct sock *sk);
447
448/* tcp_input.c */
449extern void tcp_cwnd_application_limited(struct sock *sk);
450
451/* tcp_timer.c */
452extern void tcp_init_xmit_timers(struct sock *);
453static inline void tcp_clear_xmit_timers(struct sock *sk)
454{
455	inet_csk_clear_xmit_timers(sk);
456}
457
458extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
459extern unsigned int tcp_current_mss(struct sock *sk, int large);
460
461/* tcp.c */
462extern void tcp_get_info(struct sock *, struct tcp_info *);
463
464/* Read 'sendfile()'-style from a TCP socket */
465typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *,
466				unsigned int, size_t);
467extern int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
468			 sk_read_actor_t recv_actor);
469
470extern void tcp_initialize_rcv_mss(struct sock *sk);
471
472extern int tcp_mtu_to_mss(struct sock *sk, int pmtu);
473extern int tcp_mss_to_mtu(struct sock *sk, int mss);
474extern void tcp_mtup_init(struct sock *sk);
475
476static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
477{
478	tp->pred_flags = htonl((tp->tcp_header_len << 26) |
479			       ntohl(TCP_FLAG_ACK) |
480			       snd_wnd);
481}
482
483static inline void tcp_fast_path_on(struct tcp_sock *tp)
484{
485	__tcp_fast_path_on(tp, tp->snd_wnd >> tp->rx_opt.snd_wscale);
486}
487
488static inline void tcp_fast_path_check(struct sock *sk)
489{
490	struct tcp_sock *tp = tcp_sk(sk);
491
492	if (skb_queue_empty(&tp->out_of_order_queue) &&
493	    tp->rcv_wnd &&
494	    atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf &&
495	    !tp->urg_data)
496		tcp_fast_path_on(tp);
497}
498
499/* Compute the actual receive window we are currently advertising.
500 * Rcv_nxt can be after the window if our peer push more data
501 * than the offered window.
502 */
503static inline u32 tcp_receive_window(const struct tcp_sock *tp)
504{
505	s32 win = tp->rcv_wup + tp->rcv_wnd - tp->rcv_nxt;
506
507	if (win < 0)
508		win = 0;
509	return (u32) win;
510}
511
512/* Choose a new window, without checks for shrinking, and without
513 * scaling applied to the result.  The caller does these things
514 * if necessary.  This is a "raw" window selection.
515 */
516extern u32	__tcp_select_window(struct sock *sk);
517
518/* TCP timestamps are only 32-bits, this causes a slight
519 * complication on 64-bit systems since we store a snapshot
520 * of jiffies in the buffer control blocks below.  We decided
521 * to use only the low 32-bits of jiffies and hide the ugly
522 * casts with the following macro.
523 */
524#define tcp_time_stamp		((__u32)(jiffies))
525
526struct tcp_skb_cb {
527	union {
528		struct inet_skb_parm	h4;
529#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
530		struct inet6_skb_parm	h6;
531#endif
532	} header;	/* For incoming frames		*/
533	__u32		seq;		/* Starting sequence number	*/
534	__u32		end_seq;	/* SEQ + FIN + SYN + datalen	*/
535	__u32		when;		/* used to compute rtt's	*/
536	__u8		flags;		/* TCP header flags.		*/
537
538	/* NOTE: These must match up to the flags byte in a
539	 *       real TCP header.
540	 */
541#define TCPCB_FLAG_FIN		0x01
542#define TCPCB_FLAG_SYN		0x02
543#define TCPCB_FLAG_RST		0x04
544#define TCPCB_FLAG_PSH		0x08
545#define TCPCB_FLAG_ACK		0x10
546#define TCPCB_FLAG_URG		0x20
547#define TCPCB_FLAG_ECE		0x40
548#define TCPCB_FLAG_CWR		0x80
549
550	__u8		sacked;		/* State flags for SACK/FACK.	*/
551#define TCPCB_SACKED_ACKED	0x01	/* SKB ACK'd by a SACK block	*/
552#define TCPCB_SACKED_RETRANS	0x02	/* SKB retransmitted		*/
553#define TCPCB_LOST		0x04	/* SKB is lost			*/
554#define TCPCB_TAGBITS		0x07	/* All tag bits			*/
555
556#define TCPCB_EVER_RETRANS	0x80	/* Ever retransmitted frame	*/
557#define TCPCB_RETRANS		(TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS)
558
559#define TCPCB_URG		0x20	/* Urgent pointer advanced here	*/
560
561#define TCPCB_AT_TAIL		(TCPCB_URG)
562
563	__u16		urg_ptr;	/* Valid w/URG flags is set.	*/
564	__u32		ack_seq;	/* Sequence number ACK'd	*/
565};
566
567#define TCP_SKB_CB(__skb)	((struct tcp_skb_cb *)&((__skb)->cb[0]))
568
569#include <net/tcp_ecn.h>
570
571/* Due to TSO, an SKB can be composed of multiple actual
572 * packets.  To keep these tracked properly, we use this.
573 */
574static inline int tcp_skb_pcount(const struct sk_buff *skb)
575{
576	return skb_shinfo(skb)->gso_segs;
577}
578
579/* This is valid iff tcp_skb_pcount() > 1. */
580static inline int tcp_skb_mss(const struct sk_buff *skb)
581{
582	return skb_shinfo(skb)->gso_size;
583}
584
585static inline void tcp_dec_pcount_approx(__u32 *count,
586					 const struct sk_buff *skb)
587{
588	if (*count) {
589		*count -= tcp_skb_pcount(skb);
590		if ((int)*count < 0)
591			*count = 0;
592	}
593}
594
595static inline void tcp_packets_out_inc(struct sock *sk,
596				       const struct sk_buff *skb)
597{
598	struct tcp_sock *tp = tcp_sk(sk);
599	int orig = tp->packets_out;
600
601	tp->packets_out += tcp_skb_pcount(skb);
602	if (!orig)
603		inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
604					  inet_csk(sk)->icsk_rto, TCP_RTO_MAX);
605}
606
607static inline void tcp_packets_out_dec(struct tcp_sock *tp,
608				       const struct sk_buff *skb)
609{
610	tp->packets_out -= tcp_skb_pcount(skb);
611}
612
613/* Events passed to congestion control interface */
614enum tcp_ca_event {
615	CA_EVENT_TX_START,	/* first transmit when no packets in flight */
616	CA_EVENT_CWND_RESTART,	/* congestion window restart */
617	CA_EVENT_COMPLETE_CWR,	/* end of congestion recovery */
618	CA_EVENT_FRTO,		/* fast recovery timeout */
619	CA_EVENT_LOSS,		/* loss timeout */
620	CA_EVENT_FAST_ACK,	/* in sequence ack */
621	CA_EVENT_SLOW_ACK,	/* other ack */
622};
623
624/*
625 * Interface for adding new TCP congestion control handlers
626 */
627#define TCP_CA_NAME_MAX	16
628#define TCP_CA_MAX	128
629#define TCP_CA_BUF_MAX	(TCP_CA_NAME_MAX*TCP_CA_MAX)
630
631#define TCP_CONG_NON_RESTRICTED 0x1
632#define TCP_CONG_RTT_STAMP	0x2
633
634struct tcp_congestion_ops {
635	struct list_head	list;
636	unsigned long flags;
637
638	/* initialize private data (optional) */
639	void (*init)(struct sock *sk);
640	/* cleanup private data  (optional) */
641	void (*release)(struct sock *sk);
642
643	/* return slow start threshold (required) */
644	u32 (*ssthresh)(struct sock *sk);
645	/* lower bound for congestion window (optional) */
646	u32 (*min_cwnd)(const struct sock *sk);
647	/* do new cwnd calculation (required) */
648	void (*cong_avoid)(struct sock *sk, u32 ack,
649			   u32 rtt, u32 in_flight, int good_ack);
650	/* call before changing ca_state (optional) */
651	void (*set_state)(struct sock *sk, u8 new_state);
652	/* call when cwnd event occurs (optional) */
653	void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
654	/* new value of cwnd after loss (optional) */
655	u32  (*undo_cwnd)(struct sock *sk);
656	/* hook for packet ack accounting (optional) */
657	void (*pkts_acked)(struct sock *sk, u32 num_acked, ktime_t last);
658	/* get info for inet_diag (optional) */
659	void (*get_info)(struct sock *sk, u32 ext, struct sk_buff *skb);
660
661	char 		name[TCP_CA_NAME_MAX];
662	struct module 	*owner;
663};
664
665extern int tcp_register_congestion_control(struct tcp_congestion_ops *type);
666extern void tcp_unregister_congestion_control(struct tcp_congestion_ops *type);
667
668extern void tcp_init_congestion_control(struct sock *sk);
669extern void tcp_cleanup_congestion_control(struct sock *sk);
670extern int tcp_set_default_congestion_control(const char *name);
671extern void tcp_get_default_congestion_control(char *name);
672extern void tcp_get_available_congestion_control(char *buf, size_t len);
673extern void tcp_get_allowed_congestion_control(char *buf, size_t len);
674extern int tcp_set_allowed_congestion_control(char *allowed);
675extern int tcp_set_congestion_control(struct sock *sk, const char *name);
676extern void tcp_slow_start(struct tcp_sock *tp);
677
678extern struct tcp_congestion_ops tcp_init_congestion_ops;
679extern u32 tcp_reno_ssthresh(struct sock *sk);
680extern void tcp_reno_cong_avoid(struct sock *sk, u32 ack,
681				u32 rtt, u32 in_flight, int flag);
682extern u32 tcp_reno_min_cwnd(const struct sock *sk);
683extern struct tcp_congestion_ops tcp_reno;
684
685static inline void tcp_set_ca_state(struct sock *sk, const u8 ca_state)
686{
687	struct inet_connection_sock *icsk = inet_csk(sk);
688
689	if (icsk->icsk_ca_ops->set_state)
690		icsk->icsk_ca_ops->set_state(sk, ca_state);
691	icsk->icsk_ca_state = ca_state;
692}
693
694static inline void tcp_ca_event(struct sock *sk, const enum tcp_ca_event event)
695{
696	const struct inet_connection_sock *icsk = inet_csk(sk);
697
698	if (icsk->icsk_ca_ops->cwnd_event)
699		icsk->icsk_ca_ops->cwnd_event(sk, event);
700}
701
702/* This determines how many packets are "in the network" to the best
703 * of our knowledge.  In many cases it is conservative, but where
704 * detailed information is available from the receiver (via SACK
705 * blocks etc.) we can make more aggressive calculations.
706 *
707 * Use this for decisions involving congestion control, use just
708 * tp->packets_out to determine if the send queue is empty or not.
709 *
710 * Read this equation as:
711 *
712 *	"Packets sent once on transmission queue" MINUS
713 *	"Packets left network, but not honestly ACKed yet" PLUS
714 *	"Packets fast retransmitted"
715 */
716static inline unsigned int tcp_packets_in_flight(const struct tcp_sock *tp)
717{
718	return (tp->packets_out - tp->left_out + tp->retrans_out);
719}
720
721/* If cwnd > ssthresh, we may raise ssthresh to be half-way to cwnd.
722 * The exception is rate halving phase, when cwnd is decreasing towards
723 * ssthresh.
724 */
725static inline __u32 tcp_current_ssthresh(const struct sock *sk)
726{
727	const struct tcp_sock *tp = tcp_sk(sk);
728	if ((1 << inet_csk(sk)->icsk_ca_state) & (TCPF_CA_CWR | TCPF_CA_Recovery))
729		return tp->snd_ssthresh;
730	else
731		return max(tp->snd_ssthresh,
732			   ((tp->snd_cwnd >> 1) +
733			    (tp->snd_cwnd >> 2)));
734}
735
736static inline void tcp_sync_left_out(struct tcp_sock *tp)
737{
738	BUG_ON(tp->rx_opt.sack_ok &&
739	       (tp->sacked_out + tp->lost_out > tp->packets_out));
740	tp->left_out = tp->sacked_out + tp->lost_out;
741}
742
743extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh);
744extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst);
745
746/* Slow start with delack produces 3 packets of burst, so that
747 * it is safe "de facto".
748 */
749static __inline__ __u32 tcp_max_burst(const struct tcp_sock *tp)
750{
751	return 3;
752}
753
754/* RFC2861 Check whether we are limited by application or congestion window
755 * This is the inverse of cwnd check in tcp_tso_should_defer
756 */
757static inline int tcp_is_cwnd_limited(const struct sock *sk, u32 in_flight)
758{
759	const struct tcp_sock *tp = tcp_sk(sk);
760	u32 left;
761
762	if (in_flight >= tp->snd_cwnd)
763		return 1;
764
765	if (!sk_can_gso(sk))
766		return 0;
767
768	left = tp->snd_cwnd - in_flight;
769	if (sysctl_tcp_tso_win_divisor)
770		return left * sysctl_tcp_tso_win_divisor < tp->snd_cwnd;
771	else
772		return left <= tcp_max_burst(tp);
773}
774
775static inline void tcp_minshall_update(struct tcp_sock *tp, int mss,
776				       const struct sk_buff *skb)
777{
778	if (skb->len < mss)
779		tp->snd_sml = TCP_SKB_CB(skb)->end_seq;
780}
781
782static inline void tcp_check_probe_timer(struct sock *sk)
783{
784	struct tcp_sock *tp = tcp_sk(sk);
785	const struct inet_connection_sock *icsk = inet_csk(sk);
786
787	if (!tp->packets_out && !icsk->icsk_pending)
788		inet_csk_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
789					  icsk->icsk_rto, TCP_RTO_MAX);
790}
791
792static inline void tcp_push_pending_frames(struct sock *sk)
793{
794	struct tcp_sock *tp = tcp_sk(sk);
795
796	__tcp_push_pending_frames(sk, tcp_current_mss(sk, 1), tp->nonagle);
797}
798
799static inline void tcp_init_wl(struct tcp_sock *tp, u32 ack, u32 seq)
800{
801	tp->snd_wl1 = seq;
802}
803
804static inline void tcp_update_wl(struct tcp_sock *tp, u32 ack, u32 seq)
805{
806	tp->snd_wl1 = seq;
807}
808
809/*
810 * Calculate(/check) TCP checksum
811 */
812static inline __sum16 tcp_v4_check(int len, __be32 saddr,
813				   __be32 daddr, __wsum base)
814{
815	return csum_tcpudp_magic(saddr,daddr,len,IPPROTO_TCP,base);
816}
817
818static inline __sum16 __tcp_checksum_complete(struct sk_buff *skb)
819{
820	return __skb_checksum_complete(skb);
821}
822
823static inline int tcp_checksum_complete(struct sk_buff *skb)
824{
825	return !skb_csum_unnecessary(skb) &&
826		__tcp_checksum_complete(skb);
827}
828
829/* Prequeue for VJ style copy to user, combined with checksumming. */
830
831static inline void tcp_prequeue_init(struct tcp_sock *tp)
832{
833	tp->ucopy.task = NULL;
834	tp->ucopy.len = 0;
835	tp->ucopy.memory = 0;
836	skb_queue_head_init(&tp->ucopy.prequeue);
837#ifdef CONFIG_NET_DMA
838	tp->ucopy.dma_chan = NULL;
839	tp->ucopy.wakeup = 0;
840	tp->ucopy.pinned_list = NULL;
841	tp->ucopy.dma_cookie = 0;
842#endif
843}
844
845/* Packet is added to VJ-style prequeue for processing in process
846 * context, if a reader task is waiting. Apparently, this exciting
847 * idea (VJ's mail "Re: query about TCP header on tcp-ip" of 07 Sep 93)
848 * failed somewhere. Latency? Burstiness? Well, at least now we will
849 * see, why it failed. 8)8)				  --ANK
850 *
851 * NOTE: is this not too big to inline?
852 */
853static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb)
854{
855	struct tcp_sock *tp = tcp_sk(sk);
856
857	if (!sysctl_tcp_low_latency && tp->ucopy.task) {
858		__skb_queue_tail(&tp->ucopy.prequeue, skb);
859		tp->ucopy.memory += skb->truesize;
860		if (tp->ucopy.memory > sk->sk_rcvbuf) {
861			struct sk_buff *skb1;
862
863			BUG_ON(sock_owned_by_user(sk));
864
865			while ((skb1 = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) {
866				sk->sk_backlog_rcv(sk, skb1);
867				NET_INC_STATS_BH(LINUX_MIB_TCPPREQUEUEDROPPED);
868			}
869
870			tp->ucopy.memory = 0;
871		} else if (skb_queue_len(&tp->ucopy.prequeue) == 1) {
872			wake_up_interruptible(sk->sk_sleep);
873			if (!inet_csk_ack_scheduled(sk))
874				inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
875						          (3 * TCP_RTO_MIN) / 4,
876							  TCP_RTO_MAX);
877		}
878		return 1;
879	}
880	return 0;
881}
882
883
884#undef STATE_TRACE
885
886#ifdef STATE_TRACE
887static const char *statename[]={
888	"Unused","Established","Syn Sent","Syn Recv",
889	"Fin Wait 1","Fin Wait 2","Time Wait", "Close",
890	"Close Wait","Last ACK","Listen","Closing"
891};
892#endif
893
894static inline void tcp_set_state(struct sock *sk, int state)
895{
896	int oldstate = sk->sk_state;
897
898	switch (state) {
899	case TCP_ESTABLISHED:
900		if (oldstate != TCP_ESTABLISHED)
901			TCP_INC_STATS(TCP_MIB_CURRESTAB);
902		break;
903
904	case TCP_CLOSE:
905		if (oldstate == TCP_CLOSE_WAIT || oldstate == TCP_ESTABLISHED)
906			TCP_INC_STATS(TCP_MIB_ESTABRESETS);
907
908		sk->sk_prot->unhash(sk);
909		if (inet_csk(sk)->icsk_bind_hash &&
910		    !(sk->sk_userlocks & SOCK_BINDPORT_LOCK))
911			inet_put_port(&tcp_hashinfo, sk);
912		/* fall through */
913	default:
914		if (oldstate==TCP_ESTABLISHED)
915			TCP_DEC_STATS(TCP_MIB_CURRESTAB);
916	}
917
918	/* Change state AFTER socket is unhashed to avoid closed
919	 * socket sitting in hash tables.
920	 */
921	sk->sk_state = state;
922
923#ifdef STATE_TRACE
924	SOCK_DEBUG(sk, "TCP sk=%p, State %s -> %s\n",sk, statename[oldstate],statename[state]);
925#endif
926}
927
928extern void tcp_done(struct sock *sk);
929
930static inline void tcp_sack_reset(struct tcp_options_received *rx_opt)
931{
932	rx_opt->dsack = 0;
933	rx_opt->eff_sacks = 0;
934	rx_opt->num_sacks = 0;
935}
936
937/* Determine a window scaling and initial window to offer. */
938extern void tcp_select_initial_window(int __space, __u32 mss,
939				      __u32 *rcv_wnd, __u32 *window_clamp,
940				      int wscale_ok, __u8 *rcv_wscale);
941
942static inline int tcp_win_from_space(int space)
943{
944	return sysctl_tcp_adv_win_scale<=0 ?
945		(space>>(-sysctl_tcp_adv_win_scale)) :
946		space - (space>>sysctl_tcp_adv_win_scale);
947}
948
949/* Note: caller must be prepared to deal with negative returns */
950static inline int tcp_space(const struct sock *sk)
951{
952	return tcp_win_from_space(sk->sk_rcvbuf -
953				  atomic_read(&sk->sk_rmem_alloc));
954}
955
956static inline int tcp_full_space(const struct sock *sk)
957{
958	return tcp_win_from_space(sk->sk_rcvbuf);
959}
960
961static inline void tcp_openreq_init(struct request_sock *req,
962				    struct tcp_options_received *rx_opt,
963				    struct sk_buff *skb)
964{
965	struct inet_request_sock *ireq = inet_rsk(req);
966
967	req->rcv_wnd = 0;		/* So that tcp_send_synack() knows! */
968	tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq;
969	req->mss = rx_opt->mss_clamp;
970	req->ts_recent = rx_opt->saw_tstamp ? rx_opt->rcv_tsval : 0;
971	ireq->tstamp_ok = rx_opt->tstamp_ok;
972	ireq->sack_ok = rx_opt->sack_ok;
973	ireq->snd_wscale = rx_opt->snd_wscale;
974	ireq->wscale_ok = rx_opt->wscale_ok;
975	ireq->acked = 0;
976	ireq->ecn_ok = 0;
977	ireq->rmt_port = tcp_hdr(skb)->source;
978}
979
980extern void tcp_enter_memory_pressure(void);
981
982static inline int keepalive_intvl_when(const struct tcp_sock *tp)
983{
984	return tp->keepalive_intvl ? : sysctl_tcp_keepalive_intvl;
985}
986
987static inline int keepalive_time_when(const struct tcp_sock *tp)
988{
989	return tp->keepalive_time ? : sysctl_tcp_keepalive_time;
990}
991
992static inline int tcp_fin_time(const struct sock *sk)
993{
994	int fin_timeout = tcp_sk(sk)->linger2 ? : sysctl_tcp_fin_timeout;
995	const int rto = inet_csk(sk)->icsk_rto;
996
997	if (fin_timeout < (rto << 2) - (rto >> 1))
998		fin_timeout = (rto << 2) - (rto >> 1);
999
1000	return fin_timeout;
1001}
1002
1003static inline int tcp_paws_check(const struct tcp_options_received *rx_opt, int rst)
1004{
1005	if ((s32)(rx_opt->rcv_tsval - rx_opt->ts_recent) >= 0)
1006		return 0;
1007	if (get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS)
1008		return 0;
1009
1010	/* RST segments are not recommended to carry timestamp,
1011	   and, if they do, it is recommended to ignore PAWS because
1012	   "their cleanup function should take precedence over timestamps."
1013	   Certainly, it is mistake. It is necessary to understand the reasons
1014	   of this constraint to relax it: if peer reboots, clock may go
1015	   out-of-sync and half-open connections will not be reset.
1016	   Actually, the problem would be not existing if all
1017	   the implementations followed draft about maintaining clock
1018	   via reboots. Linux-2.2 DOES NOT!
1019
1020	   However, we can relax time bounds for RST segments to MSL.
1021	 */
1022	if (rst && get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_MSL)
1023		return 0;
1024	return 1;
1025}
1026
1027#define TCP_CHECK_TIMER(sk) do { } while (0)
1028
1029static inline void tcp_mib_init(void)
1030{
1031	/* See RFC 2012 */
1032	TCP_ADD_STATS_USER(TCP_MIB_RTOALGORITHM, 1);
1033	TCP_ADD_STATS_USER(TCP_MIB_RTOMIN, TCP_RTO_MIN*1000/HZ);
1034	TCP_ADD_STATS_USER(TCP_MIB_RTOMAX, TCP_RTO_MAX*1000/HZ);
1035	TCP_ADD_STATS_USER(TCP_MIB_MAXCONN, -1);
1036}
1037
1038/*from STCP */
1039static inline void clear_all_retrans_hints(struct tcp_sock *tp){
1040	tp->lost_skb_hint = NULL;
1041	tp->scoreboard_skb_hint = NULL;
1042	tp->retransmit_skb_hint = NULL;
1043	tp->forward_skb_hint = NULL;
1044	tp->fastpath_skb_hint = NULL;
1045}
1046
1047/* MD5 Signature */
1048struct crypto_hash;
1049
1050/* - key database */
1051struct tcp_md5sig_key {
1052	u8			*key;
1053	u8			keylen;
1054};
1055
1056struct tcp4_md5sig_key {
1057	u8			*key;
1058	u16			keylen;
1059	__be32			addr;
1060};
1061
1062struct tcp6_md5sig_key {
1063	u8			*key;
1064	u16			keylen;
1065	struct in6_addr		addr;
1066};
1067
1068/* - sock block */
1069struct tcp_md5sig_info {
1070	struct tcp4_md5sig_key	*keys4;
1071#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
1072	struct tcp6_md5sig_key	*keys6;
1073	u32			entries6;
1074	u32			alloced6;
1075#endif
1076	u32			entries4;
1077	u32			alloced4;
1078};
1079
1080/* - pseudo header */
1081struct tcp4_pseudohdr {
1082	__be32		saddr;
1083	__be32		daddr;
1084	__u8		pad;
1085	__u8		protocol;
1086	__be16		len;
1087};
1088
1089struct tcp6_pseudohdr {
1090	struct in6_addr	saddr;
1091	struct in6_addr daddr;
1092	__be32		len;
1093	__be32		protocol;	/* including padding */
1094};
1095
1096union tcp_md5sum_block {
1097	struct tcp4_pseudohdr ip4;
1098#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
1099	struct tcp6_pseudohdr ip6;
1100#endif
1101};
1102
1103/* - pool: digest algorithm, hash description and scratch buffer */
1104struct tcp_md5sig_pool {
1105	struct hash_desc	md5_desc;
1106	union tcp_md5sum_block	md5_blk;
1107};
1108
1109#define TCP_MD5SIG_MAXKEYS	(~(u32)0)	/* really?! */
1110
1111/* - functions */
1112extern int			tcp_v4_calc_md5_hash(char *md5_hash,
1113						     struct tcp_md5sig_key *key,
1114						     struct sock *sk,
1115						     struct dst_entry *dst,
1116						     struct request_sock *req,
1117						     struct tcphdr *th,
1118						     int protocol, int tcplen);
1119extern struct tcp_md5sig_key	*tcp_v4_md5_lookup(struct sock *sk,
1120						   struct sock *addr_sk);
1121
1122extern int			tcp_v4_md5_do_add(struct sock *sk,
1123						  __be32 addr,
1124						  u8 *newkey,
1125						  u8 newkeylen);
1126
1127extern int			tcp_v4_md5_do_del(struct sock *sk,
1128						  __be32 addr);
1129
1130extern struct tcp_md5sig_pool	**tcp_alloc_md5sig_pool(void);
1131extern void			tcp_free_md5sig_pool(void);
1132
1133extern struct tcp_md5sig_pool	*__tcp_get_md5sig_pool(int cpu);
1134extern void			__tcp_put_md5sig_pool(void);
1135
1136static inline
1137struct tcp_md5sig_pool		*tcp_get_md5sig_pool(void)
1138{
1139	int cpu = get_cpu();
1140	struct tcp_md5sig_pool *ret = __tcp_get_md5sig_pool(cpu);
1141	if (!ret)
1142		put_cpu();
1143	return ret;
1144}
1145
1146static inline void		tcp_put_md5sig_pool(void)
1147{
1148	__tcp_put_md5sig_pool();
1149	put_cpu();
1150}
1151
1152/* write queue abstraction */
1153static inline void tcp_write_queue_purge(struct sock *sk)
1154{
1155	struct sk_buff *skb;
1156
1157	while ((skb = __skb_dequeue(&sk->sk_write_queue)) != NULL)
1158		sk_stream_free_skb(sk, skb);
1159	sk_stream_mem_reclaim(sk);
1160}
1161
1162static inline struct sk_buff *tcp_write_queue_head(struct sock *sk)
1163{
1164	struct sk_buff *skb = sk->sk_write_queue.next;
1165	if (skb == (struct sk_buff *) &sk->sk_write_queue)
1166		return NULL;
1167	return skb;
1168}
1169
1170static inline struct sk_buff *tcp_write_queue_tail(struct sock *sk)
1171{
1172	struct sk_buff *skb = sk->sk_write_queue.prev;
1173	if (skb == (struct sk_buff *) &sk->sk_write_queue)
1174		return NULL;
1175	return skb;
1176}
1177
1178static inline struct sk_buff *tcp_write_queue_next(struct sock *sk, struct sk_buff *skb)
1179{
1180	return skb->next;
1181}
1182
1183#define tcp_for_write_queue(skb, sk)					\
1184		for (skb = (sk)->sk_write_queue.next;			\
1185		     (skb != (struct sk_buff *)&(sk)->sk_write_queue);	\
1186		     skb = skb->next)
1187
1188#define tcp_for_write_queue_from(skb, sk)				\
1189		for (; (skb != (struct sk_buff *)&(sk)->sk_write_queue);\
1190		     skb = skb->next)
1191
1192static inline struct sk_buff *tcp_send_head(struct sock *sk)
1193{
1194	return sk->sk_send_head;
1195}
1196
1197static inline void tcp_advance_send_head(struct sock *sk, struct sk_buff *skb)
1198{
1199	struct tcp_sock *tp = tcp_sk(sk);
1200
1201	sk->sk_send_head = skb->next;
1202	if (sk->sk_send_head == (struct sk_buff *)&sk->sk_write_queue)
1203		sk->sk_send_head = NULL;
1204	/* Don't override Nagle indefinately with F-RTO */
1205	if (tp->frto_counter == 2)
1206		tp->frto_counter = 3;
1207}
1208
1209static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unlinked)
1210{
1211	if (sk->sk_send_head == skb_unlinked)
1212		sk->sk_send_head = NULL;
1213}
1214
1215static inline void tcp_init_send_head(struct sock *sk)
1216{
1217	sk->sk_send_head = NULL;
1218}
1219
1220static inline void __tcp_add_write_queue_tail(struct sock *sk, struct sk_buff *skb)
1221{
1222	__skb_queue_tail(&sk->sk_write_queue, skb);
1223}
1224
1225static inline void tcp_add_write_queue_tail(struct sock *sk, struct sk_buff *skb)
1226{
1227	__tcp_add_write_queue_tail(sk, skb);
1228
1229	/* Queue it, remembering where we must start sending. */
1230	if (sk->sk_send_head == NULL)
1231		sk->sk_send_head = skb;
1232}
1233
1234static inline void __tcp_add_write_queue_head(struct sock *sk, struct sk_buff *skb)
1235{
1236	__skb_queue_head(&sk->sk_write_queue, skb);
1237}
1238
1239/* Insert buff after skb on the write queue of sk.  */
1240static inline void tcp_insert_write_queue_after(struct sk_buff *skb,
1241						struct sk_buff *buff,
1242						struct sock *sk)
1243{
1244	__skb_append(skb, buff, &sk->sk_write_queue);
1245}
1246
1247/* Insert skb between prev and next on the write queue of sk.  */
1248static inline void tcp_insert_write_queue_before(struct sk_buff *new,
1249						  struct sk_buff *skb,
1250						  struct sock *sk)
1251{
1252	__skb_insert(new, skb->prev, skb, &sk->sk_write_queue);
1253}
1254
1255static inline void tcp_unlink_write_queue(struct sk_buff *skb, struct sock *sk)
1256{
1257	__skb_unlink(skb, &sk->sk_write_queue);
1258}
1259
1260static inline int tcp_skb_is_last(const struct sock *sk,
1261				  const struct sk_buff *skb)
1262{
1263	return skb->next == (struct sk_buff *)&sk->sk_write_queue;
1264}
1265
1266static inline int tcp_write_queue_empty(struct sock *sk)
1267{
1268	return skb_queue_empty(&sk->sk_write_queue);
1269}
1270
1271/* /proc */
1272enum tcp_seq_states {
1273	TCP_SEQ_STATE_LISTENING,
1274	TCP_SEQ_STATE_OPENREQ,
1275	TCP_SEQ_STATE_ESTABLISHED,
1276	TCP_SEQ_STATE_TIME_WAIT,
1277};
1278
1279struct tcp_seq_afinfo {
1280	struct module		*owner;
1281	char			*name;
1282	sa_family_t		family;
1283	int			(*seq_show) (struct seq_file *m, void *v);
1284	struct file_operations	*seq_fops;
1285};
1286
1287struct tcp_iter_state {
1288	sa_family_t		family;
1289	enum tcp_seq_states	state;
1290	struct sock		*syn_wait_sk;
1291	int			bucket, sbucket, num, uid;
1292	struct seq_operations	seq_ops;
1293};
1294
1295extern int tcp_proc_register(struct tcp_seq_afinfo *afinfo);
1296extern void tcp_proc_unregister(struct tcp_seq_afinfo *afinfo);
1297
1298extern struct request_sock_ops tcp_request_sock_ops;
1299
1300extern int tcp_v4_destroy_sock(struct sock *sk);
1301
1302extern int tcp_v4_gso_send_check(struct sk_buff *skb);
1303extern struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features);
1304#ifdef CONFIG_INET_GRO
1305extern struct sk_buff **tcp_gro_receive(struct sk_buff **head,
1306					struct sk_buff *skb);
1307extern struct sk_buff **tcp4_gro_receive(struct sk_buff **head,
1308					 struct sk_buff *skb);
1309extern int tcp_gro_complete(struct sk_buff *skb);
1310extern int tcp4_gro_complete(struct sk_buff *skb);
1311#endif /* CONFIG_INET_GRO */
1312
1313#ifdef CONFIG_PROC_FS
1314extern int  tcp4_proc_init(void);
1315extern void tcp4_proc_exit(void);
1316#endif
1317
1318/* TCP af-specific functions */
1319struct tcp_sock_af_ops {
1320#ifdef CONFIG_TCP_MD5SIG
1321	struct tcp_md5sig_key	*(*md5_lookup) (struct sock *sk,
1322						struct sock *addr_sk);
1323	int			(*calc_md5_hash) (char *location,
1324						  struct tcp_md5sig_key *md5,
1325						  struct sock *sk,
1326						  struct dst_entry *dst,
1327						  struct request_sock *req,
1328						  struct tcphdr *th,
1329						  int protocol, int len);
1330	int			(*md5_add) (struct sock *sk,
1331					    struct sock *addr_sk,
1332					    u8 *newkey,
1333					    u8 len);
1334	int			(*md5_parse) (struct sock *sk,
1335					      char __user *optval,
1336					      int optlen);
1337#endif
1338};
1339
1340struct tcp_request_sock_ops {
1341#ifdef CONFIG_TCP_MD5SIG
1342	struct tcp_md5sig_key	*(*md5_lookup) (struct sock *sk,
1343						struct request_sock *req);
1344#endif
1345};
1346
1347extern void tcp_v4_init(struct net_proto_family *ops);
1348extern void tcp_init(void);
1349
1350#endif	/* _TCP_H */
1351