Home | History | Annotate | Download | only in netinet
      1 /** @file
      2     Declarations for TCP.
      3 
      4     Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
      5     This program and the accompanying materials are licensed and made available under
      6     the terms and conditions of the BSD License that accompanies this distribution.
      7     The full text of the license may be found at
      8     http://opensource.org/licenses/bsd-license.
      9 
     10     THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11     WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13  * Copyright (c) 1982, 1986, 1993
     14  *  The Regents of the University of California.  All rights reserved.
     15  *
     16  * Redistribution and use in source and binary forms, with or without
     17  * modification, are permitted provided that the following conditions
     18  * are met:
     19  * 1. Redistributions of source code must retain the above copyright
     20  *    notice, this list of conditions and the following disclaimer.
     21  * 2. Redistributions in binary form must reproduce the above copyright
     22  *    notice, this list of conditions and the following disclaimer in the
     23  *    documentation and/or other materials provided with the distribution.
     24  * 3. Neither the name of the University nor the names of its contributors
     25  *    may be used to endorse or promote products derived from this software
     26  *    without specific prior written permission.
     27  *
     28  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     29  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     31  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     32  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     37  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     38  * SUCH DAMAGE.
     39  *
     40  *  @(#)tcp.h 8.1 (Berkeley) 6/10/93
     41     NetBSD: tcp.h,v 1.28 2007/12/25 18:33:47 perry Exp
     42  */
     43 #ifndef _NETINET_TCP_H_
     44 #define _NETINET_TCP_H_
     45 
     46 #include <sys/featuretest.h>
     47 
     48 typedef u_int32_t tcp_seq;
     49 
     50 /* Flag definitions for tcphdr.th_flags */
     51 #define TH_FIN    0x01
     52 #define TH_SYN    0x02
     53 #define TH_RST    0x04
     54 #define TH_PUSH   0x08
     55 #define TH_ACK    0x10
     56 #define TH_URG    0x20
     57 #define TH_ECE    0x40
     58 #define TH_CWR    0x80
     59 
     60 #pragma pack(1)
     61 /*
     62  * TCP header.
     63  * Per RFC 793, September, 1981.
     64  * Updated by RFC 3168, September, 2001.
     65  */
     66 struct tcphdr {
     67   u_int16_t th_sport;   /* source port */
     68   u_int16_t th_dport;   /* destination port */
     69   tcp_seq   th_seq;     /* sequence number */
     70   tcp_seq   th_ack;     /* acknowledgement number */
     71 #if BYTE_ORDER == LITTLE_ENDIAN
     72   /*LINTED non-portable bitfields*/
     73   u_int8_t  th_x2:4,    /* (unused) */
     74             th_off:4;   /* data offset */
     75 #endif
     76 #if BYTE_ORDER == BIG_ENDIAN
     77   /*LINTED non-portable bitfields*/
     78   u_int8_t  th_off:4,   /* data offset */
     79             th_x2:4;    /* (unused) */
     80 #endif
     81   u_int8_t  th_flags;
     82   u_int16_t th_win;     /* window */
     83   u_int16_t th_sum;     /* checksum */
     84   u_int16_t th_urp;     /* urgent pointer */
     85 };
     86 #pragma pack()
     87 
     88 #define TCPOPT_EOL              0
     89 #define TCPOPT_NOP              1
     90 #define TCPOPT_MAXSEG           2
     91 #define TCPOLEN_MAXSEG          4
     92 #define TCPOPT_WINDOW           3
     93 #define TCPOLEN_WINDOW          3
     94 #define TCPOPT_SACK_PERMITTED   4     /* Experimental */
     95 #define TCPOLEN_SACK_PERMITTED  2
     96 #define TCPOPT_SACK             5     /* Experimental */
     97 #define TCPOPT_TIMESTAMP        8
     98 #define TCPOLEN_TIMESTAMP       10
     99 #define TCPOLEN_TSTAMP_APPA     (TCPOLEN_TIMESTAMP+2) /* appendix A */
    100 
    101 #define TCPOPT_TSTAMP_HDR \
    102     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
    103 
    104 #define TCPOPT_SIGNATURE        19    /* Keyed MD5: RFC 2385 */
    105 #define TCPOLEN_SIGNATURE       18
    106 #define TCPOLEN_SIGLEN          (TCPOLEN_SIGNATURE+2) /* padding */
    107 
    108 #define MAX_TCPOPTLEN           40    /* max # bytes that go in options */
    109 
    110 /*  Default maximum segment size for TCP.
    111  *  This is defined by RFC 1112 Sec 4.2.2.6.
    112  */
    113 #define TCP_MSS                 536
    114 
    115 #define TCP_MINMSS              216
    116 
    117 #define TCP_MAXWIN            65535   /* largest value for (unscaled) window */
    118 
    119 #define TCP_MAX_WINSHIFT         14   /* maximum window shift */
    120 
    121 #define TCP_MAXBURST              4   /* maximum segments in a burst */
    122 
    123 /*  User-settable options (used with setsockopt). */
    124 #define TCP_NODELAY               1   /* don't delay send to coalesce packets */
    125 #define TCP_MAXSEG                2   /* set maximum segment size */
    126 #define TCP_KEEPIDLE              3
    127 
    128 #ifdef notyet
    129 #define TCP_NOPUSH                4   /* reserved for FreeBSD compat */
    130 #endif
    131 
    132 #define TCP_KEEPINTVL             5
    133 #define TCP_KEEPCNT               6
    134 #define TCP_KEEPINIT              7
    135 
    136 #ifdef notyet
    137 #define TCP_NOOPT                 8   /* reserved for FreeBSD compat */
    138 #endif
    139 
    140 #define TCP_MD5SIG              0x10  /* use MD5 digests (RFC2385) */
    141 #define TCP_CONGCTL             0x20  /* selected congestion control */
    142 
    143 #endif /* !_NETINET_TCP_H_ */
    144