symbian-qemu-0.9.1-12/qemu-symbian-svp/slirp/tcp_timer.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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
       
   114 char *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 extern const int tcp_backoff[];
       
   130 
       
   131 struct tcpcb;
       
   132 
       
   133 void tcp_fasttimo _P((void));
       
   134 void tcp_slowtimo _P((void));
       
   135 void tcp_canceltimers _P((struct tcpcb *));
       
   136 
       
   137 #endif