Lines Matching full:tp

291 tcp_output_locked(struct tcpcb *tp)  in tcp_output_locked()  argument
295 INP_WLOCK_ASSERT(tptoinpcb(tp)); in tcp_output_locked()
297 if ((rv = tp->t_fb->tfb_tcp_output(tp)) < 0) { in tcp_output_locked()
298 KASSERT(tp->t_fb->tfb_flags & TCP_FUNC_OUTPUT_CANDROP, in tcp_output_locked()
300 tp->t_fb->tfb_tcp_block_name, tp)); in tcp_output_locked()
301 tp = tcp_drop(tp, -rv); in tcp_output_locked()
304 return (tp != NULL); in tcp_output_locked()
308 tcp_timer_delack(struct tcpcb *tp) in tcp_timer_delack() argument
312 struct inpcb *inp = tptoinpcb(tp); in tcp_timer_delack()
319 tp->t_flags |= TF_ACKNOW; in tcp_timer_delack()
322 rv = tcp_output_locked(tp); in tcp_timer_delack()
330 tcp_timer_2msl(struct tcpcb *tp) in tcp_timer_2msl() argument
332 struct inpcb *inp = tptoinpcb(tp); in tcp_timer_2msl()
337 TCP_PROBE2(debug__user, tp, PRU_SLOWTIMO); in tcp_timer_2msl()
339 tcp_log_end_status(tp, TCP_EI_STATUS_2MSL); in tcp_timer_2msl()
340 tcp_free_sackholes(tp); in tcp_timer_2msl()
353 if (tp->t_state == TCPS_TIME_WAIT) { in tcp_timer_2msl()
355 } else if (tp->t_state == TCPS_FIN_WAIT_2 && in tcp_timer_2msl()
361 if (ticks - tp->t_rcvtime <= TP_MAXIDLE(tp)) in tcp_timer_2msl()
362 tcp_timer_activate(tp, TT_2MSL, TP_KEEPINTVL(tp)); in tcp_timer_2msl()
370 tp = tcp_close(tp); in tcp_timer_2msl()
375 return (tp != NULL); in tcp_timer_2msl()
379 tcp_timer_keep(struct tcpcb *tp) in tcp_timer_keep() argument
382 struct inpcb *inp = tptoinpcb(tp); in tcp_timer_keep()
387 TCP_PROBE2(debug__user, tp, PRU_SLOWTIMO); in tcp_timer_keep()
395 if (TCPS_HAVEESTABLISHED(tp->t_state)) { in tcp_timer_keep()
398 idletime = ticks - tp->t_rcvtime; in tcp_timer_keep()
399 if (idletime < TP_KEEPIDLE(tp)) { in tcp_timer_keep()
400 tcp_timer_activate(tp, TT_KEEP, in tcp_timer_keep()
401 TP_KEEPIDLE(tp) - idletime); in tcp_timer_keep()
412 if (tp->t_state < TCPS_ESTABLISHED) in tcp_timer_keep()
416 tp->t_state <= TCPS_CLOSING) { in tcp_timer_keep()
417 if (ticks - tp->t_rcvtime >= TP_KEEPIDLE(tp) + TP_MAXIDLE(tp)) in tcp_timer_keep()
425 * Using sequence number tp->snd_una-1 in tcp_timer_keep()
435 tcp_respond(tp, t_template->tt_ipgen, in tcp_timer_keep()
437 tp->rcv_nxt, tp->snd_una - 1, 0); in tcp_timer_keep()
441 tcp_timer_activate(tp, TT_KEEP, TP_KEEPINTVL(tp)); in tcp_timer_keep()
443 tcp_timer_activate(tp, TT_KEEP, TP_KEEPIDLE(tp)); in tcp_timer_keep()
451 tcp_log_end_status(tp, TCP_EI_STATUS_KEEP_MAX); in tcp_timer_keep()
452 tp = tcp_drop(tp, ETIMEDOUT); in tcp_timer_keep()
456 return (tp != NULL); in tcp_timer_keep()
464 tcp_maxunacktime_check(struct tcpcb *tp) in tcp_maxunacktime_check() argument
468 if (TP_MAXUNACKTIME(tp) == 0) in tcp_maxunacktime_check()
472 if (tp->t_acktime == 0) in tcp_maxunacktime_check()
476 if (TSTMP_GT(TP_MAXUNACKTIME(tp) + tp->t_acktime, (u_int)ticks)) in tcp_maxunacktime_check()
485 tcp_timer_persist(struct tcpcb *tp) in tcp_timer_persist() argument
489 struct inpcb *inp = tptoinpcb(tp); in tcp_timer_persist()
495 TCP_PROBE2(debug__user, tp, PRU_SLOWTIMO); in tcp_timer_persist()
511 progdrop = tcp_maxunacktime_check(tp); in tcp_timer_persist()
512 if (progdrop || (tp->t_rxtshift >= V_tcp_retries && in tcp_timer_persist()
513 (ticks - tp->t_rcvtime >= tcp_maxpersistidle || in tcp_timer_persist()
514 ticks - tp->t_rcvtime >= TCP_REXMTVAL(tp) * tcp_totbackoff))) { in tcp_timer_persist()
516 tcp_log_end_status(tp, TCP_EI_STATUS_PROGRESS); in tcp_timer_persist()
519 tcp_log_end_status(tp, TCP_EI_STATUS_PERSIST_MAX); in tcp_timer_persist()
527 if (tp->t_state > TCPS_CLOSE_WAIT && in tcp_timer_persist()
528 (ticks - tp->t_rcvtime) >= TCPTV_PERSMAX) { in tcp_timer_persist()
530 tcp_log_end_status(tp, TCP_EI_STATUS_PERSIST_MAX); in tcp_timer_persist()
533 tcp_setpersist(tp); in tcp_timer_persist()
534 tp->t_flags |= TF_FORCEDATA; in tcp_timer_persist()
536 if ((rv = tcp_output_locked(tp))) in tcp_timer_persist()
537 tp->t_flags &= ~TF_FORCEDATA; in tcp_timer_persist()
545 tp = tcp_drop(tp, ETIMEDOUT); in tcp_timer_persist()
549 return (tp != NULL); in tcp_timer_persist()
553 tcp_timer_rexmt(struct tcpcb *tp) in tcp_timer_rexmt() argument
556 struct inpcb *inp = tptoinpcb(tp); in tcp_timer_rexmt()
562 TCP_PROBE2(debug__user, tp, PRU_SLOWTIMO); in tcp_timer_rexmt()
564 if (tp->t_fb->tfb_tcp_rexmit_tmr) { in tcp_timer_rexmt()
566 (*tp->t_fb->tfb_tcp_rexmit_tmr)(tp); in tcp_timer_rexmt()
577 if (++tp->t_rxtshift > V_tcp_retries || tcp_maxunacktime_check(tp)) { in tcp_timer_rexmt()
578 if (tp->t_rxtshift > V_tcp_retries) in tcp_timer_rexmt()
580 tp->t_rxtshift = V_tcp_retries; in tcp_timer_rexmt()
581 tcp_log_end_status(tp, TCP_EI_STATUS_RETRAN); in tcp_timer_rexmt()
583 tp = tcp_drop(tp, ETIMEDOUT); in tcp_timer_rexmt()
587 return (tp != NULL); in tcp_timer_rexmt()
589 if (tp->t_state == TCPS_SYN_SENT) { in tcp_timer_rexmt()
594 tp->snd_cwnd = 1; in tcp_timer_rexmt()
595 } else if (tp->t_rxtshift == 1) { in tcp_timer_rexmt()
605 tp->snd_cwnd_prev = tp->snd_cwnd; in tcp_timer_rexmt()
606 tp->snd_ssthresh_prev = tp->snd_ssthresh; in tcp_timer_rexmt()
607 tp->snd_recover_prev = tp->snd_recover; in tcp_timer_rexmt()
608 if (IN_FASTRECOVERY(tp->t_flags)) in tcp_timer_rexmt()
609 tp->t_flags |= TF_WASFRECOVERY; in tcp_timer_rexmt()
611 tp->t_flags &= ~TF_WASFRECOVERY; in tcp_timer_rexmt()
612 if (IN_CONGRECOVERY(tp->t_flags)) in tcp_timer_rexmt()
613 tp->t_flags |= TF_WASCRECOVERY; in tcp_timer_rexmt()
615 tp->t_flags &= ~TF_WASCRECOVERY; in tcp_timer_rexmt()
616 if ((tp->t_flags & TF_RCVD_TSTMP) == 0) in tcp_timer_rexmt()
617 tp->t_badrxtwin = ticks + (tp->t_srtt >> (TCP_RTT_SHIFT + 1)); in tcp_timer_rexmt()
622 tp->t_flags |= TF_PREVVALID; in tcp_timer_rexmt()
623 tcp_resend_sackholes(tp); in tcp_timer_rexmt()
625 tp->t_flags &= ~TF_PREVVALID; in tcp_timer_rexmt()
626 tcp_free_sackholes(tp); in tcp_timer_rexmt()
629 if ((tp->t_state == TCPS_SYN_SENT) || in tcp_timer_rexmt()
630 (tp->t_state == TCPS_SYN_RECEIVED)) in tcp_timer_rexmt()
631 rexmt = tcp_rexmit_initial * tcp_backoff[tp->t_rxtshift]; in tcp_timer_rexmt()
633 rexmt = TCP_REXMTVAL(tp) * tcp_backoff[tp->t_rxtshift]; in tcp_timer_rexmt()
634 TCPT_RANGESET(tp->t_rxtcur, rexmt, tp->t_rttmin, tcp_rexmit_max); in tcp_timer_rexmt()
651 ((tp->t_state == TCPS_ESTABLISHED) || in tcp_timer_rexmt()
652 (tp->t_state == TCPS_FIN_WAIT_1))) { in tcp_timer_rexmt()
653 if (tp->t_rxtshift == 1) { in tcp_timer_rexmt()
662 tp->t_blackhole_enter = 2; in tcp_timer_rexmt()
663 tp->t_blackhole_exit = tp->t_blackhole_enter; in tcp_timer_rexmt()
666 if (tp->t_maxseg > V_tcp_v6pmtud_blackhole_mss) in tcp_timer_rexmt()
667 tp->t_blackhole_exit += 2; in tcp_timer_rexmt()
668 if (tp->t_maxseg > V_tcp_v6mssdflt && in tcp_timer_rexmt()
670 tp->t_blackhole_exit += 2; in tcp_timer_rexmt()
674 if (tp->t_maxseg > V_tcp_pmtud_blackhole_mss) in tcp_timer_rexmt()
675 tp->t_blackhole_exit += 2; in tcp_timer_rexmt()
676 if (tp->t_maxseg > V_tcp_mssdflt && in tcp_timer_rexmt()
678 tp->t_blackhole_exit += 2; in tcp_timer_rexmt()
682 if (((tp->t_flags2 & (TF2_PLPMTU_PMTUD|TF2_PLPMTU_MAXSEGSNT)) == in tcp_timer_rexmt()
684 (tp->t_rxtshift >= tp->t_blackhole_enter && in tcp_timer_rexmt()
685 tp->t_rxtshift < tp->t_blackhole_exit && in tcp_timer_rexmt()
686 (tp->t_rxtshift - tp->t_blackhole_enter) % 2 == 0)) { in tcp_timer_rexmt()
693 if ((tp->t_flags2 & TF2_PLPMTU_BLACKHOLE) == 0) { in tcp_timer_rexmt()
695 tp->t_flags2 |= TF2_PLPMTU_BLACKHOLE; in tcp_timer_rexmt()
697 tp->t_pmtud_saved_maxseg = tp->t_maxseg; in tcp_timer_rexmt()
706 tp->t_maxseg > V_tcp_v6pmtud_blackhole_mss && in tcp_timer_rexmt()
709 tp->t_maxseg = V_tcp_v6pmtud_blackhole_mss; in tcp_timer_rexmt()
713 tp->t_maxseg = V_tcp_v6mssdflt; in tcp_timer_rexmt()
718 tp->t_flags2 &= ~TF2_PLPMTU_PMTUD; in tcp_timer_rexmt()
726 if (tp->t_maxseg > V_tcp_pmtud_blackhole_mss && in tcp_timer_rexmt()
729 tp->t_maxseg = V_tcp_pmtud_blackhole_mss; in tcp_timer_rexmt()
733 tp->t_maxseg = V_tcp_mssdflt; in tcp_timer_rexmt()
738 tp->t_flags2 &= ~TF2_PLPMTU_PMTUD; in tcp_timer_rexmt()
746 if (CC_ALGO(tp)->conn_init != NULL) in tcp_timer_rexmt()
747 CC_ALGO(tp)->conn_init(&tp->t_ccv); in tcp_timer_rexmt()
755 if ((tp->t_flags2 & TF2_PLPMTU_BLACKHOLE) && in tcp_timer_rexmt()
756 (tp->t_rxtshift >= tp->t_blackhole_exit)) { in tcp_timer_rexmt()
757 tp->t_flags2 |= TF2_PLPMTU_PMTUD; in tcp_timer_rexmt()
758 tp->t_flags2 &= ~TF2_PLPMTU_BLACKHOLE; in tcp_timer_rexmt()
759 tp->t_maxseg = tp->t_pmtud_saved_maxseg; in tcp_timer_rexmt()
760 if (tp->t_maxseg < V_tcp_mssdflt) { in tcp_timer_rexmt()
766 tp->t_flags2 |= TF2_PROC_SACK_PROHIBIT; in tcp_timer_rexmt()
768 tp->t_flags2 &= ~TF2_PROC_SACK_PROHIBIT; in tcp_timer_rexmt()
775 if (CC_ALGO(tp)->conn_init != NULL) in tcp_timer_rexmt()
776 CC_ALGO(tp)->conn_init(&tp->t_ccv); in tcp_timer_rexmt()
788 if (tcp_rexmit_drop_options && (tp->t_state == TCPS_SYN_SENT) && in tcp_timer_rexmt()
789 (tp->t_rxtshift == 3)) in tcp_timer_rexmt()
790 tp->t_flags &= ~(TF_REQ_SCALE|TF_REQ_TSTMP|TF_SACK_PERMIT); in tcp_timer_rexmt()
795 if (tp->t_rxtshift > TCP_RTT_INVALIDATE) { in tcp_timer_rexmt()
803 tp->snd_nxt = tp->snd_una; in tcp_timer_rexmt()
804 tp->snd_recover = tp->snd_max; in tcp_timer_rexmt()
808 tp->t_flags |= TF_ACKNOW; in tcp_timer_rexmt()
812 tp->t_rtttime = 0; in tcp_timer_rexmt()
815 if (tp->t_state != TCPS_SYN_SENT) in tcp_timer_rexmt()
816 cc_cong_signal(tp, NULL, CC_RTO); in tcp_timer_rexmt()
818 rv = tcp_output_locked(tp); in tcp_timer_rexmt()
826 tcp_bblog_timer(struct tcpcb *tp, tt_which which, tt_what what, uint32_t ticks) in tcp_bblog_timer() argument
831 INP_WLOCK_ASSERT(tptoinpcb(tp)); in tcp_bblog_timer()
832 if (tcp_bblogging_on(tp)) in tcp_bblog_timer()
833 lgb = tcp_log_event(tp, NULL, NULL, NULL, TCP_LOG_RTO, 0, 0, in tcp_bblog_timer()
855 tcp_timer_next(struct tcpcb *tp, sbintime_t *precision) in tcp_timer_next() argument
861 if (tp->t_timers[i] == SBT_MAX) in tcp_timer_next()
863 if (tp->t_timers[i] < after) { in tcp_timer_next()
864 after = tp->t_timers[i]; in tcp_timer_next()
867 before = MIN(before, tp->t_timers[i] + tp->t_precisions[i]); in tcp_timer_next()
878 struct tcpcb *tp = xtp; in tcp_timer_enter() local
879 struct inpcb *inp = tptoinpcb(tp); in tcp_timer_enter()
885 which = tcp_timer_next(tp, NULL); in tcp_timer_enter()
887 tp->t_timers[which] = SBT_MAX; in tcp_timer_enter()
888 tp->t_precisions[which] = 0; in tcp_timer_enter()
890 tcp_bblog_timer(tp, which, TT_PROCESSING, 0); in tcp_timer_enter()
891 if (tcp_timersw[which](tp)) { in tcp_timer_enter()
892 tcp_bblog_timer(tp, which, TT_PROCESSED, 0); in tcp_timer_enter()
893 if ((which = tcp_timer_next(tp, &precision)) != TT_N) { in tcp_timer_enter()
894 MPASS(tp->t_state > TCPS_CLOSED); in tcp_timer_enter()
895 callout_reset_sbt_on(&tp->t_callout, in tcp_timer_enter()
896 tp->t_timers[which], precision, tcp_timer_enter, in tcp_timer_enter()
897 tp, inp_to_cpuid(inp), C_ABSOLUTE); in tcp_timer_enter()
907 tcp_timer_activate(struct tcpcb *tp, tt_which which, u_int delta) in tcp_timer_activate() argument
909 struct inpcb *inp = tptoinpcb(tp); in tcp_timer_activate()
914 if (tp->t_flags & TF_TOE) in tcp_timer_activate()
919 MPASS(tp->t_state > TCPS_CLOSED); in tcp_timer_activate()
924 &tp->t_timers[which], &tp->t_precisions[which]); in tcp_timer_activate()
927 tp->t_timers[which] = SBT_MAX; in tcp_timer_activate()
929 tcp_bblog_timer(tp, which, what, delta); in tcp_timer_activate()
931 if ((which = tcp_timer_next(tp, &precision)) != TT_N) in tcp_timer_activate()
932 callout_reset_sbt_on(&tp->t_callout, tp->t_timers[which], in tcp_timer_activate()
933 precision, tcp_timer_enter, tp, inp_to_cpuid(inp), in tcp_timer_activate()
936 callout_stop(&tp->t_callout); in tcp_timer_activate()
940 tcp_timer_active(struct tcpcb *tp, tt_which which) in tcp_timer_active() argument
943 INP_WLOCK_ASSERT(tptoinpcb(tp)); in tcp_timer_active()
945 return (tp->t_timers[which] != SBT_MAX); in tcp_timer_active()
953 tcp_timer_stop(struct tcpcb *tp) in tcp_timer_stop() argument
956 INP_WLOCK_ASSERT(tptoinpcb(tp)); in tcp_timer_stop()
965 (void )callout_stop(&tp->t_callout); in tcp_timer_stop()
971 tp->t_timers[i] = SBT_MAX; in tcp_timer_stop()