| 542 | } |
| 543 | |
| 544 | static uint32_t |
| 545 | bbr_get_persists_timer_val(struct tcpcb *tp, struct tcp_bbr *bbr) |
| 546 | { |
| 547 | uint64_t srtt, var; |
| 548 | uint64_t ret_val; |
| 549 | |
| 550 | bbr->r_ctl.rc_hpts_flags |= PACE_TMR_PERSIT; |
| 551 | if (tp->t_srtt == 0) { |
| 552 | srtt = (uint64_t)BBR_INITIAL_RTO; |
| 553 | var = 0; |
| 554 | } else { |
| 555 | srtt = ((uint64_t)TICKS_2_USEC(tp->t_srtt) >> TCP_RTT_SHIFT); |
| 556 | var = ((uint64_t)TICKS_2_USEC(tp->t_rttvar) >> TCP_RTT_SHIFT); |
| 557 | } |
| 558 | TCPT_RANGESET_NOSLOP(ret_val, ((srtt + var) * tcp_backoff[tp->t_rxtshift]), |
| 559 | bbr_persist_min, bbr_persist_max); |
| 560 | return ((uint32_t)ret_val); |
| 561 | } |
| 562 | |
| 563 | static uint32_t |
| 564 | bbr_timer_start(struct tcpcb *tp, struct tcp_bbr *bbr, uint32_t cts) |