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