|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1982, 1986, 1993, 1995
24: * The Regents of the University of California. All rights reserved.
25: *
26: * Redistribution and use in source and binary forms, with or without
27: * modification, are permitted provided that the following conditions
28: * are met:
29: * 1. Redistributions of source code must retain the above copyright
30: * notice, this list of conditions and the following disclaimer.
31: * 2. Redistributions in binary form must reproduce the above copyright
32: * notice, this list of conditions and the following disclaimer in the
33: * documentation and/or other materials provided with the distribution.
34: * 3. All advertising materials mentioning features or use of this software
35: * must display the following acknowledgement:
36: * This product includes software developed by the University of
37: * California, Berkeley and its contributors.
38: * 4. Neither the name of the University nor the names of its contributors
39: * may be used to endorse or promote products derived from this software
40: * without specific prior written permission.
41: *
42: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
43: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
46: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
48: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
49: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
50: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
51: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52: * SUCH DAMAGE.
53: *
54: * @(#)tcp_seq.h 8.3 (Berkeley) 6/21/95
55: */
56:
57: #ifndef _NETINET_TCP_SEQ_H_
58: #define _NETINET_TCP_SEQ_H_
59: /*
60: * TCP sequence numbers are 32 bit integers operated
61: * on with modular arithmetic. These macros can be
62: * used to compare such integers.
63: */
64: #define SEQ_LT(a,b) ((int)((a)-(b)) < 0)
65: #define SEQ_LEQ(a,b) ((int)((a)-(b)) <= 0)
66: #define SEQ_GT(a,b) ((int)((a)-(b)) > 0)
67: #define SEQ_GEQ(a,b) ((int)((a)-(b)) >= 0)
68:
69: /* for modulo comparisons of timestamps */
70: #define TSTMP_LT(a,b) ((int)((a)-(b)) < 0)
71: #define TSTMP_GEQ(a,b) ((int)((a)-(b)) >= 0)
72:
73: /*
74: * TCP connection counts are 32 bit integers operated
75: * on with modular arithmetic. These macros can be
76: * used to compare such integers.
77: */
78: #define CC_LT(a,b) ((int)((a)-(b)) < 0)
79: #define CC_LEQ(a,b) ((int)((a)-(b)) <= 0)
80: #define CC_GT(a,b) ((int)((a)-(b)) > 0)
81: #define CC_GEQ(a,b) ((int)((a)-(b)) >= 0)
82:
83: /* Macro to increment a CC: skip 0 which has a special meaning */
84: #define CC_INC(c) (++(c) == 0 ? ++(c) : (c))
85:
86: /*
87: * Macros to initialize tcp sequence numbers for
88: * send and receive from initial send and receive
89: * sequence numbers.
90: */
91: #define tcp_rcvseqinit(tp) \
92: (tp)->rcv_adv = (tp)->rcv_nxt = (tp)->irs + 1
93:
94: #define tcp_sendseqinit(tp) \
95: (tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \
96: (tp)->iss
97:
98: #define TCP_PAWS_IDLE (24 * 24 * 60 * 60 * PR_SLOWHZ)
99: /* timestamp wrap-around time */
100:
101: #ifdef KERNEL
102: extern tcp_cc tcp_ccgen; /* global connection count */
103:
104: /*
105: * Increment for tcp_iss each second.
106: * This is designed to increment at the standard 250 KB/s,
107: * but with a random component averaging 128 KB.
108: * We also increment tcp_iss by a quarter of this amount
109: * each time we use the value for a new connection.
110: * If defined, the tcp_random18() macro should produce a
111: * number in the range [0-0x3ffff] that is hard to predict.
112: */
113: #ifndef tcp_random18
114: #define tcp_random18() ((random() >> 14) & 0x3ffff)
115: #endif
116: #define TCP_ISSINCR (122*1024 + tcp_random18())
117:
118: extern tcp_seq tcp_iss; /* tcp initial send seq # */
119: #else
120: #define TCP_ISSINCR (250*1024) /* increment for tcp_iss each second */
121: #endif /* KERNEL */
122: #endif /* _NETINET_TCP_SEQ_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.