The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/bsd/netinet/tcp.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2000-2011 Apple Computer, Inc. All rights reserved.
    3  *
    4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
    5  * 
    6  * This file contains Original Code and/or Modifications of Original Code
    7  * as defined in and that are subject to the Apple Public Source License
    8  * Version 2.0 (the 'License'). You may not use this file except in
    9  * compliance with the License. The rights granted to you under the License
   10  * may not be used to create, or enable the creation or redistribution of,
   11  * unlawful or unlicensed copies of an Apple operating system, or to
   12  * circumvent, violate, or enable the circumvention or violation of, any
   13  * terms of an Apple operating system software license agreement.
   14  * 
   15  * Please obtain a copy of the License at
   16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
   17  * 
   18  * The Original Code and all software distributed under the License are
   19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
   20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
   21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
   22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
   23  * Please see the License for the specific language governing rights and
   24  * limitations under the License.
   25  * 
   26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
   27  */
   28 /*
   29  * Copyright (c) 1982, 1986, 1993
   30  *      The Regents of the University of California.  All rights reserved.
   31  *
   32  * Redistribution and use in source and binary forms, with or without
   33  * modification, are permitted provided that the following conditions
   34  * are met:
   35  * 1. Redistributions of source code must retain the above copyright
   36  *    notice, this list of conditions and the following disclaimer.
   37  * 2. Redistributions in binary form must reproduce the above copyright
   38  *    notice, this list of conditions and the following disclaimer in the
   39  *    documentation and/or other materials provided with the distribution.
   40  * 3. All advertising materials mentioning features or use of this software
   41  *    must display the following acknowledgement:
   42  *      This product includes software developed by the University of
   43  *      California, Berkeley and its contributors.
   44  * 4. Neither the name of the University nor the names of its contributors
   45  *    may be used to endorse or promote products derived from this software
   46  *    without specific prior written permission.
   47  *
   48  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   49  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   50  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   51  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   52  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   53  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   54  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   55  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   56  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   57  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   58  * SUCH DAMAGE.
   59  *
   60  *      @(#)tcp.h       8.1 (Berkeley) 6/10/93
   61  * $FreeBSD: src/sys/netinet/tcp.h,v 1.13.2.3 2001/03/01 22:08:42 jlemon Exp $
   62  */
   63 
   64 #ifndef _NETINET_TCP_H_
   65 #define _NETINET_TCP_H_
   66 #include <sys/appleapiopts.h>
   67 #include <sys/_types.h>
   68 #include <machine/endian.h>
   69 
   70 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
   71 typedef __uint32_t tcp_seq;
   72 typedef __uint32_t tcp_cc;              /* connection count per rfc1644 */
   73 
   74 #define tcp6_seq        tcp_seq /* for KAME src sync over BSD*'s */
   75 #define tcp6hdr         tcphdr  /* for KAME src sync over BSD*'s */
   76 
   77 /*
   78  * TCP header.
   79  * Per RFC 793, September, 1981.
   80  */
   81 struct tcphdr {
   82         unsigned short  th_sport;       /* source port */
   83         unsigned short  th_dport;       /* destination port */
   84         tcp_seq th_seq;                 /* sequence number */
   85         tcp_seq th_ack;                 /* acknowledgement number */
   86 #if __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN
   87         unsigned int    th_x2:4,        /* (unused) */
   88                         th_off:4;       /* data offset */
   89 #endif
   90 #if __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN
   91         unsigned int    th_off:4,       /* data offset */
   92                         th_x2:4;        /* (unused) */
   93 #endif
   94         unsigned char   th_flags;
   95 #define TH_FIN  0x01
   96 #define TH_SYN  0x02
   97 #define TH_RST  0x04
   98 #define TH_PUSH 0x08
   99 #define TH_ACK  0x10
  100 #define TH_URG  0x20
  101 #define TH_ECE  0x40
  102 #define TH_CWR  0x80
  103 #define TH_FLAGS        (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
  104 
  105         unsigned short  th_win;         /* window */
  106         unsigned short  th_sum;         /* checksum */
  107         unsigned short  th_urp;         /* urgent pointer */
  108 };
  109 
  110 #define TCPOPT_EOL              0
  111 #define TCPOPT_NOP              1
  112 #define TCPOPT_MAXSEG           2
  113 #define TCPOLEN_MAXSEG          4
  114 #define TCPOPT_WINDOW           3
  115 #define TCPOLEN_WINDOW          3
  116 #define TCPOPT_SACK_PERMITTED   4               /* Experimental */
  117 #define TCPOLEN_SACK_PERMITTED  2
  118 #define TCPOPT_SACK             5               /* Experimental */
  119 #define TCPOLEN_SACK            8               /* len of sack block */
  120 #define TCPOPT_TIMESTAMP        8
  121 #define TCPOLEN_TIMESTAMP       10
  122 #define TCPOLEN_TSTAMP_APPA             (TCPOLEN_TIMESTAMP+2) /* appendix A */
  123 #define TCPOPT_TSTAMP_HDR               \
  124     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
  125 
  126 #define MAX_TCPOPTLEN           40      /* Absolute maximum TCP options len */
  127 
  128 #define TCPOPT_CC               11              /* CC options: RFC-1644 */
  129 #define TCPOPT_CCNEW            12
  130 #define TCPOPT_CCECHO           13
  131 #define    TCPOLEN_CC                   6
  132 #define    TCPOLEN_CC_APPA              (TCPOLEN_CC+2)
  133 #define    TCPOPT_CC_HDR(ccopt)         \
  134     (TCPOPT_NOP<<24|TCPOPT_NOP<<16|(ccopt)<<8|TCPOLEN_CC)
  135 #define TCPOPT_SIGNATURE                19      /* Keyed MD5: RFC 2385 */
  136 #define    TCPOLEN_SIGNATURE            18
  137 
  138 /* Option definitions */
  139 #define TCPOPT_SACK_PERMIT_HDR  \
  140 (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_SACK_PERMITTED<<8|TCPOLEN_SACK_PERMITTED)
  141 #define TCPOPT_SACK_HDR         (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_SACK<<8)
  142 /* Miscellaneous constants */
  143 #define MAX_SACK_BLKS   6       /* Max # SACK blocks stored at sender side */
  144 #define TCP_MAX_SACK    3       /* MAX # SACKs sent in any segment */
  145 
  146 
  147 /*
  148  * Default maximum segment size for TCP.
  149  * With an IP MTU of 576, this is 536,
  150  * but 512 is probably more convenient.
  151  * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
  152  */
  153 #define TCP_MSS 512
  154 
  155 /*
  156  * TCP_MINMSS is defined to be 216 which is fine for the smallest
  157  * link MTU (256 bytes, SLIP interface) in the Internet.
  158  * However it is very unlikely to come across such low MTU interfaces
  159  * these days (anno dato 2004).
  160  * Probably it can be set to 512 without ill effects. But we play safe.
  161  * See tcp_subr.c tcp_minmss SYSCTL declaration for more comments.
  162  * Setting this to "" disables the minmss check.
  163  */
  164 #define TCP_MINMSS 216
  165 
  166 /*
  167  * TCP_MINMSSOVERLOAD is defined to be 1000 which should cover any type
  168  * of interactive TCP session.
  169  * See tcp_subr.c tcp_minmssoverload SYSCTL declaration and tcp_input.c
  170  * for more comments.
  171  * Setting this to "" disables the minmssoverload check.
  172  */
  173 #define TCP_MINMSSOVERLOAD 1000
  174 
  175 /*
  176  * Default maximum segment size for TCP6.
  177  * With an IP6 MSS of 1280, this is 1220,
  178  * but 1024 is probably more convenient. (xxx kazu in doubt)
  179  * This should be defined as MIN(1024, IP6_MSS - sizeof (struct tcpip6hdr))
  180  */
  181 #define TCP6_MSS        1024
  182 
  183 #define TCP_MAXWIN      65535   /* largest value for (unscaled) window */
  184 #define TTCP_CLIENT_SND_WND     4096    /* dflt send window for T/TCP client */
  185 
  186 #define TCP_MAX_WINSHIFT        14      /* maximum window shift */
  187 
  188 #define TCP_MAXHLEN     (0xf<<2)        /* max length of header in bytes */
  189 #define TCP_MAXOLEN     (TCP_MAXHLEN - sizeof(struct tcphdr))
  190                                         /* max space left for options */
  191 #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
  192 
  193 /*
  194  * User-settable options (used with setsockopt).
  195  */
  196 #define TCP_NODELAY             0x01    /* don't delay send to coalesce packets */
  197 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  198 #define TCP_MAXSEG              0x02    /* set maximum segment size */
  199 #define TCP_NOPUSH              0x04    /* don't push last block of write */
  200 #define TCP_NOOPT               0x08    /* don't use TCP options */
  201 #define TCP_KEEPALIVE           0x10    /* idle time used when SO_KEEPALIVE is enabled */
  202 #define TCP_CONNECTIONTIMEOUT   0x20    /* connection timeout */
  203 #define PERSIST_TIMEOUT         0x40    /* time after which a connection in
  204                                          *  persist timeout will terminate.
  205                                          *  see draft-ananth-tcpm-persist-02.txt
  206                                          */
  207 #define TCP_RXT_CONNDROPTIME    0x80    /* time after which tcp retransmissions will be 
  208                                          * stopped and the connection will be dropped
  209                                          */
  210 #define TCP_RXT_FINDROP 0x100   /* when this option is set, drop a connection 
  211                                          * after retransmitting the FIN 3 times. It will
  212                                          * prevent holding too many mbufs in socket 
  213                                          * buffer queues.
  214                                          */
  215 #ifdef PRIVATE
  216 #define TCP_INFO                0x200   /* retrieve tcp_info structure */
  217 #define TCP_NOTSENT_LOWAT       0x201   /* Low water mark for TCP unsent data */
  218 #define TCP_MEASURE_SND_BW      0x202   /* Measure sender's bandwidth for this connection */
  219 #define TCP_MEASURE_BW_BURST    0x203   /* Burst size to use for bandwidth measurement */
  220 #define TCP_PEER_PID            0x204   /* Lookup pid of the process we're connected to */
  221 /*
  222  * The TCP_INFO socket option is a private API and is subject to change
  223  */
  224 #pragma pack(4)
  225 
  226 #define TCPI_OPT_TIMESTAMPS     0x01
  227 #define TCPI_OPT_SACK           0x02
  228 #define TCPI_OPT_WSCALE         0x04
  229 #define TCPI_OPT_ECN            0x08
  230 
  231 #define TCPI_FLAG_LOSSRECOVERY  0x01    /* Currently in loss recovery */
  232 
  233 struct tcp_info {
  234         u_int8_t        tcpi_state;                     /* TCP FSM state. */
  235         u_int8_t        tcpi_options;           /* Options enabled on conn. */
  236         u_int8_t        tcpi_snd_wscale;        /* RFC1323 send shift value. */
  237         u_int8_t        tcpi_rcv_wscale;        /* RFC1323 recv shift value. */
  238 
  239         u_int32_t       tcpi_flags;                     /* extra flags (TCPI_FLAG_xxx) */
  240 
  241         u_int32_t       tcpi_rto;                       /* Retransmission timeout in milliseconds */
  242         u_int32_t       tcpi_snd_mss;           /* Max segment size for send. */
  243         u_int32_t       tcpi_rcv_mss;           /* Max segment size for receive. */
  244 
  245         u_int32_t       tcpi_rttcur;            /* Most recent value of RTT */
  246         u_int32_t       tcpi_srtt;                      /* Smoothed RTT */
  247         u_int32_t       tcpi_rttvar;            /* RTT variance */
  248 
  249         u_int32_t       tcpi_snd_ssthresh;      /* Slow start threshold. */
  250         u_int32_t       tcpi_snd_cwnd;          /* Send congestion window. */
  251 
  252         u_int32_t       tcpi_rcv_space;         /* Advertised recv window. */
  253 
  254         u_int32_t       tcpi_snd_wnd;           /* Advertised send window. */
  255         u_int32_t       tcpi_snd_nxt;           /* Next egress seqno */
  256         u_int32_t       tcpi_rcv_nxt;           /* Next ingress seqno */
  257         
  258         int32_t         tcpi_last_outif;        /* if_index of interface used to send last */
  259         u_int32_t       tcpi_snd_sbbytes;       /* bytes in snd buffer including data inflight */
  260         
  261         u_int64_t       tcpi_txbytes __attribute__((aligned(8)));
  262                                                                         /* total bytes sent */  
  263         u_int64_t       tcpi_txretransmitbytes __attribute__((aligned(8)));
  264                                                                         /* total bytes retransmitted */ 
  265         u_int64_t       tcpi_txunacked __attribute__((aligned(8)));
  266                                                                         /* current number of bytes not acknowledged */  
  267         u_int64_t       tcpi_rxbytes __attribute__((aligned(8)));
  268                                                                         /* total bytes received */
  269         u_int64_t       tcpi_rxduplicatebytes __attribute__((aligned(8)));
  270                                                                         /* total duplicate bytes received */
  271         u_int64_t       tcpi_snd_bw __attribute__((aligned(8)));                /* measured send bandwidth in bits/sec */
  272 };
  273 
  274 struct tcp_measure_bw_burst {
  275         u_int32_t       min_burst_size; /* Minimum number of packets to use */
  276         u_int32_t       max_burst_size; /* Maximum number of packets to use */
  277 };
  278 
  279 /*
  280  * Note that IPv6 link local addresses should have the appropriate scope ID
  281  */
  282 
  283 struct info_tuple {
  284         u_int8_t        itpl_proto;
  285         union {
  286                 struct sockaddr         _itpl_sa;
  287                 struct sockaddr_in      _itpl_sin;
  288                 struct sockaddr_in6     _itpl_sin6;
  289         } itpl_localaddr;
  290         union {
  291                 struct sockaddr         _itpl_sa;
  292                 struct sockaddr_in      _itpl_sin;
  293                 struct sockaddr_in6     _itpl_sin6;
  294         } itpl_remoteaddr;
  295 };
  296 
  297 #define itpl_local_sa           itpl_localaddr._itpl_sa
  298 #define itpl_local_sin          itpl_localaddr._itpl_sin
  299 #define itpl_local_sin6         itpl_localaddr._itpl_sin6
  300 #define itpl_remote_sa          itpl_remoteaddr._itpl_sa
  301 #define itpl_remote_sin         itpl_remoteaddr._itpl_sin
  302 #define itpl_remote_sin6        itpl_remoteaddr._itpl_sin6
  303 
  304 #pragma pack()
  305 
  306 #endif /* PRIVATE */
  307 #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
  308 
  309 #endif

Cache object: f5f98e81a09463e67f45e17d2f437a56


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.