- TCPT_RANGESET(tp->t_timer[TCPT_REXMT],
- (int)tp->t_srtt, TCPTV_MIN, TCPTV_MAX);
- TCPT_RANGESET(tp->t_timer[TCPT_REXMT],
- tp->t_timer[TCPT_REXMT] << tp->t_rxtshift,
- TCPTV_MIN, TCPTV_MAX);
-if (tcprexmtprint)
-printf("rexmt set to %d\n", tp->t_timer[TCPT_REXMT]);
+ if (tp->t_srtt == 0)
+ rexmt = tcp_beta * TCPTV_SRTTDFLT;
+ else
+ rexmt = (int)(tcp_beta * tp->t_srtt);
+ rexmt *= tcp_backoff[tp->t_rxtshift - 1];
+ TCPT_RANGESET(tp->t_timer[TCPT_REXMT], rexmt,
+ TCPTV_MIN, TCPTV_MAX);
+ /*
+ * If losing, let the lower level know
+ * and try for a better route.
+ */
+ if (tp->t_rxtshift >= TCP_MAXRXTSHIFT / 4 ||
+ rexmt >= 10 * PR_SLOWHZ)
+ in_losing(tp->t_inpcb);