X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/9a08dbb8bf08b732e217a3407613bb4913e5ef5c..986fd057089c0c3c193084e22eee9f05c565b9bb:/usr/src/sys/netinet/tcp_timer.h diff --git a/usr/src/sys/netinet/tcp_timer.h b/usr/src/sys/netinet/tcp_timer.h index 293bfba384..0cfe73af0d 100644 --- a/usr/src/sys/netinet/tcp_timer.h +++ b/usr/src/sys/netinet/tcp_timer.h @@ -1,9 +1,20 @@ /* * Copyright (c) 1982, 1986 Regents of the University of California. - * All rights reserved. The Berkeley software License Agreement - * specifies the terms and conditions for redistribution. + * All rights reserved. * - * @(#)tcp_timer.h 7.2 (Berkeley) %G% + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, 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'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * @(#)tcp_timer.h 7.6 (Berkeley) %G% */ /* @@ -41,34 +52,37 @@ * 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 amount of time, - * but not yet established, then we drop the connection. If the connection - * is established, then we force the peer to send us a segment by sending: + * 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: * * 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, then we drop the connection. + * amount of time probing, then we drop the connection. */ #define TCP_TTL 30 /* default time to live for TCP segs */ -int tcp_ttl; /* time to live for TCP segs */ /* * Time constants. */ -#define TCPTV_MSL ( 15*PR_SLOWHZ) /* max seg lifetime */ +#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_KEEP ( 45*PR_SLOWHZ) /* keep alive - 45 secs */ #define TCPTV_PERSMIN ( 5*PR_SLOWHZ) /* retransmit persistance */ +#define TCPTV_PERSMAX ( 60*PR_SLOWHZ) /* maximum persist interval */ -#define TCPTV_MAXIDLE ( 8*TCPTV_KEEP) /* maximum allowable idle - time before drop conn */ +#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_MAX ( 30*PR_SLOWHZ) /* maximum allowable value */ +#define TCPTV_REXMTMAX ( 64*PR_SLOWHZ) /* max allowable REXMT value */ #define TCP_LINGERTIME 120 /* linger at most 2 minutes */ @@ -79,26 +93,6 @@ char *tcptimers[] = { "REXMT", "PERSIST", "KEEP", "2MSL" }; #endif -/* - * Retransmission smoothing constants. - * Smoothed round trip time is updated by - * tp->t_srtt = (tcp_alpha * tp->t_srtt) + ((1 - tcp_alpha) * tp->t_rtt) - * each time a new value of tp->t_rtt is available. The initial - * retransmit timeout is then based on - * tp->t_timer[TCPT_REXMT] = tcp_beta * tp->t_srtt; - * limited, however to be at least TCPTV_MIN and at most TCPTV_MAX. - */ -float tcp_alpha, tcp_beta; - -/* - * Initial values of tcp_alpha and tcp_beta. - * These are conservative: averaging over a long - * period of time, and allowing for large individual deviations from - * tp->t_srtt. - */ -#define TCP_ALPHA 0.9 -#define TCP_BETA 2.0 - /* * Force a time value to be in a certain range. */ @@ -106,6 +100,14 @@ float tcp_alpha, tcp_beta; (tv) = (value); \ if ((tv) < (tvmin)) \ (tv) = (tvmin); \ - if ((tv) > (tvmax)) \ + 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