Ensure that TCP_REXMTVAL doesn't return a value less than t_rttmin. This
is believed to have been broken with the Brakmo/Peterson srtt calculation changes. The result of this bug is that TCP connections could time out extremely quickly (in 12 seconds). Also backed out jdp's partial fix for this problem in rev 1.17 of tcp_timer.c as it is obsoleted by this commit. Bug was pointed out by Kevin Lehey <kml@roller.nas.nasa.gov>. PR: 6068
This commit is contained in:
parent
1667f2b3e5
commit
552b7df4c1
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)tcp_timer.c 8.2 (Berkeley) 5/24/95
|
||||
* $Id: tcp_timer.c,v 1.26 1998/02/26 05:25:33 dg Exp $
|
||||
* $Id: tcp_timer.c,v 1.27 1998/04/06 06:52:46 phk Exp $
|
||||
*/
|
||||
|
||||
#include "opt_compat.h"
|
||||
@ -308,17 +308,12 @@ tcp_timers(tp, timer)
|
||||
* (no responses to probes) reaches the maximum
|
||||
* backoff that we would use if retransmitting.
|
||||
*/
|
||||
if (tp->t_rxtshift == TCP_MAXRXTSHIFT) {
|
||||
u_long maxidle = TCP_REXMTVAL(tp);
|
||||
if (maxidle < tp->t_rttmin)
|
||||
maxidle = tp->t_rttmin;
|
||||
maxidle *= tcp_totbackoff;
|
||||
if (tp->t_idle >= tcp_maxpersistidle ||
|
||||
tp->t_idle >= maxidle) {
|
||||
tcpstat.tcps_persistdrop++;
|
||||
tp = tcp_drop(tp, ETIMEDOUT);
|
||||
break;
|
||||
}
|
||||
if (tp->t_rxtshift == TCP_MAXRXTSHIFT &&
|
||||
(tp->t_idle >= tcp_maxpersistidle ||
|
||||
tp->t_idle >= TCP_REXMTVAL(tp) * tcp_totbackoff)) {
|
||||
tcpstat.tcps_persistdrop++;
|
||||
tp = tcp_drop(tp, ETIMEDOUT);
|
||||
break;
|
||||
}
|
||||
tcp_setpersist(tp);
|
||||
tp->t_force = 1;
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)tcp_var.h 8.4 (Berkeley) 5/24/95
|
||||
* $Id: tcp_var.h,v 1.41 1998/02/26 05:25:39 dg Exp $
|
||||
* $Id: tcp_var.h,v 1.42 1998/04/06 06:52:47 phk Exp $
|
||||
*/
|
||||
|
||||
#ifndef _NETINET_TCP_VAR_H_
|
||||
@ -203,7 +203,7 @@ struct rmxp_tao {
|
||||
* fast networks.
|
||||
*/
|
||||
#define TCP_REXMTVAL(tp) \
|
||||
((((tp)->t_srtt >> (TCP_RTT_SHIFT - TCP_DELTA_SHIFT)) \
|
||||
max((tp)->t_rttmin, (((tp)->t_srtt >> (TCP_RTT_SHIFT - TCP_DELTA_SHIFT)) \
|
||||
+ (tp)->t_rttvar) >> TCP_DELTA_SHIFT)
|
||||
|
||||
/* XXX
|
||||
|
Loading…
x
Reference in New Issue
Block a user