Annotation of linux/net/tcp/tcp.h, revision 1.1

1.1     ! root        1: /* tcp.h */
        !             2: /*
        !             3:     Copyright (C) 1992  Ross Biro
        !             4: 
        !             5:     This program is free software; you can redistribute it and/or modify
        !             6:     it under the terms of the GNU General Public License as published by
        !             7:     the Free Software Foundation; either version 2, or (at your option)
        !             8:     any later version.
        !             9: 
        !            10:     This program is distributed in the hope that it will be useful,
        !            11:     but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            12:     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            13:     GNU General Public License for more details.
        !            14: 
        !            15:     You should have received a copy of the GNU General Public License
        !            16:     along with this program; if not, write to the Free Software
        !            17:     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
        !            18: 
        !            19:     The Author may be reached as [email protected] or
        !            20:     C/O Department of Mathematics; Stanford University; Stanford, CA 94305
        !            21: */
        !            22: #ifndef _TCP_TCP_H
        !            23: #define _TCP_TCP_H
        !            24: 
        !            25: struct tcp_header
        !            26: {
        !            27:   unsigned short source;
        !            28:   unsigned short dest;
        !            29:   unsigned long seq;
        !            30:   unsigned long ack_seq;
        !            31:   unsigned short res1:4, doff:4, fin:1, syn:1, rst:1, psh:1,
        !            32:                  ack:1, urg:1,res2:2;
        !            33:   unsigned short window;
        !            34:   unsigned short check;
        !            35:   unsigned short urg_ptr;
        !            36: };
        !            37: 
        !            38: enum {
        !            39:   TCP_ESTABLISHED=1,
        !            40:   TCP_SYN_SENT,
        !            41:   TCP_SYN_RECV,
        !            42:   TCP_CLOSING, /* not a valid state, just a seperator so we can use
        !            43:                  < tcp_closing or > tcp_closing for checks. */
        !            44:   TCP_FIN_WAIT1,
        !            45:   TCP_FIN_WAIT2,
        !            46:   TCP_TIME_WAIT,
        !            47:   TCP_CLOSE,
        !            48:   TCP_LAST_ACK,
        !            49:   TCP_LISTEN
        !            50: };
        !            51: 
        !            52: #define MAX_SYN_SIZE 44 + sizeof (struct sk_buff) + MAX_HEADER
        !            53: #define MAX_FIN_SIZE 40 + sizeof (struct sk_buff) + MAX_HEADER
        !            54: #define MAX_ACK_SIZE 40 + sizeof (struct sk_buff) + MAX_HEADER
        !            55: #define MAX_RESET_SIZE 40 + sizeof (struct sk_buff) + MAX_HEADER
        !            56: #define MAX_WINDOW  12000
        !            57: #define MIN_WINDOW   2048
        !            58: #define MAX_ACK_BACKLOG 2
        !            59: #define MIN_WRITE_SPACE 2048
        !            60: #define TCP_WINDOW_DIFF 2048
        !            61: 
        !            62: #define TCP_RETR1       7       /* this is howmany retries it does
        !            63:                                   before it tries to figure out
        !            64:                                   if the gateway is down. */
        !            65: 
        !            66: #define TCP_RETR2      10      /* this should take between 3 and
        !            67:                                   ten minutes ( 1024 * rtt). */
        !            68: 
        !            69: 
        !            70: #define TCP_TIMEOUT_LEN 720000 /* should be about 2 hrs. */
        !            71: #define TCP_TIMEWAIT_LEN 6000 /* How long to wait to sucessfully 
        !            72:                                 close the socket, about 60 seconds. */
        !            73: #define TCP_ACK_TIME 35 /* time to delay before sending an ack. */
        !            74: #define TCP_DONE_TIME 2500 /* maximum time to wait before actually destroying
        !            75:                             a socket. */
        !            76: #define TCP_WRITE_TIME 100 /* initial time to wait for an ack,
        !            77:                              after last transmit. */
        !            78: #define TCP_CONNECT_TIME 200 /* time to retransmit first syn. */
        !            79: #define TCP_SYN_RETRIES 30 /* number of times to retry openning a connection.
        !            80:                              */
        !            81: 
        !            82: #define TCP_NO_CHECK 0 /* turn to one if you want the default to be no
        !            83:                          checksum . */
        !            84: 
        !            85: void print_th (struct tcp_header *);
        !            86: #define HEADER_SIZE 64
        !            87: 
        !            88: 
        !            89:  /* this next routines deal with comparing 32 bit unsigned ints and
        !            90:     worry about wrap around. The general strategy is to do a normal
        !            91:     compare so long as neither of the numbers is within 4k of wrapping.
        !            92:     Otherwise we must check for the wrap. */
        !            93: 
        !            94:  static inline int
        !            95:  before (unsigned long seq1, unsigned long seq2)
        !            96:  {
        !            97:    /* this inequality is strict. */
        !            98:    if (seq1 == seq2) return (0);
        !            99:    if (seq1 < seq2) 
        !           100:      {
        !           101:        if ((unsigned long)seq2-(unsigned long)seq1 < 32767UL) 
        !           102:         {
        !           103:           return (1);
        !           104:         }
        !           105:        else
        !           106:         {
        !           107:           return (0);
        !           108:         }
        !           109:      }
        !           110:    /* now we know seq1 > seq2.  So all we need to do is check to see
        !           111:       if seq1 has wrapped. */
        !           112:    if (seq2 < 4096UL && seq1 > (0xffffffUL - 4096UL))
        !           113:      {
        !           114:        return (1);
        !           115:      }
        !           116:    return (0);
        !           117: 
        !           118:  }
        !           119: 
        !           120:  static inline int
        !           121:  after (unsigned long seq1, unsigned long seq2)
        !           122:  {
        !           123:    return (before (seq2, seq1));
        !           124:  }
        !           125: 
        !           126:  /* is s2<=s1<=s3 ? */
        !           127:  static inline int
        !           128:  between (unsigned long seq1, unsigned long seq2, unsigned long seq3)
        !           129:  {
        !           130:    return (after (seq1+1, seq2) && before (seq1, seq3+1));
        !           131:  }
        !           132: 
        !           133: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.