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