1 | /*␊ |
2 | * Copyright (c) 2000-2004 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 "0" 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 "0" 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_MAXBURST␉␉4 ␉/* maximum segments in a burst */␊ |
189 | ␊ |
190 | #define TCP_MAXHLEN␉(0xf<<2)␉/* max length of header in bytes */␊ |
191 | #define TCP_MAXOLEN␉(TCP_MAXHLEN - sizeof(struct tcphdr))␊ |
192 | ␉␉␉␉␉/* max space left for options */␊ |
193 | #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */␊ |
194 | ␊ |
195 | /*␊ |
196 | * User-settable options (used with setsockopt).␊ |
197 | */␊ |
198 | #define␉TCP_NODELAY 0x01 /* don't delay send to coalesce packets */␊ |
199 | #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)␊ |
200 | #define␉TCP_MAXSEG 0x02 /* set maximum segment size */␊ |
201 | #define TCP_NOPUSH 0x04 /* don't push last block of write */␊ |
202 | #define TCP_NOOPT 0x08 /* don't use TCP options */␊ |
203 | #define TCP_KEEPALIVE 0x10 /* idle time used when SO_KEEPALIVE is enabled */␊ |
204 | #define TCP_CONNECTIONTIMEOUT 0x20 /* connection timeout */␊ |
205 | #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */␊ |
206 | ␊ |
207 | #endif␊ |
208 | |