VirtualBox

source: vbox/trunk/src/VBox/Devices/Network/slirp/tcp_timer.h@ 1033

Last change on this file since 1033 was 1033, checked in by vboxsync, 18 years ago

Big change to make slirp fully instantiatable (replace all global
variables with local ones, passing a reference to the state/config
structure to all places which are interested). You can now have as many
cards in the guest configured for NAT networking as you want.

  • Property svn:eol-style set to native
File size: 6.3 KB
Line 
1/*
2 * Copyright (c) 1982, 1986, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)tcp_timer.h 8.1 (Berkeley) 6/10/93
34 * tcp_timer.h,v 1.4 1994/08/21 05:27:38 paul Exp
35 */
36
37#ifndef _TCP_TIMER_H_
38#define _TCP_TIMER_H_
39
40/*
41 * Definitions of the TCP timers. These timers are counted
42 * down PR_SLOWHZ times a second.
43 */
44#define TCPT_NTIMERS 4
45
46#define TCPT_REXMT 0 /* retransmit */
47#define TCPT_PERSIST 1 /* retransmit persistence */
48#define TCPT_KEEP 2 /* keep alive */
49#define TCPT_2MSL 3 /* 2*msl quiet time timer */
50
51/*
52 * The TCPT_REXMT timer is used to force retransmissions.
53 * The TCP has the TCPT_REXMT timer set whenever segments
54 * have been sent for which ACKs are expected but not yet
55 * received. If an ACK is received which advances tp->snd_una,
56 * then the retransmit timer is cleared (if there are no more
57 * outstanding segments) or reset to the base value (if there
58 * are more ACKs expected). Whenever the retransmit timer goes off,
59 * we retransmit one unacknowledged segment, and do a backoff
60 * on the retransmit timer.
61 *
62 * The TCPT_PERSIST timer is used to keep window size information
63 * flowing even if the window goes shut. If all previous transmissions
64 * have been acknowledged (so that there are no retransmissions in progress),
65 * and the window is too small to bother sending anything, then we start
66 * the TCPT_PERSIST timer. When it expires, if the window is nonzero,
67 * we go to transmit state. Otherwise, at intervals send a single byte
68 * into the peer's window to force him to update our window information.
69 * We do this at most as often as TCPT_PERSMIN time intervals,
70 * but no more frequently than the current estimate of round-trip
71 * packet time. The TCPT_PERSIST timer is cleared whenever we receive
72 * a window update from the peer.
73 *
74 * The TCPT_KEEP timer is used to keep connections alive. If an
75 * connection is idle (no segments received) for TCPTV_KEEP_INIT amount of time,
76 * but not yet established, then we drop the connection. Once the connection
77 * is established, if the connection is idle for TCPTV_KEEP_IDLE time
78 * (and keepalives have been enabled on the socket), we begin to probe
79 * the connection. We force the peer to send us a segment by sending:
80 * <SEQ=SND.UNA-1><ACK=RCV.NXT><CTL=ACK>
81 * This segment is (deliberately) outside the window, and should elicit
82 * an ack segment in response from the peer. If, despite the TCPT_KEEP
83 * initiated segments we cannot elicit a response from a peer in TCPT_MAXIDLE
84 * amount of time probing, then we drop the connection.
85 */
86
87/*
88 * Time constants.
89 */
90#define TCPTV_MSL ( 5*PR_SLOWHZ) /* max seg lifetime (hah!) */
91
92#define TCPTV_SRTTBASE 0 /* base roundtrip time;
93 if 0, no idea yet */
94#define TCPTV_SRTTDFLT ( 3*PR_SLOWHZ) /* assumed RTT if no info */
95
96#define TCPTV_PERSMIN ( 5*PR_SLOWHZ) /* retransmit persistence */
97#define TCPTV_PERSMAX ( 60*PR_SLOWHZ) /* maximum persist interval */
98
99#define TCPTV_KEEP_INIT ( 75*PR_SLOWHZ) /* initial connect keep alive */
100#define TCPTV_KEEP_IDLE (120*60*PR_SLOWHZ) /* dflt time before probing */
101#define TCPTV_KEEPINTVL ( 75*PR_SLOWHZ) /* default probe interval */
102#define TCPTV_KEEPCNT 8 /* max probes before drop */
103
104#define TCPTV_MIN ( 1*PR_SLOWHZ) /* minimum allowable value */
105/* #define TCPTV_REXMTMAX ( 64*PR_SLOWHZ) */ /* max allowable REXMT value */
106#define TCPTV_REXMTMAX ( 12*PR_SLOWHZ) /* max allowable REXMT value */
107
108#define TCP_LINGERTIME 120 /* linger at most 2 minutes */
109
110#define TCP_MAXRXTSHIFT 12 /* maximum retransmits */
111
112
113#ifdef TCPTIMERS
114char *tcptimers[] =
115 { "REXMT", "PERSIST", "KEEP", "2MSL" };
116#endif
117
118/*
119 * Force a time value to be in a certain range.
120 */
121#define TCPT_RANGESET(tv, value, tvmin, tvmax) { \
122 (tv) = (value); \
123 if ((tv) < (tvmin)) \
124 (tv) = (tvmin); \
125 else if ((tv) > (tvmax)) \
126 (tv) = (tvmax); \
127}
128
129#ifndef VBOX
130extern int tcp_keepidle; /* time before keepalive probes begin */
131extern int tcp_keepintvl; /* time between keepalive probes */
132extern int tcp_maxidle; /* time to drop after starting probes */
133#endif /* !VBOX */
134extern int tcp_ttl; /* time to live for TCP segs */
135#ifdef VBOX
136extern const int tcp_backoff[];
137#else /* !VBOX */
138extern int tcp_backoff[];
139#endif /* !VBOX */
140
141struct tcpcb;
142
143#ifdef VBOX
144void tcp_fasttimo _P((PNATState));
145void tcp_slowtimo _P((PNATState));
146#else /* !VBOX */
147void tcp_fasttimo _P((void));
148void tcp_slowtimo _P((void));
149#endif /* !VBOX */
150void tcp_canceltimers _P((struct tcpcb *));
151#ifdef VBOX
152struct tcpcb * tcp_timers _P((PNATState, register struct tcpcb *, int));
153#else /* !VBOX */
154struct tcpcb * tcp_timers _P((register struct tcpcb *, int));
155#endif /* !VBOX */
156
157#endif
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette