pandora: defconfig: update
[pandora-kernel.git] / include / net / tcp.h
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 FASTRETRANS_DEBUG 1
22
23 #include <linux/list.h>
24 #include <linux/tcp.h>
25 #include <linux/slab.h>
26 #include <linux/cache.h>
27 #include <linux/percpu.h>
28 #include <linux/skbuff.h>
29 #include <linux/dmaengine.h>
30 #include <linux/crypto.h>
31 #include <linux/cryptohash.h>
32 #include <linux/kref.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
48 extern struct inet_hashinfo tcp_hashinfo;
49
50 extern struct percpu_counter tcp_orphan_count;
51 extern void tcp_time_wait(struct sock *sk, int state, int timeo);
52
53 #define MAX_TCP_HEADER  (128 + MAX_HEADER)
54 #define MAX_TCP_OPTION_SPACE 40
55 #define TCP_MIN_SND_MSS         48
56 #define TCP_MIN_GSO_SIZE        (TCP_MIN_SND_MSS - MAX_TCP_OPTION_SPACE)
57
58 /* 
59  * Never offer a window over 32767 without using window scaling. Some
60  * poor stacks do signed 16bit maths! 
61  */
62 #define MAX_TCP_WINDOW          32767U
63
64 /* Offer an initial receive window of 10 mss. */
65 #define TCP_DEFAULT_INIT_RCVWND 10
66
67 /* Minimal accepted MSS. It is (60+60+8) - (20+20). */
68 #define TCP_MIN_MSS             88U
69
70 /* The least MTU to use for probing */
71 #define TCP_BASE_MSS            512
72
73 /* After receiving this amount of duplicate ACKs fast retransmit starts. */
74 #define TCP_FASTRETRANS_THRESH 3
75
76 /* Maximal reordering. */
77 #define TCP_MAX_REORDERING      127
78
79 /* Maximal number of ACKs sent quickly to accelerate slow-start. */
80 #define TCP_MAX_QUICKACKS       16U
81
82 /* urg_data states */
83 #define TCP_URG_VALID   0x0100
84 #define TCP_URG_NOTYET  0x0200
85 #define TCP_URG_READ    0x0400
86
87 #define TCP_RETR1       3       /*
88                                  * This is how many retries it does before it
89                                  * tries to figure out if the gateway is
90                                  * down. Minimal RFC value is 3; it corresponds
91                                  * to ~3sec-8min depending on RTO.
92                                  */
93
94 #define TCP_RETR2       15      /*
95                                  * This should take at least
96                                  * 90 minutes to time out.
97                                  * RFC1122 says that the limit is 100 sec.
98                                  * 15 is ~13-30min depending on RTO.
99                                  */
100
101 #define TCP_SYN_RETRIES  5      /* number of times to retry active opening a
102                                  * connection: ~180sec is RFC minimum   */
103
104 #define TCP_SYNACK_RETRIES 5    /* number of times to retry passive opening a
105                                  * connection: ~180sec is RFC minimum   */
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)(1*HZ))     /* RFC2988bis initial RTO value */
127 #define TCP_TIMEOUT_FALLBACK ((unsigned)(3*HZ)) /* RFC 1122 initial RTO value, now
128                                                  * used as a fallback RTO for the
129                                                  * initial data transmission if no
130                                                  * valid RTT sample has been acquired,
131                                                  * most likely due to retrans in 3WHS.
132                                                  */
133
134 #define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U)) /* Maximal interval between probes
135                                                          * for local resources.
136                                                          */
137
138 #define TCP_KEEPALIVE_TIME      (120*60*HZ)     /* two hours */
139 #define TCP_KEEPALIVE_PROBES    9               /* Max of 9 keepalive probes    */
140 #define TCP_KEEPALIVE_INTVL     (75*HZ)
141
142 #define MAX_TCP_KEEPIDLE        32767
143 #define MAX_TCP_KEEPINTVL       32767
144 #define MAX_TCP_KEEPCNT         127
145 #define MAX_TCP_SYNCNT          127
146
147 #define TCP_SYNQ_INTERVAL       (HZ/5)  /* Period of SYNACK timer */
148
149 #define TCP_PAWS_24DAYS (60 * 60 * 24 * 24)
150 #define TCP_PAWS_MSL    60              /* Per-host timestamps are invalidated
151                                          * after this time. It should be equal
152                                          * (or greater than) TCP_TIMEWAIT_LEN
153                                          * to provide reliability equal to one
154                                          * provided by timewait state.
155                                          */
156 #define TCP_PAWS_WINDOW 1               /* Replay window for per-host
157                                          * timestamps. It must be less than
158                                          * minimal timewait lifetime.
159                                          */
160 /*
161  *      TCP option
162  */
163  
164 #define TCPOPT_NOP              1       /* Padding */
165 #define TCPOPT_EOL              0       /* End of options */
166 #define TCPOPT_MSS              2       /* Segment size negotiating */
167 #define TCPOPT_WINDOW           3       /* Window scaling */
168 #define TCPOPT_SACK_PERM        4       /* SACK Permitted */
169 #define TCPOPT_SACK             5       /* SACK Block */
170 #define TCPOPT_TIMESTAMP        8       /* Better RTT estimations/PAWS */
171 #define TCPOPT_MD5SIG           19      /* MD5 Signature (RFC2385) */
172 #define TCPOPT_COOKIE           253     /* Cookie extension (experimental) */
173
174 /*
175  *     TCP option lengths
176  */
177
178 #define TCPOLEN_MSS            4
179 #define TCPOLEN_WINDOW         3
180 #define TCPOLEN_SACK_PERM      2
181 #define TCPOLEN_TIMESTAMP      10
182 #define TCPOLEN_MD5SIG         18
183 #define TCPOLEN_COOKIE_BASE    2        /* Cookie-less header extension */
184 #define TCPOLEN_COOKIE_PAIR    3        /* Cookie pair header extension */
185 #define TCPOLEN_COOKIE_MIN     (TCPOLEN_COOKIE_BASE+TCP_COOKIE_MIN)
186 #define TCPOLEN_COOKIE_MAX     (TCPOLEN_COOKIE_BASE+TCP_COOKIE_MAX)
187
188 /* But this is what stacks really send out. */
189 #define TCPOLEN_TSTAMP_ALIGNED          12
190 #define TCPOLEN_WSCALE_ALIGNED          4
191 #define TCPOLEN_SACKPERM_ALIGNED        4
192 #define TCPOLEN_SACK_BASE               2
193 #define TCPOLEN_SACK_BASE_ALIGNED       4
194 #define TCPOLEN_SACK_PERBLOCK           8
195 #define TCPOLEN_MD5SIG_ALIGNED          20
196 #define TCPOLEN_MSS_ALIGNED             4
197
198 /* Flags in tp->nonagle */
199 #define TCP_NAGLE_OFF           1       /* Nagle's algo is disabled */
200 #define TCP_NAGLE_CORK          2       /* Socket is corked         */
201 #define TCP_NAGLE_PUSH          4       /* Cork is overridden for already queued data */
202
203 /* TCP thin-stream limits */
204 #define TCP_THIN_LINEAR_RETRIES 6       /* After 6 linear retries, do exp. backoff */
205
206 /* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
207 #define TCP_INIT_CWND           10
208
209 extern struct inet_timewait_death_row tcp_death_row;
210
211 /* sysctl variables for tcp */
212 extern int sysctl_tcp_timestamps;
213 extern int sysctl_tcp_window_scaling;
214 extern int sysctl_tcp_sack;
215 extern int sysctl_tcp_fin_timeout;
216 extern int sysctl_tcp_keepalive_time;
217 extern int sysctl_tcp_keepalive_probes;
218 extern int sysctl_tcp_keepalive_intvl;
219 extern int sysctl_tcp_syn_retries;
220 extern int sysctl_tcp_synack_retries;
221 extern int sysctl_tcp_retries1;
222 extern int sysctl_tcp_retries2;
223 extern int sysctl_tcp_orphan_retries;
224 extern int sysctl_tcp_syncookies;
225 extern int sysctl_tcp_retrans_collapse;
226 extern int sysctl_tcp_stdurg;
227 extern int sysctl_tcp_rfc1337;
228 extern int sysctl_tcp_abort_on_overflow;
229 extern int sysctl_tcp_max_orphans;
230 extern int sysctl_tcp_fack;
231 extern int sysctl_tcp_reordering;
232 extern int sysctl_tcp_ecn;
233 extern int sysctl_tcp_dsack;
234 extern long sysctl_tcp_mem[3];
235 extern int sysctl_tcp_wmem[3];
236 extern int sysctl_tcp_rmem[3];
237 extern int sysctl_tcp_app_win;
238 extern int sysctl_tcp_adv_win_scale;
239 extern int sysctl_tcp_tw_reuse;
240 extern int sysctl_tcp_frto;
241 extern int sysctl_tcp_frto_response;
242 extern int sysctl_tcp_low_latency;
243 extern int sysctl_tcp_dma_copybreak;
244 extern int sysctl_tcp_nometrics_save;
245 extern int sysctl_tcp_moderate_rcvbuf;
246 extern int sysctl_tcp_tso_win_divisor;
247 extern int sysctl_tcp_abc;
248 extern int sysctl_tcp_mtu_probing;
249 extern int sysctl_tcp_base_mss;
250 extern int sysctl_tcp_min_snd_mss;
251 extern int sysctl_tcp_workaround_signed_windows;
252 extern int sysctl_tcp_slow_start_after_idle;
253 extern int sysctl_tcp_max_ssthresh;
254 extern int sysctl_tcp_cookie_size;
255 extern int sysctl_tcp_thin_linear_timeouts;
256 extern int sysctl_tcp_thin_dupack;
257 extern int sysctl_tcp_challenge_ack_limit;
258
259 extern atomic_long_t tcp_memory_allocated;
260 extern struct percpu_counter tcp_sockets_allocated;
261 extern int tcp_memory_pressure;
262
263 /*
264  * The next routines deal with comparing 32 bit unsigned ints
265  * and worry about wraparound (automatic with unsigned arithmetic).
266  */
267
268 static inline int before(__u32 seq1, __u32 seq2)
269 {
270         return (__s32)(seq1-seq2) < 0;
271 }
272 #define after(seq2, seq1)       before(seq1, seq2)
273
274 /* is s2<=s1<=s3 ? */
275 static inline int between(__u32 seq1, __u32 seq2, __u32 seq3)
276 {
277         return seq3 - seq2 >= seq1 - seq2;
278 }
279
280 static inline bool tcp_too_many_orphans(struct sock *sk, int shift)
281 {
282         struct percpu_counter *ocp = sk->sk_prot->orphan_count;
283         int orphans = percpu_counter_read_positive(ocp);
284
285         if (orphans << shift > sysctl_tcp_max_orphans) {
286                 orphans = percpu_counter_sum_positive(ocp);
287                 if (orphans << shift > sysctl_tcp_max_orphans)
288                         return true;
289         }
290
291         if (sk->sk_wmem_queued > SOCK_MIN_SNDBUF &&
292             atomic_long_read(&tcp_memory_allocated) > sysctl_tcp_mem[2])
293                 return true;
294         return false;
295 }
296
297 /* syncookies: remember time of last synqueue overflow */
298 static inline void tcp_synq_overflow(struct sock *sk)
299 {
300         tcp_sk(sk)->rx_opt.ts_recent_stamp = jiffies;
301 }
302
303 /* syncookies: no recent synqueue overflow on this listening socket? */
304 static inline int tcp_synq_no_recent_overflow(const struct sock *sk)
305 {
306         unsigned long last_overflow = tcp_sk(sk)->rx_opt.ts_recent_stamp;
307         return time_after(jiffies, last_overflow + TCP_TIMEOUT_FALLBACK);
308 }
309
310 extern struct proto tcp_prot;
311
312 #define TCP_INC_STATS(net, field)       SNMP_INC_STATS((net)->mib.tcp_statistics, field)
313 #define TCP_INC_STATS_BH(net, field)    SNMP_INC_STATS_BH((net)->mib.tcp_statistics, field)
314 #define TCP_DEC_STATS(net, field)       SNMP_DEC_STATS((net)->mib.tcp_statistics, field)
315 #define TCP_ADD_STATS_USER(net, field, val) SNMP_ADD_STATS_USER((net)->mib.tcp_statistics, field, val)
316 #define TCP_ADD_STATS(net, field, val)  SNMP_ADD_STATS((net)->mib.tcp_statistics, field, val)
317
318 extern void tcp_v4_err(struct sk_buff *skb, u32);
319
320 extern void tcp_shutdown (struct sock *sk, int how);
321
322 extern int tcp_v4_rcv(struct sk_buff *skb);
323
324 extern struct inet_peer *tcp_v4_get_peer(struct sock *sk, bool *release_it);
325 extern void *tcp_v4_tw_get_peer(struct sock *sk);
326 extern int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);
327 extern int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
328                        size_t size);
329 extern int tcp_sendpage(struct sock *sk, struct page *page, int offset,
330                         size_t size, int flags);
331 extern int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg);
332 extern int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
333                                  const struct tcphdr *th, unsigned int len);
334 extern int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
335                                const struct tcphdr *th, unsigned int len);
336 extern void tcp_rcv_space_adjust(struct sock *sk);
337 extern void tcp_cleanup_rbuf(struct sock *sk, int copied);
338 extern int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp);
339 extern void tcp_twsk_destructor(struct sock *sk);
340 extern ssize_t tcp_splice_read(struct socket *sk, loff_t *ppos,
341                                struct pipe_inode_info *pipe, size_t len,
342                                unsigned int flags);
343
344 static inline void tcp_dec_quickack_mode(struct sock *sk,
345                                          const unsigned int pkts)
346 {
347         struct inet_connection_sock *icsk = inet_csk(sk);
348
349         if (icsk->icsk_ack.quick) {
350                 if (pkts >= icsk->icsk_ack.quick) {
351                         icsk->icsk_ack.quick = 0;
352                         /* Leaving quickack mode we deflate ATO. */
353                         icsk->icsk_ack.ato   = TCP_ATO_MIN;
354                 } else
355                         icsk->icsk_ack.quick -= pkts;
356         }
357 }
358
359 #define TCP_ECN_OK              1
360 #define TCP_ECN_QUEUE_CWR       2
361 #define TCP_ECN_DEMAND_CWR      4
362 #define TCP_ECN_SEEN            8
363
364 enum tcp_tw_status {
365         TCP_TW_SUCCESS = 0,
366         TCP_TW_RST = 1,
367         TCP_TW_ACK = 2,
368         TCP_TW_SYN = 3
369 };
370
371
372 extern enum tcp_tw_status tcp_timewait_state_process(struct inet_timewait_sock *tw,
373                                                      struct sk_buff *skb,
374                                                      const struct tcphdr *th);
375 extern struct sock * tcp_check_req(struct sock *sk,struct sk_buff *skb,
376                                    struct request_sock *req,
377                                    struct request_sock **prev);
378 extern int tcp_child_process(struct sock *parent, struct sock *child,
379                              struct sk_buff *skb);
380 extern int tcp_use_frto(struct sock *sk);
381 extern void tcp_enter_frto(struct sock *sk);
382 extern void tcp_enter_loss(struct sock *sk, int how);
383 extern void tcp_clear_retrans(struct tcp_sock *tp);
384 extern void tcp_update_metrics(struct sock *sk);
385 extern void tcp_close(struct sock *sk, long timeout);
386 extern unsigned int tcp_poll(struct file * file, struct socket *sock,
387                              struct poll_table_struct *wait);
388 extern int tcp_getsockopt(struct sock *sk, int level, int optname,
389                           char __user *optval, int __user *optlen);
390 extern int tcp_setsockopt(struct sock *sk, int level, int optname,
391                           char __user *optval, unsigned int optlen);
392 extern int compat_tcp_getsockopt(struct sock *sk, int level, int optname,
393                                  char __user *optval, int __user *optlen);
394 extern int compat_tcp_setsockopt(struct sock *sk, int level, int optname,
395                                  char __user *optval, unsigned int optlen);
396 extern void tcp_set_keepalive(struct sock *sk, int val);
397 extern void tcp_syn_ack_timeout(struct sock *sk, struct request_sock *req);
398 extern int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
399                        size_t len, int nonblock, int flags, int *addr_len);
400 extern void tcp_parse_options(const struct sk_buff *skb,
401                               struct tcp_options_received *opt_rx, const u8 **hvpp,
402                               int estab);
403 extern const u8 *tcp_parse_md5sig_option(const struct tcphdr *th);
404
405 /*
406  *      TCP v4 functions exported for the inet6 API
407  */
408
409 extern void tcp_v4_send_check(struct sock *sk, struct sk_buff *skb);
410 extern int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb);
411 extern struct sock * tcp_create_openreq_child(struct sock *sk,
412                                               struct request_sock *req,
413                                               struct sk_buff *skb);
414 extern struct sock * tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
415                                           struct request_sock *req,
416                                           struct dst_entry *dst);
417 extern int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb);
418 extern int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr,
419                           int addr_len);
420 extern int tcp_connect(struct sock *sk);
421 extern struct sk_buff * tcp_make_synack(struct sock *sk, struct dst_entry *dst,
422                                         struct request_sock *req,
423                                         struct request_values *rvp);
424 extern int tcp_disconnect(struct sock *sk, int flags);
425
426
427 /* From syncookies.c */
428 extern __u32 syncookie_secret[2][16-4+SHA_DIGEST_WORDS];
429 extern struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb, 
430                                     struct ip_options *opt);
431 #ifdef CONFIG_SYN_COOKIES
432 extern __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, 
433                                      __u16 *mss);
434 #else
435 static inline __u32 cookie_v4_init_sequence(struct sock *sk,
436                                             struct sk_buff *skb,
437                                             __u16 *mss)
438 {
439         return 0;
440 }
441 #endif
442
443 extern __u32 cookie_init_timestamp(struct request_sock *req);
444 extern bool cookie_check_timestamp(struct tcp_options_received *opt, bool *);
445
446 /* From net/ipv6/syncookies.c */
447 extern struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb);
448 #ifdef CONFIG_SYN_COOKIES
449 extern __u32 cookie_v6_init_sequence(struct sock *sk, const struct sk_buff *skb,
450                                      __u16 *mss);
451 #else
452 static inline __u32 cookie_v6_init_sequence(struct sock *sk,
453                                             struct sk_buff *skb,
454                                             __u16 *mss)
455 {
456         return 0;
457 }
458 #endif
459 /* tcp_output.c */
460
461 extern void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss,
462                                       int nonagle);
463 extern int tcp_may_send_now(struct sock *sk);
464 extern int tcp_retransmit_skb(struct sock *, struct sk_buff *);
465 extern void tcp_retransmit_timer(struct sock *sk);
466 extern void tcp_xmit_retransmit_queue(struct sock *);
467 extern void tcp_simple_retransmit(struct sock *);
468 extern int tcp_trim_head(struct sock *, struct sk_buff *, u32);
469 extern int tcp_fragment(struct sock *, struct sk_buff *, u32, unsigned int);
470
471 extern void tcp_send_probe0(struct sock *);
472 extern void tcp_send_partial(struct sock *);
473 extern int tcp_write_wakeup(struct sock *);
474 extern void tcp_send_fin(struct sock *sk);
475 extern void tcp_send_active_reset(struct sock *sk, gfp_t priority);
476 extern int tcp_send_synack(struct sock *);
477 extern int tcp_syn_flood_action(struct sock *sk,
478                                 const struct sk_buff *skb,
479                                 const char *proto);
480 extern void tcp_push_one(struct sock *, unsigned int mss_now);
481 extern void tcp_send_ack(struct sock *sk);
482 extern void tcp_send_delayed_ack(struct sock *sk);
483
484 /* tcp_input.c */
485 extern void tcp_cwnd_application_limited(struct sock *sk);
486
487 /* tcp_timer.c */
488 extern void tcp_init_xmit_timers(struct sock *);
489 static inline void tcp_clear_xmit_timers(struct sock *sk)
490 {
491         inet_csk_clear_xmit_timers(sk);
492 }
493
494 extern unsigned int tcp_sync_mss(struct sock *sk, u32 pmtu);
495 extern unsigned int tcp_current_mss(struct sock *sk);
496
497 /* Bound MSS / TSO packet size with the half of the window */
498 static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize)
499 {
500         int cutoff;
501
502         /* When peer uses tiny windows, there is no use in packetizing
503          * to sub-MSS pieces for the sake of SWS or making sure there
504          * are enough packets in the pipe for fast recovery.
505          *
506          * On the other hand, for extremely large MSS devices, handling
507          * smaller than MSS windows in this way does make sense.
508          */
509         if (tp->max_window >= 512)
510                 cutoff = (tp->max_window >> 1);
511         else
512                 cutoff = tp->max_window;
513
514         if (cutoff && pktsize > cutoff)
515                 return max_t(int, cutoff, 68U - tp->tcp_header_len);
516         else
517                 return pktsize;
518 }
519
520 /* tcp.c */
521 extern void tcp_get_info(const struct sock *, struct tcp_info *);
522
523 /* Read 'sendfile()'-style from a TCP socket */
524 typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *,
525                                 unsigned int, size_t);
526 extern int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
527                          sk_read_actor_t recv_actor);
528
529 extern void tcp_initialize_rcv_mss(struct sock *sk);
530
531 extern int tcp_mtu_to_mss(const struct sock *sk, int pmtu);
532 extern int tcp_mss_to_mtu(const struct sock *sk, int mss);
533 extern void tcp_mtup_init(struct sock *sk);
534 extern void tcp_valid_rtt_meas(struct sock *sk, u32 seq_rtt);
535
536 static inline void tcp_bound_rto(const struct sock *sk)
537 {
538         if (inet_csk(sk)->icsk_rto > TCP_RTO_MAX)
539                 inet_csk(sk)->icsk_rto = TCP_RTO_MAX;
540 }
541
542 static inline u32 __tcp_set_rto(const struct tcp_sock *tp)
543 {
544         return (tp->srtt >> 3) + tp->rttvar;
545 }
546
547 static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
548 {
549         tp->pred_flags = htonl((tp->tcp_header_len << 26) |
550                                ntohl(TCP_FLAG_ACK) |
551                                snd_wnd);
552 }
553
554 static inline void tcp_fast_path_on(struct tcp_sock *tp)
555 {
556         __tcp_fast_path_on(tp, tp->snd_wnd >> tp->rx_opt.snd_wscale);
557 }
558
559 static inline void tcp_fast_path_check(struct sock *sk)
560 {
561         struct tcp_sock *tp = tcp_sk(sk);
562
563         if (skb_queue_empty(&tp->out_of_order_queue) &&
564             tp->rcv_wnd &&
565             atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf &&
566             !tp->urg_data)
567                 tcp_fast_path_on(tp);
568 }
569
570 /* Compute the actual rto_min value */
571 static inline u32 tcp_rto_min(struct sock *sk)
572 {
573         const struct dst_entry *dst = __sk_dst_get(sk);
574         u32 rto_min = TCP_RTO_MIN;
575
576         if (dst && dst_metric_locked(dst, RTAX_RTO_MIN))
577                 rto_min = dst_metric_rtt(dst, RTAX_RTO_MIN);
578         return rto_min;
579 }
580
581 /* Compute the actual receive window we are currently advertising.
582  * Rcv_nxt can be after the window if our peer push more data
583  * than the offered window.
584  */
585 static inline u32 tcp_receive_window(const struct tcp_sock *tp)
586 {
587         s32 win = tp->rcv_wup + tp->rcv_wnd - tp->rcv_nxt;
588
589         if (win < 0)
590                 win = 0;
591         return (u32) win;
592 }
593
594 /* Choose a new window, without checks for shrinking, and without
595  * scaling applied to the result.  The caller does these things
596  * if necessary.  This is a "raw" window selection.
597  */
598 extern u32 __tcp_select_window(struct sock *sk);
599
600 /* TCP timestamps are only 32-bits, this causes a slight
601  * complication on 64-bit systems since we store a snapshot
602  * of jiffies in the buffer control blocks below.  We decided
603  * to use only the low 32-bits of jiffies and hide the ugly
604  * casts with the following macro.
605  */
606 #define tcp_time_stamp          ((__u32)(jiffies))
607
608 #define tcp_flag_byte(th) (((u_int8_t *)th)[13])
609
610 #define TCPHDR_FIN 0x01
611 #define TCPHDR_SYN 0x02
612 #define TCPHDR_RST 0x04
613 #define TCPHDR_PSH 0x08
614 #define TCPHDR_ACK 0x10
615 #define TCPHDR_URG 0x20
616 #define TCPHDR_ECE 0x40
617 #define TCPHDR_CWR 0x80
618
619 /* This is what the send packet queuing engine uses to pass
620  * TCP per-packet control information to the transmission code.
621  * We also store the host-order sequence numbers in here too.
622  * This is 44 bytes if IPV6 is enabled.
623  * If this grows please adjust skbuff.h:skbuff->cb[xxx] size appropriately.
624  */
625 struct tcp_skb_cb {
626         union {
627                 struct inet_skb_parm    h4;
628 #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
629                 struct inet6_skb_parm   h6;
630 #endif
631         } header;       /* For incoming frames          */
632         __u32           seq;            /* Starting sequence number     */
633         __u32           end_seq;        /* SEQ + FIN + SYN + datalen    */
634         __u32           when;           /* used to compute rtt's        */
635         __u8            tcp_flags;      /* TCP header flags. (tcp[13])  */
636         __u8            sacked;         /* State flags for SACK/FACK.   */
637 #define TCPCB_SACKED_ACKED      0x01    /* SKB ACK'd by a SACK block    */
638 #define TCPCB_SACKED_RETRANS    0x02    /* SKB retransmitted            */
639 #define TCPCB_LOST              0x04    /* SKB is lost                  */
640 #define TCPCB_TAGBITS           0x07    /* All tag bits                 */
641         __u8            ip_dsfield;     /* IPv4 tos or IPv6 dsfield     */
642         /* 1 byte hole */
643 #define TCPCB_EVER_RETRANS      0x80    /* Ever retransmitted frame     */
644 #define TCPCB_RETRANS           (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS)
645
646         __u32           ack_seq;        /* Sequence number ACK'd        */
647 };
648
649 #define TCP_SKB_CB(__skb)       ((struct tcp_skb_cb *)&((__skb)->cb[0]))
650
651 /* RFC3168 : 6.1.1 SYN packets must not have ECT/ECN bits set
652  *
653  * If we receive a SYN packet with these bits set, it means a network is
654  * playing bad games with TOS bits. In order to avoid possible false congestion
655  * notifications, we disable TCP ECN negociation.
656  */
657 static inline void
658 TCP_ECN_create_request(struct request_sock *req, const struct sk_buff *skb)
659 {
660         const struct tcphdr *th = tcp_hdr(skb);
661
662         if (sysctl_tcp_ecn && th->ece && th->cwr &&
663             INET_ECN_is_not_ect(TCP_SKB_CB(skb)->ip_dsfield))
664                 inet_rsk(req)->ecn_ok = 1;
665 }
666
667 /* Due to TSO, an SKB can be composed of multiple actual
668  * packets.  To keep these tracked properly, we use this.
669  */
670 static inline int tcp_skb_pcount(const struct sk_buff *skb)
671 {
672         return skb_shinfo(skb)->gso_segs;
673 }
674
675 /* This is valid iff tcp_skb_pcount() > 1. */
676 static inline int tcp_skb_mss(const struct sk_buff *skb)
677 {
678         return skb_shinfo(skb)->gso_size;
679 }
680
681 /* Events passed to congestion control interface */
682 enum tcp_ca_event {
683         CA_EVENT_TX_START,      /* first transmit when no packets in flight */
684         CA_EVENT_CWND_RESTART,  /* congestion window restart */
685         CA_EVENT_COMPLETE_CWR,  /* end of congestion recovery */
686         CA_EVENT_FRTO,          /* fast recovery timeout */
687         CA_EVENT_LOSS,          /* loss timeout */
688         CA_EVENT_FAST_ACK,      /* in sequence ack */
689         CA_EVENT_SLOW_ACK,      /* other ack */
690 };
691
692 /*
693  * Interface for adding new TCP congestion control handlers
694  */
695 #define TCP_CA_NAME_MAX 16
696 #define TCP_CA_MAX      128
697 #define TCP_CA_BUF_MAX  (TCP_CA_NAME_MAX*TCP_CA_MAX)
698
699 #define TCP_CONG_NON_RESTRICTED 0x1
700 #define TCP_CONG_RTT_STAMP      0x2
701
702 struct tcp_congestion_ops {
703         struct list_head        list;
704         unsigned long flags;
705
706         /* initialize private data (optional) */
707         void (*init)(struct sock *sk);
708         /* cleanup private data  (optional) */
709         void (*release)(struct sock *sk);
710
711         /* return slow start threshold (required) */
712         u32 (*ssthresh)(struct sock *sk);
713         /* lower bound for congestion window (optional) */
714         u32 (*min_cwnd)(const struct sock *sk);
715         /* do new cwnd calculation (required) */
716         void (*cong_avoid)(struct sock *sk, u32 ack, u32 in_flight);
717         /* call before changing ca_state (optional) */
718         void (*set_state)(struct sock *sk, u8 new_state);
719         /* call when cwnd event occurs (optional) */
720         void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
721         /* new value of cwnd after loss (optional) */
722         u32  (*undo_cwnd)(struct sock *sk);
723         /* hook for packet ack accounting (optional) */
724         void (*pkts_acked)(struct sock *sk, u32 num_acked, s32 rtt_us);
725         /* get info for inet_diag (optional) */
726         void (*get_info)(struct sock *sk, u32 ext, struct sk_buff *skb);
727
728         char            name[TCP_CA_NAME_MAX];
729         struct module   *owner;
730 };
731
732 extern int tcp_register_congestion_control(struct tcp_congestion_ops *type);
733 extern void tcp_unregister_congestion_control(struct tcp_congestion_ops *type);
734
735 extern void tcp_init_congestion_control(struct sock *sk);
736 extern void tcp_cleanup_congestion_control(struct sock *sk);
737 extern int tcp_set_default_congestion_control(const char *name);
738 extern void tcp_get_default_congestion_control(char *name);
739 extern void tcp_get_available_congestion_control(char *buf, size_t len);
740 extern void tcp_get_allowed_congestion_control(char *buf, size_t len);
741 extern int tcp_set_allowed_congestion_control(char *allowed);
742 extern int tcp_set_congestion_control(struct sock *sk, const char *name);
743 extern void tcp_slow_start(struct tcp_sock *tp);
744 extern void tcp_cong_avoid_ai(struct tcp_sock *tp, u32 w);
745
746 extern struct tcp_congestion_ops tcp_init_congestion_ops;
747 extern u32 tcp_reno_ssthresh(struct sock *sk);
748 extern void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 in_flight);
749 extern u32 tcp_reno_min_cwnd(const struct sock *sk);
750 extern struct tcp_congestion_ops tcp_reno;
751
752 static inline void tcp_set_ca_state(struct sock *sk, const u8 ca_state)
753 {
754         struct inet_connection_sock *icsk = inet_csk(sk);
755
756         if (icsk->icsk_ca_ops->set_state)
757                 icsk->icsk_ca_ops->set_state(sk, ca_state);
758         icsk->icsk_ca_state = ca_state;
759 }
760
761 static inline void tcp_ca_event(struct sock *sk, const enum tcp_ca_event event)
762 {
763         const struct inet_connection_sock *icsk = inet_csk(sk);
764
765         if (icsk->icsk_ca_ops->cwnd_event)
766                 icsk->icsk_ca_ops->cwnd_event(sk, event);
767 }
768
769 /* These functions determine how the current flow behaves in respect of SACK
770  * handling. SACK is negotiated with the peer, and therefore it can vary
771  * between different flows.
772  *
773  * tcp_is_sack - SACK enabled
774  * tcp_is_reno - No SACK
775  * tcp_is_fack - FACK enabled, implies SACK enabled
776  */
777 static inline int tcp_is_sack(const struct tcp_sock *tp)
778 {
779         return tp->rx_opt.sack_ok;
780 }
781
782 static inline int tcp_is_reno(const struct tcp_sock *tp)
783 {
784         return !tcp_is_sack(tp);
785 }
786
787 static inline int tcp_is_fack(const struct tcp_sock *tp)
788 {
789         return tp->rx_opt.sack_ok & 2;
790 }
791
792 static inline void tcp_enable_fack(struct tcp_sock *tp)
793 {
794         tp->rx_opt.sack_ok |= 2;
795 }
796
797 static inline unsigned int tcp_left_out(const struct tcp_sock *tp)
798 {
799         return tp->sacked_out + tp->lost_out;
800 }
801
802 /* This determines how many packets are "in the network" to the best
803  * of our knowledge.  In many cases it is conservative, but where
804  * detailed information is available from the receiver (via SACK
805  * blocks etc.) we can make more aggressive calculations.
806  *
807  * Use this for decisions involving congestion control, use just
808  * tp->packets_out to determine if the send queue is empty or not.
809  *
810  * Read this equation as:
811  *
812  *      "Packets sent once on transmission queue" MINUS
813  *      "Packets left network, but not honestly ACKed yet" PLUS
814  *      "Packets fast retransmitted"
815  */
816 static inline unsigned int tcp_packets_in_flight(const struct tcp_sock *tp)
817 {
818         return tp->packets_out - tcp_left_out(tp) + tp->retrans_out;
819 }
820
821 #define TCP_INFINITE_SSTHRESH   0x7fffffff
822
823 static inline bool tcp_in_initial_slowstart(const struct tcp_sock *tp)
824 {
825         return tp->snd_ssthresh >= TCP_INFINITE_SSTHRESH;
826 }
827
828 /* If cwnd > ssthresh, we may raise ssthresh to be half-way to cwnd.
829  * The exception is rate halving phase, when cwnd is decreasing towards
830  * ssthresh.
831  */
832 static inline __u32 tcp_current_ssthresh(const struct sock *sk)
833 {
834         const struct tcp_sock *tp = tcp_sk(sk);
835
836         if ((1 << inet_csk(sk)->icsk_ca_state) & (TCPF_CA_CWR | TCPF_CA_Recovery))
837                 return tp->snd_ssthresh;
838         else
839                 return max(tp->snd_ssthresh,
840                            ((tp->snd_cwnd >> 1) +
841                             (tp->snd_cwnd >> 2)));
842 }
843
844 /* Use define here intentionally to get WARN_ON location shown at the caller */
845 #define tcp_verify_left_out(tp) WARN_ON(tcp_left_out(tp) > tp->packets_out)
846
847 extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh);
848 extern __u32 tcp_init_cwnd(const struct tcp_sock *tp, const struct dst_entry *dst);
849
850 /* Slow start with delack produces 3 packets of burst, so that
851  * it is safe "de facto".  This will be the default - same as
852  * the default reordering threshold - but if reordering increases,
853  * we must be able to allow cwnd to burst at least this much in order
854  * to not pull it back when holes are filled.
855  */
856 static __inline__ __u32 tcp_max_burst(const struct tcp_sock *tp)
857 {
858         return tp->reordering;
859 }
860
861 /* Returns end sequence number of the receiver's advertised window */
862 static inline u32 tcp_wnd_end(const struct tcp_sock *tp)
863 {
864         return tp->snd_una + tp->snd_wnd;
865 }
866 extern int tcp_is_cwnd_limited(const struct sock *sk, u32 in_flight);
867
868 static inline void tcp_minshall_update(struct tcp_sock *tp, unsigned int mss,
869                                        const struct sk_buff *skb)
870 {
871         if (skb->len < mss)
872                 tp->snd_sml = TCP_SKB_CB(skb)->end_seq;
873 }
874
875 static inline void tcp_check_probe_timer(struct sock *sk)
876 {
877         const struct tcp_sock *tp = tcp_sk(sk);
878         const struct inet_connection_sock *icsk = inet_csk(sk);
879
880         if (!tp->packets_out && !icsk->icsk_pending)
881                 inet_csk_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
882                                           icsk->icsk_rto, TCP_RTO_MAX);
883 }
884
885 static inline void tcp_init_wl(struct tcp_sock *tp, u32 seq)
886 {
887         tp->snd_wl1 = seq;
888 }
889
890 static inline void tcp_update_wl(struct tcp_sock *tp, u32 seq)
891 {
892         tp->snd_wl1 = seq;
893 }
894
895 /*
896  * Calculate(/check) TCP checksum
897  */
898 static inline __sum16 tcp_v4_check(int len, __be32 saddr,
899                                    __be32 daddr, __wsum base)
900 {
901         return csum_tcpudp_magic(saddr,daddr,len,IPPROTO_TCP,base);
902 }
903
904 static inline __sum16 __tcp_checksum_complete(struct sk_buff *skb)
905 {
906         return __skb_checksum_complete(skb);
907 }
908
909 static inline int tcp_checksum_complete(struct sk_buff *skb)
910 {
911         return !skb_csum_unnecessary(skb) &&
912                 __tcp_checksum_complete(skb);
913 }
914
915 /* Prequeue for VJ style copy to user, combined with checksumming. */
916
917 static inline void tcp_prequeue_init(struct tcp_sock *tp)
918 {
919         tp->ucopy.task = NULL;
920         tp->ucopy.len = 0;
921         tp->ucopy.memory = 0;
922         skb_queue_head_init(&tp->ucopy.prequeue);
923 #ifdef CONFIG_NET_DMA
924         tp->ucopy.dma_chan = NULL;
925         tp->ucopy.wakeup = 0;
926         tp->ucopy.pinned_list = NULL;
927         tp->ucopy.dma_cookie = 0;
928 #endif
929 }
930
931 /* Packet is added to VJ-style prequeue for processing in process
932  * context, if a reader task is waiting. Apparently, this exciting
933  * idea (VJ's mail "Re: query about TCP header on tcp-ip" of 07 Sep 93)
934  * failed somewhere. Latency? Burstiness? Well, at least now we will
935  * see, why it failed. 8)8)                               --ANK
936  *
937  * NOTE: is this not too big to inline?
938  */
939 static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb)
940 {
941         struct tcp_sock *tp = tcp_sk(sk);
942
943         if (sysctl_tcp_low_latency || !tp->ucopy.task)
944                 return 0;
945
946         skb_dst_force(skb);
947         __skb_queue_tail(&tp->ucopy.prequeue, skb);
948         tp->ucopy.memory += skb->truesize;
949         if (tp->ucopy.memory > sk->sk_rcvbuf) {
950                 struct sk_buff *skb1;
951
952                 BUG_ON(sock_owned_by_user(sk));
953
954                 while ((skb1 = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) {
955                         sk_backlog_rcv(sk, skb1);
956                         NET_INC_STATS_BH(sock_net(sk),
957                                          LINUX_MIB_TCPPREQUEUEDROPPED);
958                 }
959
960                 tp->ucopy.memory = 0;
961         } else if (skb_queue_len(&tp->ucopy.prequeue) == 1) {
962                 wake_up_interruptible_sync_poll(sk_sleep(sk),
963                                            POLLIN | POLLRDNORM | POLLRDBAND);
964                 if (!inet_csk_ack_scheduled(sk))
965                         inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK,
966                                                   (3 * tcp_rto_min(sk)) / 4,
967                                                   TCP_RTO_MAX);
968         }
969         return 1;
970 }
971
972 int tcp_filter(struct sock *sk, struct sk_buff *skb);
973
974 #undef STATE_TRACE
975
976 #ifdef STATE_TRACE
977 static const char *statename[]={
978         "Unused","Established","Syn Sent","Syn Recv",
979         "Fin Wait 1","Fin Wait 2","Time Wait", "Close",
980         "Close Wait","Last ACK","Listen","Closing"
981 };
982 #endif
983 extern void tcp_set_state(struct sock *sk, int state);
984
985 extern void tcp_done(struct sock *sk);
986
987 static inline void tcp_sack_reset(struct tcp_options_received *rx_opt)
988 {
989         rx_opt->dsack = 0;
990         rx_opt->num_sacks = 0;
991 }
992
993 /* Determine a window scaling and initial window to offer. */
994 extern void tcp_select_initial_window(int __space, __u32 mss,
995                                       __u32 *rcv_wnd, __u32 *window_clamp,
996                                       int wscale_ok, __u8 *rcv_wscale,
997                                       __u32 init_rcv_wnd);
998
999 static inline int tcp_win_from_space(int space)
1000 {
1001         return sysctl_tcp_adv_win_scale<=0 ?
1002                 (space>>(-sysctl_tcp_adv_win_scale)) :
1003                 space - (space>>sysctl_tcp_adv_win_scale);
1004 }
1005
1006 /* Note: caller must be prepared to deal with negative returns */ 
1007 static inline int tcp_space(const struct sock *sk)
1008 {
1009         return tcp_win_from_space(sk->sk_rcvbuf -
1010                                   atomic_read(&sk->sk_rmem_alloc));
1011
1012
1013 static inline int tcp_full_space(const struct sock *sk)
1014 {
1015         return tcp_win_from_space(sk->sk_rcvbuf); 
1016 }
1017
1018 static inline void tcp_openreq_init(struct request_sock *req,
1019                                     struct tcp_options_received *rx_opt,
1020                                     struct sk_buff *skb)
1021 {
1022         struct inet_request_sock *ireq = inet_rsk(req);
1023
1024         req->rcv_wnd = 0;               /* So that tcp_send_synack() knows! */
1025         req->cookie_ts = 0;
1026         tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq;
1027         req->mss = rx_opt->mss_clamp;
1028         req->ts_recent = rx_opt->saw_tstamp ? rx_opt->rcv_tsval : 0;
1029         ireq->tstamp_ok = rx_opt->tstamp_ok;
1030         ireq->sack_ok = rx_opt->sack_ok;
1031         ireq->snd_wscale = rx_opt->snd_wscale;
1032         ireq->wscale_ok = rx_opt->wscale_ok;
1033         ireq->acked = 0;
1034         ireq->ecn_ok = 0;
1035         ireq->rmt_port = tcp_hdr(skb)->source;
1036         ireq->loc_port = tcp_hdr(skb)->dest;
1037 }
1038
1039 extern void tcp_enter_memory_pressure(struct sock *sk);
1040
1041 static inline int keepalive_intvl_when(const struct tcp_sock *tp)
1042 {
1043         return tp->keepalive_intvl ? : sysctl_tcp_keepalive_intvl;
1044 }
1045
1046 static inline int keepalive_time_when(const struct tcp_sock *tp)
1047 {
1048         return tp->keepalive_time ? : sysctl_tcp_keepalive_time;
1049 }
1050
1051 static inline int keepalive_probes(const struct tcp_sock *tp)
1052 {
1053         return tp->keepalive_probes ? : sysctl_tcp_keepalive_probes;
1054 }
1055
1056 static inline u32 keepalive_time_elapsed(const struct tcp_sock *tp)
1057 {
1058         const struct inet_connection_sock *icsk = &tp->inet_conn;
1059
1060         return min_t(u32, tcp_time_stamp - icsk->icsk_ack.lrcvtime,
1061                           tcp_time_stamp - tp->rcv_tstamp);
1062 }
1063
1064 static inline int tcp_fin_time(const struct sock *sk)
1065 {
1066         int fin_timeout = tcp_sk(sk)->linger2 ? : sysctl_tcp_fin_timeout;
1067         const int rto = inet_csk(sk)->icsk_rto;
1068
1069         if (fin_timeout < (rto << 2) - (rto >> 1))
1070                 fin_timeout = (rto << 2) - (rto >> 1);
1071
1072         return fin_timeout;
1073 }
1074
1075 static inline int tcp_paws_check(const struct tcp_options_received *rx_opt,
1076                                  int paws_win)
1077 {
1078         if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win)
1079                 return 1;
1080         if (unlikely(get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS))
1081                 return 1;
1082         /*
1083          * Some OSes send SYN and SYNACK messages with tsval=0 tsecr=0,
1084          * then following tcp messages have valid values. Ignore 0 value,
1085          * or else 'negative' tsval might forbid us to accept their packets.
1086          */
1087         if (!rx_opt->ts_recent)
1088                 return 1;
1089         return 0;
1090 }
1091
1092 static inline int tcp_paws_reject(const struct tcp_options_received *rx_opt,
1093                                   int rst)
1094 {
1095         if (tcp_paws_check(rx_opt, 0))
1096                 return 0;
1097
1098         /* RST segments are not recommended to carry timestamp,
1099            and, if they do, it is recommended to ignore PAWS because
1100            "their cleanup function should take precedence over timestamps."
1101            Certainly, it is mistake. It is necessary to understand the reasons
1102            of this constraint to relax it: if peer reboots, clock may go
1103            out-of-sync and half-open connections will not be reset.
1104            Actually, the problem would be not existing if all
1105            the implementations followed draft about maintaining clock
1106            via reboots. Linux-2.2 DOES NOT!
1107
1108            However, we can relax time bounds for RST segments to MSL.
1109          */
1110         if (rst && get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_MSL)
1111                 return 0;
1112         return 1;
1113 }
1114
1115 static inline void tcp_mib_init(struct net *net)
1116 {
1117         /* See RFC 2012 */
1118         TCP_ADD_STATS_USER(net, TCP_MIB_RTOALGORITHM, 1);
1119         TCP_ADD_STATS_USER(net, TCP_MIB_RTOMIN, TCP_RTO_MIN*1000/HZ);
1120         TCP_ADD_STATS_USER(net, TCP_MIB_RTOMAX, TCP_RTO_MAX*1000/HZ);
1121         TCP_ADD_STATS_USER(net, TCP_MIB_MAXCONN, -1);
1122 }
1123
1124 /* from STCP */
1125 static inline void tcp_clear_retrans_hints_partial(struct tcp_sock *tp)
1126 {
1127         tp->lost_skb_hint = NULL;
1128         tp->scoreboard_skb_hint = NULL;
1129 }
1130
1131 static inline void tcp_clear_all_retrans_hints(struct tcp_sock *tp)
1132 {
1133         tcp_clear_retrans_hints_partial(tp);
1134         tp->retransmit_skb_hint = NULL;
1135 }
1136
1137 /* MD5 Signature */
1138 struct crypto_hash;
1139
1140 /* - key database */
1141 struct tcp_md5sig_key {
1142         u8                      *key;
1143         u8                      keylen;
1144 };
1145
1146 struct tcp4_md5sig_key {
1147         struct tcp_md5sig_key   base;
1148         __be32                  addr;
1149 };
1150
1151 struct tcp6_md5sig_key {
1152         struct tcp_md5sig_key   base;
1153 #if 0
1154         u32                     scope_id;       /* XXX */
1155 #endif
1156         struct in6_addr         addr;
1157 };
1158
1159 /* - sock block */
1160 struct tcp_md5sig_info {
1161         struct tcp4_md5sig_key  *keys4;
1162 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
1163         struct tcp6_md5sig_key  *keys6;
1164         u32                     entries6;
1165         u32                     alloced6;
1166 #endif
1167         u32                     entries4;
1168         u32                     alloced4;
1169 };
1170
1171 /* - pseudo header */
1172 struct tcp4_pseudohdr {
1173         __be32          saddr;
1174         __be32          daddr;
1175         __u8            pad;
1176         __u8            protocol;
1177         __be16          len;
1178 };
1179
1180 struct tcp6_pseudohdr {
1181         struct in6_addr saddr;
1182         struct in6_addr daddr;
1183         __be32          len;
1184         __be32          protocol;       /* including padding */
1185 };
1186
1187 union tcp_md5sum_block {
1188         struct tcp4_pseudohdr ip4;
1189 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
1190         struct tcp6_pseudohdr ip6;
1191 #endif
1192 };
1193
1194 /* - pool: digest algorithm, hash description and scratch buffer */
1195 struct tcp_md5sig_pool {
1196         struct hash_desc        md5_desc;
1197         union tcp_md5sum_block  md5_blk;
1198 };
1199
1200 /* - functions */
1201 extern int tcp_v4_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
1202                                const struct sock *sk,
1203                                const struct request_sock *req,
1204                                const struct sk_buff *skb);
1205 extern struct tcp_md5sig_key * tcp_v4_md5_lookup(struct sock *sk,
1206                                                  struct sock *addr_sk);
1207 extern int tcp_v4_md5_do_add(struct sock *sk, __be32 addr, u8 *newkey,
1208                              u8 newkeylen);
1209 extern int tcp_v4_md5_do_del(struct sock *sk, __be32 addr);
1210
1211 #ifdef CONFIG_TCP_MD5SIG
1212 #define tcp_twsk_md5_key(twsk)  ((twsk)->tw_md5_keylen ?                 \
1213                                  &(struct tcp_md5sig_key) {              \
1214                                         .key = (twsk)->tw_md5_key,       \
1215                                         .keylen = (twsk)->tw_md5_keylen, \
1216                                 } : NULL)
1217 #else
1218 #define tcp_twsk_md5_key(twsk)  NULL
1219 #endif
1220
1221 extern bool tcp_alloc_md5sig_pool(void);
1222
1223 extern struct tcp_md5sig_pool   *tcp_get_md5sig_pool(void);
1224 static inline void tcp_put_md5sig_pool(void)
1225 {
1226         local_bh_enable();
1227 }
1228
1229 extern int tcp_md5_hash_header(struct tcp_md5sig_pool *, const struct tcphdr *);
1230 extern int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *, const struct sk_buff *,
1231                                  unsigned header_len);
1232 extern int tcp_md5_hash_key(struct tcp_md5sig_pool *hp,
1233                             const struct tcp_md5sig_key *key);
1234
1235 /* write queue abstraction */
1236 static inline void tcp_write_queue_purge(struct sock *sk)
1237 {
1238         struct sk_buff *skb;
1239
1240         while ((skb = __skb_dequeue(&sk->sk_write_queue)) != NULL)
1241                 sk_wmem_free_skb(sk, skb);
1242         sk_mem_reclaim(sk);
1243         tcp_clear_all_retrans_hints(tcp_sk(sk));
1244 }
1245
1246 static inline struct sk_buff *tcp_write_queue_head(const struct sock *sk)
1247 {
1248         return skb_peek(&sk->sk_write_queue);
1249 }
1250
1251 static inline struct sk_buff *tcp_write_queue_tail(const struct sock *sk)
1252 {
1253         return skb_peek_tail(&sk->sk_write_queue);
1254 }
1255
1256 static inline struct sk_buff *tcp_write_queue_next(const struct sock *sk,
1257                                                    const struct sk_buff *skb)
1258 {
1259         return skb_queue_next(&sk->sk_write_queue, skb);
1260 }
1261
1262 static inline struct sk_buff *tcp_write_queue_prev(const struct sock *sk,
1263                                                    const struct sk_buff *skb)
1264 {
1265         return skb_queue_prev(&sk->sk_write_queue, skb);
1266 }
1267
1268 #define tcp_for_write_queue(skb, sk)                                    \
1269         skb_queue_walk(&(sk)->sk_write_queue, skb)
1270
1271 #define tcp_for_write_queue_from(skb, sk)                               \
1272         skb_queue_walk_from(&(sk)->sk_write_queue, skb)
1273
1274 #define tcp_for_write_queue_from_safe(skb, tmp, sk)                     \
1275         skb_queue_walk_from_safe(&(sk)->sk_write_queue, skb, tmp)
1276
1277 static inline struct sk_buff *tcp_send_head(const struct sock *sk)
1278 {
1279         return sk->sk_send_head;
1280 }
1281
1282 static inline bool tcp_skb_is_last(const struct sock *sk,
1283                                    const struct sk_buff *skb)
1284 {
1285         return skb_queue_is_last(&sk->sk_write_queue, skb);
1286 }
1287
1288 static inline void tcp_advance_send_head(struct sock *sk, const struct sk_buff *skb)
1289 {
1290         if (tcp_skb_is_last(sk, skb))
1291                 sk->sk_send_head = NULL;
1292         else
1293                 sk->sk_send_head = tcp_write_queue_next(sk, skb);
1294 }
1295
1296 static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unlinked)
1297 {
1298         if (sk->sk_send_head == skb_unlinked)
1299                 sk->sk_send_head = NULL;
1300         if (tcp_sk(sk)->highest_sack == skb_unlinked)
1301                 tcp_sk(sk)->highest_sack = NULL;
1302 }
1303
1304 static inline void tcp_init_send_head(struct sock *sk)
1305 {
1306         sk->sk_send_head = NULL;
1307 }
1308
1309 static inline void __tcp_add_write_queue_tail(struct sock *sk, struct sk_buff *skb)
1310 {
1311         __skb_queue_tail(&sk->sk_write_queue, skb);
1312 }
1313
1314 static inline void tcp_add_write_queue_tail(struct sock *sk, struct sk_buff *skb)
1315 {
1316         __tcp_add_write_queue_tail(sk, skb);
1317
1318         /* Queue it, remembering where we must start sending. */
1319         if (sk->sk_send_head == NULL) {
1320                 sk->sk_send_head = skb;
1321
1322                 if (tcp_sk(sk)->highest_sack == NULL)
1323                         tcp_sk(sk)->highest_sack = skb;
1324         }
1325 }
1326
1327 static inline void __tcp_add_write_queue_head(struct sock *sk, struct sk_buff *skb)
1328 {
1329         __skb_queue_head(&sk->sk_write_queue, skb);
1330 }
1331
1332 /* Insert buff after skb on the write queue of sk.  */
1333 static inline void tcp_insert_write_queue_after(struct sk_buff *skb,
1334                                                 struct sk_buff *buff,
1335                                                 struct sock *sk)
1336 {
1337         __skb_queue_after(&sk->sk_write_queue, skb, buff);
1338 }
1339
1340 /* Insert new before skb on the write queue of sk.  */
1341 static inline void tcp_insert_write_queue_before(struct sk_buff *new,
1342                                                   struct sk_buff *skb,
1343                                                   struct sock *sk)
1344 {
1345         __skb_queue_before(&sk->sk_write_queue, skb, new);
1346
1347         if (sk->sk_send_head == skb)
1348                 sk->sk_send_head = new;
1349 }
1350
1351 static inline void tcp_unlink_write_queue(struct sk_buff *skb, struct sock *sk)
1352 {
1353         __skb_unlink(skb, &sk->sk_write_queue);
1354 }
1355
1356 static inline int tcp_write_queue_empty(struct sock *sk)
1357 {
1358         return skb_queue_empty(&sk->sk_write_queue);
1359 }
1360
1361 static inline void tcp_push_pending_frames(struct sock *sk)
1362 {
1363         if (tcp_send_head(sk)) {
1364                 struct tcp_sock *tp = tcp_sk(sk);
1365
1366                 __tcp_push_pending_frames(sk, tcp_current_mss(sk), tp->nonagle);
1367         }
1368 }
1369
1370 /* Start sequence of the highest skb with SACKed bit, valid only if
1371  * sacked > 0 or when the caller has ensured validity by itself.
1372  */
1373 static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp)
1374 {
1375         if (!tp->sacked_out)
1376                 return tp->snd_una;
1377
1378         if (tp->highest_sack == NULL)
1379                 return tp->snd_nxt;
1380
1381         return TCP_SKB_CB(tp->highest_sack)->seq;
1382 }
1383
1384 static inline void tcp_advance_highest_sack(struct sock *sk, struct sk_buff *skb)
1385 {
1386         tcp_sk(sk)->highest_sack = tcp_skb_is_last(sk, skb) ? NULL :
1387                                                 tcp_write_queue_next(sk, skb);
1388 }
1389
1390 static inline struct sk_buff *tcp_highest_sack(struct sock *sk)
1391 {
1392         return tcp_sk(sk)->highest_sack;
1393 }
1394
1395 static inline void tcp_highest_sack_reset(struct sock *sk)
1396 {
1397         tcp_sk(sk)->highest_sack = tcp_write_queue_head(sk);
1398 }
1399
1400 /* Called when old skb is about to be deleted and replaced by new skb */
1401 static inline void tcp_highest_sack_replace(struct sock *sk,
1402                                             struct sk_buff *old,
1403                                             struct sk_buff *new)
1404 {
1405         if (old == tcp_highest_sack(sk))
1406                 tcp_sk(sk)->highest_sack = new;
1407 }
1408
1409 /* Determines whether this is a thin stream (which may suffer from
1410  * increased latency). Used to trigger latency-reducing mechanisms.
1411  */
1412 static inline unsigned int tcp_stream_is_thin(struct tcp_sock *tp)
1413 {
1414         return tp->packets_out < 4 && !tcp_in_initial_slowstart(tp);
1415 }
1416
1417 /* /proc */
1418 enum tcp_seq_states {
1419         TCP_SEQ_STATE_LISTENING,
1420         TCP_SEQ_STATE_OPENREQ,
1421         TCP_SEQ_STATE_ESTABLISHED,
1422         TCP_SEQ_STATE_TIME_WAIT,
1423 };
1424
1425 int tcp_seq_open(struct inode *inode, struct file *file);
1426
1427 struct tcp_seq_afinfo {
1428         char                            *name;
1429         sa_family_t                     family;
1430         const struct file_operations    *seq_fops;
1431         struct seq_operations           seq_ops;
1432 };
1433
1434 struct tcp_iter_state {
1435         struct seq_net_private  p;
1436         sa_family_t             family;
1437         enum tcp_seq_states     state;
1438         struct sock             *syn_wait_sk;
1439         int                     bucket, offset, sbucket, num, uid;
1440         loff_t                  last_pos;
1441 };
1442
1443 extern int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo);
1444 extern void tcp_proc_unregister(struct net *net, struct tcp_seq_afinfo *afinfo);
1445
1446 extern struct request_sock_ops tcp_request_sock_ops;
1447 extern struct request_sock_ops tcp6_request_sock_ops;
1448
1449 extern void tcp_v4_destroy_sock(struct sock *sk);
1450
1451 extern int tcp_v4_gso_send_check(struct sk_buff *skb);
1452 extern struct sk_buff *tcp_tso_segment(struct sk_buff *skb, u32 features);
1453 extern struct sk_buff **tcp_gro_receive(struct sk_buff **head,
1454                                         struct sk_buff *skb);
1455 extern struct sk_buff **tcp4_gro_receive(struct sk_buff **head,
1456                                          struct sk_buff *skb);
1457 extern int tcp_gro_complete(struct sk_buff *skb);
1458 extern int tcp4_gro_complete(struct sk_buff *skb);
1459
1460 #ifdef CONFIG_PROC_FS
1461 extern int tcp4_proc_init(void);
1462 extern void tcp4_proc_exit(void);
1463 #endif
1464
1465 /* TCP af-specific functions */
1466 struct tcp_sock_af_ops {
1467 #ifdef CONFIG_TCP_MD5SIG
1468         struct tcp_md5sig_key   *(*md5_lookup) (struct sock *sk,
1469                                                 struct sock *addr_sk);
1470         int                     (*calc_md5_hash) (char *location,
1471                                                   struct tcp_md5sig_key *md5,
1472                                                   const struct sock *sk,
1473                                                   const struct request_sock *req,
1474                                                   const struct sk_buff *skb);
1475         int                     (*md5_add) (struct sock *sk,
1476                                             struct sock *addr_sk,
1477                                             u8 *newkey,
1478                                             u8 len);
1479         int                     (*md5_parse) (struct sock *sk,
1480                                               char __user *optval,
1481                                               int optlen);
1482 #endif
1483 };
1484
1485 struct tcp_request_sock_ops {
1486 #ifdef CONFIG_TCP_MD5SIG
1487         struct tcp_md5sig_key   *(*md5_lookup) (struct sock *sk,
1488                                                 struct request_sock *req);
1489         int                     (*calc_md5_hash) (char *location,
1490                                                   struct tcp_md5sig_key *md5,
1491                                                   const struct sock *sk,
1492                                                   const struct request_sock *req,
1493                                                   const struct sk_buff *skb);
1494 #endif
1495 };
1496
1497 /* Using SHA1 for now, define some constants.
1498  */
1499 #define COOKIE_DIGEST_WORDS (SHA_DIGEST_WORDS)
1500 #define COOKIE_MESSAGE_WORDS (SHA_MESSAGE_BYTES / 4)
1501 #define COOKIE_WORKSPACE_WORDS (COOKIE_DIGEST_WORDS + COOKIE_MESSAGE_WORDS)
1502
1503 extern int tcp_cookie_generator(u32 *bakery);
1504
1505 /**
1506  *      struct tcp_cookie_values - each socket needs extra space for the
1507  *      cookies, together with (optional) space for any SYN data.
1508  *
1509  *      A tcp_sock contains a pointer to the current value, and this is
1510  *      cloned to the tcp_timewait_sock.
1511  *
1512  * @cookie_pair:        variable data from the option exchange.
1513  *
1514  * @cookie_desired:     user specified tcpct_cookie_desired.  Zero
1515  *                      indicates default (sysctl_tcp_cookie_size).
1516  *                      After cookie sent, remembers size of cookie.
1517  *                      Range 0, TCP_COOKIE_MIN to TCP_COOKIE_MAX.
1518  *
1519  * @s_data_desired:     user specified tcpct_s_data_desired.  When the
1520  *                      constant payload is specified (@s_data_constant),
1521  *                      holds its length instead.
1522  *                      Range 0 to TCP_MSS_DESIRED.
1523  *
1524  * @s_data_payload:     constant data that is to be included in the
1525  *                      payload of SYN or SYNACK segments when the
1526  *                      cookie option is present.
1527  */
1528 struct tcp_cookie_values {
1529         struct kref     kref;
1530         u8              cookie_pair[TCP_COOKIE_PAIR_SIZE];
1531         u8              cookie_pair_size;
1532         u8              cookie_desired;
1533         u16             s_data_desired:11,
1534                         s_data_constant:1,
1535                         s_data_in:1,
1536                         s_data_out:1,
1537                         s_data_unused:2;
1538         u8              s_data_payload[0];
1539 };
1540
1541 static inline void tcp_cookie_values_release(struct kref *kref)
1542 {
1543         kfree(container_of(kref, struct tcp_cookie_values, kref));
1544 }
1545
1546 /* The length of constant payload data.  Note that s_data_desired is
1547  * overloaded, depending on s_data_constant: either the length of constant
1548  * data (returned here) or the limit on variable data.
1549  */
1550 static inline int tcp_s_data_size(const struct tcp_sock *tp)
1551 {
1552         return (tp->cookie_values != NULL && tp->cookie_values->s_data_constant)
1553                 ? tp->cookie_values->s_data_desired
1554                 : 0;
1555 }
1556
1557 /**
1558  *      struct tcp_extend_values - tcp_ipv?.c to tcp_output.c workspace.
1559  *
1560  *      As tcp_request_sock has already been extended in other places, the
1561  *      only remaining method is to pass stack values along as function
1562  *      parameters.  These parameters are not needed after sending SYNACK.
1563  *
1564  * @cookie_bakery:      cryptographic secret and message workspace.
1565  *
1566  * @cookie_plus:        bytes in authenticator/cookie option, copied from
1567  *                      struct tcp_options_received (above).
1568  */
1569 struct tcp_extend_values {
1570         struct request_values           rv;
1571         u32                             cookie_bakery[COOKIE_WORKSPACE_WORDS];
1572         u8                              cookie_plus:6,
1573                                         cookie_out_never:1,
1574                                         cookie_in_always:1;
1575 };
1576
1577 static inline struct tcp_extend_values *tcp_xv(struct request_values *rvp)
1578 {
1579         return (struct tcp_extend_values *)rvp;
1580 }
1581
1582 extern void tcp_v4_init(void);
1583 extern void tcp_init(void);
1584
1585 #endif  /* _TCP_H */