📄 tcp_time.h
字号:
/***************************************************************************
*
* Copyright (c) 1993 READY SYSTEMS CORPORATION.
*
* All rights reserved. READY SYSTEMS' source code is an unpublished
* work and the use of a copyright notice does not imply otherwise.
* This source code contains confidential, trade secret material of
* READY SYSTEMS. Any attempt or participation in deciphering, decoding,
* reverse engineering or in any way altering the source code is
* strictly prohibited, unless the prior written consent of
* READY SYSTEMS is obtained.
*
*
* Module Name: tcp_time.h
*
* Identification: @(#) 1.3 tcp_time.h
*
* Date: 1/6/94 16:37:24
*
****************************************************************************
*/
/*
RCS header identifier - $Id: tcp_time.h,v 1.6 1993/10/05 18:08:52 robert Exp $
*/
/*
* Copyrighted as an unpublished work.
* (c) Copyright 1987-1993 Lachman Technology, Incorporated
* All rights reserved.
*
* RESTRICTED RIGHTS
*
* These programs are supplied under a license. They may be used,
* disclosed, and/or copied only as permitted under such license
* agreement. Any copy must contain the above copyright notice and
* this restricted rights notice. Use, copying, and/or disclosure
* of the programs is strictly prohibited unless otherwise provided
* in the license agreement.
*/
/*
* Copyright (c) 1982, 1986 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that this notice is preserved and that due credit is given
* to the University of California at Berkeley. The name of the University
* may not be used to endorse or promote products derived from this
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*
* @(#)tcp_timer.h 7.5 (Berkeley) 3/16/88
*/
#ifndef tcp_timer_h
#define tcp_timer_h
#ifdef __cplusplus
extern "C" {
#endif
/*
* Definitions of the TCP timers. These timers are counted down PR_SLOWHZ
* times a second.
*/
#define TCPT_NTIMERS 6
#define TCPT_REXMT 0 /* retransmit */
#define TCPT_PERSIST 1 /* retransmit persistance */
#define TCPT_KEEP 2 /* keep alive */
#define TCPT_2MSL 3 /* 2*msl quiet time timer */
#define TCPT_LINGER 4 /* linger on close imer */
#define TCPT_DEQUEUE 5 /* call tcp_calldeq() to send data upstream */
/*
* The TCPT_REXMT timer is used to force retransmissions. The TCP has the
* TCPT_REXMT timer set whenever segments have been sent for which ACKs are
* expected but not yet received. If an ACK is received which advances
* tp->snd_una, then the retransmit timer is cleared (if there are no more
* outstanding segments) or reset to the base value (if there are more ACKs
* expected). Whenever the retransmit timer goes off, we retransmit one
* unacknowledged segment, and do a backoff on the retransmit timer.
*
* The TCPT_PERSIST timer is used to keep window size information flowing even
* if the window goes shut. If all previous transmissions have been
* acknowledged (so that there are no retransmissions in progress), and the
* window is too small to bother sending anything, then we start the
* TCPT_PERSIST timer. When it expires, if the window is nonzero, we go to
* transmit state. Otherwise, at intervals send a single byte into the
* peer's window to force him to update our window information. We do this at
* most as often as TCPT_PERSMIN time intervals, but no more frequently than
* the current estimate of round-trip packet time. The TCPT_PERSIST timer is
* cleared whenever we receive a window update from the peer.
*
* The TCPT_KEEP timer is used to keep connections alive. If an
* connection is idle (no segments received) for TCPTV_KEEP_INIT amount of time,
* but not yet established, then we drop the connection. Once the connection
* is established, if the connection is idle for TCPTV_KEEP_IDLE time
* (and keepalives have been enabled on the socket), we begin to probe
* the connection. We force the peer to send us a segment by sending:
* <SEQ=SND.UNA-1><ACK=RCV.NXT><CTL=ACK>
* This segment is (deliberately) outside the window, and should elicit
* an ack segment in response from the peer. If, despite the TCPT_KEEP
* initiated segments we cannot elicit a response from a peer in TCPT_MAXIDLE
* amount of time probing, then we drop the connection.
*/
#define TCP_TTL 60 /* default time to live for TCP segs */
/*
* Time constants.
*/
#define TCPTV_MSL ( 30*PR_SLOWHZ) /* max seg lifetime (hah!) */
#define TCPTV_SRTTBASE 0 /* base roundtrip time;
if 0, no idea yet */
#define TCPTV_SRTTDFLT ( 3*PR_SLOWHZ) /* assumed RTT if no info */
#define TCPTV_PERSMIN ( 5*PR_SLOWHZ) /* retransmit persistance */
#define TCPTV_PERSMAX ( 60*PR_SLOWHZ) /* maximum persist interval */
#define TCPTV_KEEP_INIT ( 75*PR_SLOWHZ) /* initial connect keep alive */
#define TCPTV_KEEP_IDLE (120*60*PR_SLOWHZ) /* dflt time before probing */
#define TCPTV_KEEPINTVL ( 75*PR_SLOWHZ) /* default probe interval */
#define TCPTV_KEEPCNT 8 /* max probes before drop */
#define TCPTV_MIN ( 1*PR_SLOWHZ) /* minimum allowable value */
#define TCPTV_REXMTMAX ( 64*PR_SLOWHZ) /* max allowable REXMT value */
#define TCP_LINGERTIME 120 /* linger at most 2 minutes */
#define TCP_MAXRXTSHIFT 12 /* maximum retransmits */
#ifdef TCPTIMERS
STATIC char *tcptimers[] =
{"REXMT", "PERSIST", "KEEP", "2MSL", "LINGER", "DEQUEUE"};
#endif
/*
* Force a time value to be in a certain range.
*/
#define TCPT_RANGESET(tv, value, tvmin, tvmax) { \
(tv) = (value); \
if ((tv) < (tvmin)) \
(tv) = (tvmin); \
else if ((tv) > (tvmax)) \
(tv) = (tvmax); \
}
#ifdef KERNEL
extern int tcp_keepidle; /* time before keepalive probes begin */
extern int tcp_keepintvl; /* time between keepalive probes */
extern int tcp_maxidle; /* time to drop after starting probes */
extern int tcp_ttl; /* time to live for TCP segs */
extern int tcp_backoff[];
#endif
#ifdef __cplusplus
}
#endif
#endif /* tcp_timer_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -