FreeBSD kernel IPv4 code
rack.c File Reference
#include <sys/cdefs.h>
#include "opt_inet.h"
#include "opt_inet6.h"
#include "opt_ipsec.h"
#include "opt_tcpdebug.h"
#include "opt_ratelimit.h"
#include "opt_kern_tls.h"
#include <sys/param.h>
#include <sys/arb.h>
#include <sys/module.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/mbuf.h>
#include <sys/proc.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <sys/tree.h>
#include <sys/refcount.h>
#include <sys/queue.h>
#include <sys/tim_filter.h>
#include <sys/smp.h>
#include <sys/kthread.h>
#include <sys/kern_prefetch.h>
#include <sys/protosw.h>
#include <vm/uma.h>
#include <net/route.h>
#include <net/route/nhop.h>
#include <net/vnet.h>
#include <netinet/in.h>
#include <netinet/in_kdtrace.h>
#include <netinet/in_pcb.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netinet/icmp_var.h>
#include <netinet/ip_var.h>
#include <netinet/ip6.h>
#include <netinet6/in6_pcb.h>
#include <netinet6/ip6_var.h>
#include <netinet/tcp.h>
#include <netinet/tcp_fsm.h>
#include <netinet/tcp_log_buf.h>
#include <netinet/tcp_seq.h>
#include <netinet/tcp_timer.h>
#include <netinet/tcp_var.h>
#include <netinet/tcp_syncache.h>
#include <netinet/tcp_hpts.h>
#include <netinet/tcp_ratelimit.h>
#include <netinet/tcp_accounting.h>
#include <netinet/tcpip.h>
#include <netinet/cc/cc.h>
#include <netinet/cc/cc_newreno.h>
#include <netinet/tcp_fastopen.h>
#include <netinet/tcp_lro.h>
#include <netinet/tcp_ecn.h>
#include <netipsec/ipsec_support.h>
#include <netinet/udp.h>
#include <netinet/udp_var.h>
#include <machine/in_cksum.h>
#include "sack_filter.h"
#include "tcp_rack.h"
#include "rack_bbr_common.h"

Go to the source code of this file.

Macros

#define TCPSTATES   /* for logging */
 
#define TCPOUTFLAGS
 
#define TICKS2SBT(__t)   (tick_sbt * ((sbintime_t)(__t)))
 
#define V_newreno_beta   VNET(newreno_beta)
 
#define V_newreno_beta_ecn   VNET(newreno_beta_ecn)
 
#define CUM_ACKED   1
 
#define SACKED   2
 
#define RACK_REXMTVAL(tp)   max(rack_rto_min, ((tp)->t_srtt + ((tp)->t_rttvar << 2)))
 
#define RACK_TCPT_RANGESET(tv, value, tvmin, tvmax, slop)
 
#define DELAY_ACK(tp, tlen)
 
#define timersub(tvp, uvp, vvp)
 

Functions

 __FBSDID ("$FreeBSD$")
 
 VNET_DECLARE (uint32_t, newreno_beta)
 
 VNET_DECLARE (uint32_t, newreno_beta_ecn)
 
 MALLOC_DEFINE (M_TCPFSB, "tcp_fsb", "TCP fast send block")
 
 MALLOC_DEFINE (M_TCPDO, "tcp_do", "TCP deferred options")
 
static void rack_log_progress_event (struct tcp_rack *rack, struct tcpcb *tp, uint32_t tick, int event, int line)
 
static int rack_process_ack (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, uint32_t tiwin, int32_t tlen, int32_t *ofia, int32_t thflags, int32_t *ret_val)
 
static int rack_process_data (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
 
static void rack_ack_received (struct tcpcb *tp, struct tcp_rack *rack, uint32_t th_ack, uint16_t nsegs, uint16_t type, int32_t recovery)
 
static struct rack_sendmaprack_alloc (struct tcp_rack *rack)
 
static struct rack_sendmaprack_alloc_limit (struct tcp_rack *rack, uint8_t limit_type)
 
static struct rack_sendmaprack_check_recovery_mode (struct tcpcb *tp, uint32_t tsused)
 
static void rack_cong_signal (struct tcpcb *tp, uint32_t type, uint32_t ack)
 
static void rack_counter_destroy (void)
 
static int rack_ctloutput (struct inpcb *inp, struct sockopt *sopt)
 
static int32_t rack_ctor (void *mem, int32_t size, void *arg, int32_t how)
 
static void rack_set_pace_segments (struct tcpcb *tp, struct tcp_rack *rack, uint32_t line, uint64_t *fill_override)
 
static void rack_do_segment (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, int32_t drop_hdrlen, int32_t tlen, uint8_t iptos)
 
static void rack_dtor (void *mem, int32_t size, void *arg)
 
static void rack_log_alt_to_to_cancel (struct tcp_rack *rack, uint32_t flex1, uint32_t flex2, uint32_t flex3, uint32_t flex4, uint32_t flex5, uint32_t flex6, uint16_t flex7, uint8_t mod)
 
static void rack_log_pacing_delay_calc (struct tcp_rack *rack, uint32_t len, uint32_t slot, uint64_t bw_est, uint64_t bw, uint64_t len_time, int method, int line, struct rack_sendmap *rsm, uint8_t quality)
 
static struct rack_sendmaprack_find_high_nonack (struct tcp_rack *rack, struct rack_sendmap *rsm)
 
static struct rack_sendmaprack_find_lowest_rsm (struct tcp_rack *rack)
 
static void rack_free (struct tcp_rack *rack, struct rack_sendmap *rsm)
 
static void rack_fini (struct tcpcb *tp, int32_t tcb_is_purged)
 
static int rack_get_sockopt (struct inpcb *inp, struct sockopt *sopt)
 
static void rack_do_goodput_measurement (struct tcpcb *tp, struct tcp_rack *rack, tcp_seq th_ack, int line, uint8_t quality)
 
static uint32_t rack_get_pacing_len (struct tcp_rack *rack, uint64_t bw, uint32_t mss)
 
static int32_t rack_handoff_ok (struct tcpcb *tp)
 
static int32_t rack_init (struct tcpcb *tp)
 
static void rack_init_sysctls (void)
 
static void rack_log_ack (struct tcpcb *tp, struct tcpopt *to, struct tcphdr *th, int entered_rec, int dup_ack_struck)
 
static void rack_log_output (struct tcpcb *tp, struct tcpopt *to, int32_t len, uint32_t seq_out, uint16_t th_flags, int32_t err, uint64_t ts, struct rack_sendmap *hintrsm, uint16_t add_flags, struct mbuf *s_mb, uint32_t s_moff, int hw_tls)
 
static void rack_log_sack_passed (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *rsm)
 
static void rack_log_to_event (struct tcp_rack *rack, int32_t to_num, struct rack_sendmap *rsm)
 
static int32_t rack_output (struct tcpcb *tp)
 
static uint32_t rack_proc_sack_blk (struct tcpcb *tp, struct tcp_rack *rack, struct sackblk *sack, struct tcpopt *to, struct rack_sendmap **prsm, uint32_t cts, int *moved_two)
 
static void rack_post_recovery (struct tcpcb *tp, uint32_t th_seq)
 
static void rack_remxt_tmr (struct tcpcb *tp)
 
static int rack_set_sockopt (struct inpcb *inp, struct sockopt *sopt)
 
static void rack_set_state (struct tcpcb *tp, struct tcp_rack *rack)
 
static int32_t rack_stopall (struct tcpcb *tp)
 
static void rack_timer_activate (struct tcpcb *tp, uint32_t timer_type, uint32_t delta)
 
static int32_t rack_timer_active (struct tcpcb *tp, uint32_t timer_type)
 
static void rack_timer_cancel (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts, int line)
 
static void rack_timer_stop (struct tcpcb *tp, uint32_t timer_type)
 
static uint32_t rack_update_entry (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *rsm, uint64_t ts, int32_t *lenp, uint16_t add_flag)
 
static void rack_update_rsm (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *rsm, uint64_t ts, uint16_t add_flag)
 
static int rack_update_rtt (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *rsm, struct tcpopt *to, uint32_t cts, int32_t ack_type, tcp_seq th_ack)
 
static int32_t tcp_addrack (module_t mod, int32_t type, void *data)
 
static int rack_do_close_wait (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_closing (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_established (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_fastnewdata (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_fin_wait_1 (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_fin_wait_2 (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_lastack (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_syn_recv (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
static int rack_do_syn_sent (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 
struct rack_sendmaptcp_rack_output (struct tcpcb *tp, struct tcp_rack *rack, uint32_t tsused)
 
static void tcp_rack_xmit_timer (struct tcp_rack *rack, int32_t rtt, uint32_t len, uint32_t us_tim, int confidence, struct rack_sendmap *rsm, uint16_t rtrcnt)
 
static void tcp_rack_partialack (struct tcpcb *tp)
 
static int rack_set_profile (struct tcp_rack *rack, int prof)
 
static void rack_apply_deferred_options (struct tcp_rack *rack)
 
static void rack_set_cc_pacing (struct tcp_rack *rack)
 
static void rack_undo_cc_pacing (struct tcp_rack *rack)
 
static int sysctl_rack_clear (SYSCTL_HANDLER_ARGS)
 
static __inline int rb_map_cmp (struct rack_sendmap *b, struct rack_sendmap *a)
 
 RB_PROTOTYPE (rack_rb_tree_head, rack_sendmap, r_next, rb_map_cmp)
 
 RB_GENERATE (rack_rb_tree_head, rack_sendmap, r_next, rb_map_cmp)
 
static uint32_t rc_init_window (struct tcp_rack *rack)
 
static uint64_t rack_get_fixed_pacing_bw (struct tcp_rack *rack)
 
static uint64_t rack_get_bw (struct tcp_rack *rack)
 
static uint16_t rack_get_output_gain (struct tcp_rack *rack, struct rack_sendmap *rsm)
 
static void rack_log_dsack_event (struct tcp_rack *rack, uint8_t mod, uint32_t flex4, uint32_t flex5, uint32_t flex6)
 
static void rack_log_hdwr_pacing (struct tcp_rack *rack, uint64_t rate, uint64_t hw_rate, int line, int error, uint16_t mod)
 
static uint64_t rack_get_output_bw (struct tcp_rack *rack, uint64_t bw, struct rack_sendmap *rsm, int *capped)
 
static void rack_log_retran_reason (struct tcp_rack *rack, struct rack_sendmap *rsm, uint32_t tsused, uint32_t thresh, int mod)
 
static void rack_log_to_start (struct tcp_rack *rack, uint32_t cts, uint32_t to, int32_t slot, uint8_t which)
 
static void rack_log_map_chg (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *prev, struct rack_sendmap *rsm, struct rack_sendmap *next, int flag, uint32_t th_ack, int line)
 
static void rack_log_rtt_upd (struct tcpcb *tp, struct tcp_rack *rack, uint32_t t, uint32_t len, struct rack_sendmap *rsm, int conf)
 
static void rack_log_rtt_sample (struct tcp_rack *rack, uint32_t rtt)
 
static void rack_log_rtt_sample_calc (struct tcp_rack *rack, uint32_t rtt, uint32_t send_time, uint32_t ack_time, int where)
 
static void rack_log_type_bbrsnd (struct tcp_rack *rack, uint32_t len, uint32_t slot, uint32_t cts, struct timeval *tv)
 
static void rack_log_doseg_done (struct tcp_rack *rack, uint32_t cts, int32_t nxt_pkt, int32_t did_out, int way_out, int nsegs)
 
static void rack_log_type_pacing_sizes (struct tcpcb *tp, struct tcp_rack *rack, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint8_t frm)
 
static void rack_log_type_just_return (struct tcp_rack *rack, uint32_t cts, uint32_t tlen, uint32_t slot, uint8_t hpts_calling, int reason, uint32_t cwnd_to_use)
 
static void rack_log_to_cancel (struct tcp_rack *rack, int32_t hpts_removed, int line, uint32_t us_cts, struct timeval *tv, uint32_t flags_on_entry)
 
static void rack_log_to_processing (struct tcp_rack *rack, uint32_t cts, int32_t ret, int32_t timers)
 
static void rack_log_to_prr (struct tcp_rack *rack, int frm, int orig_cwnd)
 
static struct rack_sendmaprack_alloc_full_limit (struct tcp_rack *rack)
 
static void rack_free_trim (struct tcp_rack *rack)
 
static uint32_t rack_get_measure_window (struct tcpcb *tp, struct tcp_rack *rack)
 
static int rack_enough_for_measurement (struct tcpcb *tp, struct tcp_rack *rack, tcp_seq th_ack, uint8_t *quality)
 
static void rack_log_timely (struct tcp_rack *rack, uint32_t logged, uint64_t cur_bw, uint64_t low_bnd, uint64_t up_bnd, int line, uint8_t method)
 
static int rack_bw_can_be_raised (struct tcp_rack *rack, uint64_t cur_bw, uint64_t last_bw_est, uint16_t mult)
 
static void rack_validate_multipliers_at_or_above100 (struct tcp_rack *rack)
 
static void rack_validate_multipliers_at_or_below_100 (struct tcp_rack *rack)
 
static void rack_increase_bw_mul (struct tcp_rack *rack, int timely_says, uint64_t cur_bw, uint64_t last_bw_est, int override)
 
static uint32_t rack_get_decrease (struct tcp_rack *rack, uint32_t curper, int32_t rtt_diff)
 
static uint32_t rack_decrease_highrtt (struct tcp_rack *rack, uint32_t curper, uint32_t rtt)
 
static void rack_decrease_bw_mul (struct tcp_rack *rack, int timely_says, uint32_t rtt, int32_t rtt_diff)
 
static void rack_log_rtt_shrinks (struct tcp_rack *rack, uint32_t us_cts, uint32_t rtt, uint32_t line, uint8_t reas)
 
static void rack_set_prtt_target (struct tcp_rack *rack, uint32_t segsiz, uint32_t rtt)
 
static void rack_enter_probertt (struct tcp_rack *rack, uint32_t us_cts)
 
static void rack_exit_probertt (struct tcp_rack *rack, uint32_t us_cts)
 
static void rack_check_probe_rtt (struct tcp_rack *rack, uint32_t us_cts)
 
static void rack_update_multiplier (struct tcp_rack *rack, int32_t timely_says, uint64_t last_bw_est, uint32_t rtt, int32_t rtt_diff)
 
static int32_t rack_make_timely_judgement (struct tcp_rack *rack, uint32_t rtt, int32_t rtt_diff, uint32_t prev_rtt)
 
static void rack_cc_after_idle (struct tcp_rack *rack, struct tcpcb *tp)
 
static uint32_t rack_calc_thresh_rack (struct tcp_rack *rack, uint32_t srtt, uint32_t cts)
 
static uint32_t rack_calc_thresh_tlp (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *rsm, uint32_t srtt)
 
static uint32_t rack_grab_rtt (struct tcpcb *tp, struct tcp_rack *rack)
 
static uint32_t rack_get_persists_timer_val (struct tcpcb *tp, struct tcp_rack *rack)
 
static uint32_t rack_timer_start (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts, int sup_rack)
 
static void rack_enter_persist (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts)
 
static void rack_exit_persist (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts)
 
static void rack_log_hpts_diag (struct tcp_rack *rack, uint32_t cts, struct hpts_diag *diag, struct timeval *tv)
 
static void rack_log_wakeup (struct tcpcb *tp, struct tcp_rack *rack, struct sockbuf *sb, uint32_t len, int type)
 
static void rack_start_hpts_timer (struct tcp_rack *rack, struct tcpcb *tp, uint32_t cts, int32_t slot, uint32_t tot_len_this_send, int sup_rack)
 
static int rack_timeout_rack (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts)
 
static void rack_adjust_orig_mlen (struct rack_sendmap *rsm)
 
static void rack_setup_offset_for_rsm (struct rack_sendmap *src_rsm, struct rack_sendmap *rsm)
 
static __inline void rack_clone_rsm (struct tcp_rack *rack, struct rack_sendmap *nrsm, struct rack_sendmap *rsm, uint32_t start)
 
static struct rack_sendmaprack_merge_rsm (struct tcp_rack *rack, struct rack_sendmap *l_rsm, struct rack_sendmap *r_rsm)
 
static int rack_timeout_tlp (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts, uint8_t *doing_tlp)
 
static int rack_timeout_delack (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts)
 
static int rack_timeout_persist (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts)
 
static int rack_timeout_keepalive (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts)
 
static void rack_convert_rtts (struct tcpcb *tp)
 
static void rack_cc_conn_init (struct tcpcb *tp)
 
static int rack_timeout_rxt (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts)
 
static int rack_process_timers (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cts, uint8_t hpts_calling, uint8_t *doing_tlp)
 
static void rack_stop_all_timers (struct tcpcb *tp)
 
static void tcp_rack_xmit_timer_commit (struct tcp_rack *rack, struct tcpcb *tp)
 
static void rack_apply_updated_usrtt (struct tcp_rack *rack, uint32_t us_rtt, uint32_t us_cts)
 
static void rack_need_set_test (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *rsm, tcp_seq th_ack, int line, int use_which)
 
static int is_rsm_inside_declared_tlp_block (struct tcp_rack *rack, struct rack_sendmap *rsm)
 
static void rack_peer_reneges (struct tcp_rack *rack, struct rack_sendmap *rsm, tcp_seq th_ack)
 
static void rack_do_decay (struct tcp_rack *rack)
 
static void rack_process_to_cumack (struct tcpcb *tp, struct tcp_rack *rack, register uint32_t th_ack, uint32_t cts, struct tcpopt *to)
 
static void rack_handle_might_revert (struct tcpcb *tp, struct tcp_rack *rack)
 
static int rack_note_dsack (struct tcp_rack *rack, tcp_seq start, tcp_seq end)
 
static void rack_update_prr (struct tcpcb *tp, struct tcp_rack *rack, uint32_t changed, tcp_seq th_ack)
 
static void rack_strike_dupack (struct tcp_rack *rack)
 
static void rack_check_bottom_drag (struct tcpcb *tp, struct tcp_rack *rack, struct socket *so, int32_t acked)
 
static void rack_gain_for_fastoutput (struct tcp_rack *rack, struct tcpcb *tp, struct socket *so, uint32_t acked_amount)
 
static void rack_adjust_sendmap (struct tcp_rack *rack, struct sockbuf *sb, tcp_seq snd_una)
 
static void rack_collapsed_window (struct tcp_rack *rack)
 
static void rack_un_collapse_window (struct tcp_rack *rack)
 
static void rack_handle_delayed_ack (struct tcpcb *tp, struct tcp_rack *rack, int32_t tlen, int32_t tfo_syn)
 
static void rack_validate_fo_sendwin_up (struct tcpcb *tp, struct tcp_rack *rack)
 
static int rack_fastack (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen, uint32_t tiwin, int32_t nxt_pkt, uint32_t cts)
 
static int rack_check_data_after_close (struct mbuf *m, struct tcpcb *tp, int32_t *tlen, struct tcphdr *th, struct socket *so)
 
static void rack_clear_rate_sample (struct tcp_rack *rack)
 
static void rack_init_fsb_block (struct tcpcb *tp, struct tcp_rack *rack)
 
static int rack_init_fsb (struct tcpcb *tp, struct tcp_rack *rack)
 
static void rack_timer_audit (struct tcpcb *tp, struct tcp_rack *rack, struct sockbuf *sb)
 
static void rack_do_win_updates (struct tcpcb *tp, struct tcp_rack *rack, uint32_t tiwin, uint32_t seq, uint32_t ack, uint32_t cts, uint32_t high_seq)
 
static void rack_log_input_packet (struct tcpcb *tp, struct tcp_rack *rack, struct tcp_ackent *ae, int ackval, uint32_t high_seq)
 
static void rack_handle_probe_response (struct tcp_rack *rack, uint32_t tiwin, uint32_t us_cts)
 
static int rack_do_compressed_ack_processing (struct tcpcb *tp, struct socket *so, struct mbuf *m, int nxt_pkt, struct timeval *tv)
 
static int rack_do_segment_nounlock (struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, int32_t drop_hdrlen, int32_t tlen, uint8_t iptos, int32_t nxt_pkt, struct timeval *tv)
 
static int32_t pace_to_fill_cwnd (struct tcp_rack *rack, int32_t slot, uint32_t len, uint32_t segsiz, int *capped, uint64_t *rate_wanted, uint8_t non_paced)
 
static int32_t rack_get_pacing_delay (struct tcp_rack *rack, struct tcpcb *tp, uint32_t len, struct rack_sendmap *rsm, uint32_t segsiz)
 
static void rack_start_gp_measurement (struct tcpcb *tp, struct tcp_rack *rack, tcp_seq startseq, uint32_t sb_offset)
 
static uint32_t rack_what_can_we_send (struct tcpcb *tp, struct tcp_rack *rack, uint32_t cwnd_to_use, uint32_t avail, int32_t sb_offset)
 
static void rack_log_fsb (struct tcp_rack *rack, struct tcpcb *tp, struct socket *so, uint32_t flags, unsigned ipoptlen, int32_t orig_len, int32_t len, int error, int rsm_is_null, int optlen, int line, uint16_t mode)
 
static struct mbuf * rack_fo_base_copym (struct mbuf *the_m, uint32_t the_off, int32_t *plen, struct rack_fast_send_blk *fsb, int32_t seglimit, int32_t segsize, int hw_tls)
 
static struct mbuf * rack_fo_m_copym (struct tcp_rack *rack, int32_t *plen, int32_t seglimit, int32_t segsize, struct mbuf **s_mb, int *s_soff)
 
static int rack_fast_rsm_output (struct tcpcb *tp, struct tcp_rack *rack, struct rack_sendmap *rsm, uint64_t ts_val, uint32_t cts, uint32_t ms_cts, struct timeval *tv, int len, uint8_t doing_tlp)
 
static void rack_sndbuf_autoscale (struct tcp_rack *rack)
 
static int rack_fast_output (struct tcpcb *tp, struct tcp_rack *rack, uint64_t ts_val, uint32_t cts, uint32_t ms_cts, struct timeval *tv, long tot_len, int *send_err)
 
static void rack_update_seg (struct tcp_rack *rack)
 
static void rack_mtu_change (struct tcpcb *tp)
 
static int rack_add_deferred_option (struct tcp_rack *rack, int sopt_name, uint64_t loptval)
 
static int rack_process_option (struct tcpcb *tp, struct tcp_rack *rack, int sopt_name, uint32_t optval, uint64_t loptval)
 
static void rack_hw_tls_change (struct tcpcb *tp, int chg)
 
static int rack_pru_options (struct tcpcb *tp, int flags)
 
static void rack_fill_info (struct tcpcb *tp, struct tcp_info *ti)
 
 MODULE_VERSION (MODNAME, 1)
 
 DECLARE_MODULE (MODNAME, tcp_rack, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY)
 
 MODULE_DEPEND (MODNAME, tcphpts, 1, 1, 1)
 

Variables

uma_zone_t rack_zone
 
uma_zone_t rack_pcb_zone
 
struct sysctl_ctx_list rack_sysctl_ctx
 
struct sysctl_oid * rack_sysctl_root
 
static int32_t rack_tlp_thresh = 1
 
static int32_t rack_tlp_limit = 2
 
static int32_t rack_tlp_use_greater = 1
 
static int32_t rack_reorder_thresh = 2
 
static int32_t rack_reorder_fade = 60000000
 
static uint8_t rack_req_measurements = 1
 
static uint32_t rack_highest_sack_thresh_seen = 0
 
static uint32_t rack_highest_move_thresh_seen = 0
 
static int32_t rack_enable_hw_pacing = 0
 
static int32_t rack_hw_pace_extra_slots = 2
 
static int32_t rack_hw_rate_caps = 1
 
static int32_t rack_hw_rate_min = 0
 
static int32_t rack_hw_rate_to_low = 0
 
static int32_t rack_hw_up_only = 1
 
static int32_t rack_stats_gets_ms_rtt = 1
 
static int32_t rack_prr_addbackmax = 2
 
static int32_t rack_do_hystart = 0
 
static int32_t rack_apply_rtt_with_reduced_conf = 0
 
static int32_t rack_pkt_delay = 1000
 
static int32_t rack_send_a_lot_in_prr = 1
 
static int32_t rack_min_to = 1000
 
static int32_t rack_verbose_logging = 0
 
static int32_t rack_ignore_data_after_close = 1
 
static int32_t rack_enable_shared_cwnd = 1
 
static int32_t rack_use_cmp_acks = 1
 
static int32_t rack_use_fsb = 1
 
static int32_t rack_use_rfo = 1
 
static int32_t rack_use_rsm_rfo = 1
 
static int32_t rack_max_abc_post_recovery = 2
 
static int32_t rack_client_low_buf = 0
 
static int32_t rack_dsack_std_based = 0x3
 
static int32_t rack_limits_scwnd = 1
 
static int32_t rack_enable_mqueue_for_nonpaced = 0
 
static int32_t rack_disable_prr = 0
 
static int32_t use_rack_rr = 1
 
static int32_t rack_non_rxt_use_cr = 0
 
static int32_t rack_persist_min = 250000
 
static int32_t rack_persist_max = 2000000
 
static int32_t rack_sack_not_required = 1
 
static int32_t rack_default_init_window = 0
 
static int32_t rack_limit_time_with_srtt = 0
 
static int32_t rack_autosndbuf_inc = 20
 
static int32_t rack_enobuf_hw_boost_mult = 2
 
static int32_t rack_enobuf_hw_max = 12000
 
static int32_t rack_enobuf_hw_min = 10000
 
static int32_t rack_hw_rwnd_factor = 2
 
static uint32_t rack_def_data_window = 20
 
static uint32_t rack_goal_bdp = 2
 
static uint32_t rack_min_srtts = 1
 
static uint32_t rack_min_measure_usec = 0
 
static int32_t rack_tlp_min = 10000
 
static int32_t rack_rto_min = 30000
 
static int32_t rack_rto_max = 4000000
 
static const int32_t rack_free_cache = 2
 
static int32_t rack_hptsi_segments = 40
 
static int32_t rack_rate_sample_method = USE_RTT_LOW
 
static int32_t rack_pace_every_seg = 0
 
static int32_t rack_delayed_ack_time = 40000
 
static int32_t rack_slot_reduction = 4
 
static int32_t rack_wma_divisor = 8
 
static int32_t rack_cwnd_block_ends_measure = 0
 
static int32_t rack_rwnd_block_ends_measure = 0
 
static int32_t rack_def_profile = 0
 
static int32_t rack_lower_cwnd_at_tlp = 0
 
static int32_t rack_limited_retran = 0
 
static int32_t rack_always_send_oldest = 0
 
static int32_t rack_tlp_threshold_use = TLP_USE_TWO_ONE
 
static uint16_t rack_per_of_gp_ss = 250
 
static uint16_t rack_per_of_gp_ca = 200
 
static uint16_t rack_per_of_gp_rec = 200
 
static uint16_t rack_per_of_gp_probertt = 60
 
static uint16_t rack_per_of_gp_lowthresh = 40
 
static uint16_t rack_per_of_gp_probertt_reduce = 10
 
static uint16_t rack_atexit_prtt_hbp = 130
 
static uint16_t rack_atexit_prtt = 130
 
static uint32_t rack_max_drain_wait = 2
 
static uint32_t rack_must_drain = 1
 
static uint32_t rack_probertt_use_min_rtt_entry = 1
 
static uint32_t rack_probertt_use_min_rtt_exit = 0
 
static uint32_t rack_probe_rtt_sets_cwnd = 0
 
static uint32_t rack_probe_rtt_safety_val = 2000000
 
static uint32_t rack_time_between_probertt = 9600000
 
static uint32_t rack_probertt_gpsrtt_cnt_mul = 0
 
static uint32_t rack_probertt_gpsrtt_cnt_div = 0
 
static uint32_t rack_min_probertt_hold = 40000
 
static uint32_t rack_probertt_filter_life = 10000000
 
static uint32_t rack_probertt_lower_within = 10
 
static uint32_t rack_min_rtt_movement = 250000
 
static int32_t rack_pace_one_seg = 0
 
static int32_t rack_probertt_clear_is = 1
 
static int32_t rack_max_drain_hbp = 1
 
static int32_t rack_hbp_thresh = 3
 
static int32_t rack_max_per_above = 30
 
static int32_t rack_gp_per_bw_mul_up = 2
 
static int32_t rack_gp_per_bw_mul_down = 4
 
static int32_t rack_gp_rtt_maxmul = 3
 
static int32_t rack_gp_rtt_minmul = 1
 
static int32_t rack_gp_rtt_mindiv = 4
 
static int32_t rack_gp_decrease_per = 20
 
static int32_t rack_gp_increase_per = 2
 
static int32_t rack_per_lower_bound = 50
 
static int32_t rack_per_upper_bound_ss = 0
 
static int32_t rack_per_upper_bound_ca = 0
 
static int32_t rack_do_dyn_mul = 0
 
static int32_t rack_gp_no_rec_chg = 1
 
static int32_t rack_timely_dec_clear = 6
 
static int32_t rack_timely_max_push_rise = 3
 
static int32_t rack_timely_max_push_drop = 3
 
static int32_t rack_timely_min_segs = 4
 
static int32_t rack_use_max_for_nobackoff = 0
 
static int32_t rack_timely_int_timely_only = 0
 
static int32_t rack_timely_no_stopping = 0
 
static int32_t rack_down_raise_thresh = 100
 
static int32_t rack_req_segs = 1
 
static uint64_t rack_bw_rate_cap = 0
 
static int32_t rack_use_imac_dack = 0
 
counter_u64_t rack_saw_enobuf
 
counter_u64_t rack_saw_enobuf_hw
 
counter_u64_t rack_saw_enetunreach
 
counter_u64_t rack_persists_sends
 
counter_u64_t rack_persists_acks
 
counter_u64_t rack_persists_loss
 
counter_u64_t rack_persists_lost_ends
 
counter_u64_t rack_tlp_tot
 
counter_u64_t rack_tlp_newdata
 
counter_u64_t rack_tlp_retran
 
counter_u64_t rack_tlp_retran_bytes
 
counter_u64_t rack_to_tot
 
counter_u64_t rack_hot_alloc
 
counter_u64_t rack_to_alloc
 
counter_u64_t rack_to_alloc_hard
 
counter_u64_t rack_to_alloc_emerg
 
counter_u64_t rack_to_alloc_limited
 
counter_u64_t rack_alloc_limited_conns
 
counter_u64_t rack_split_limited
 
counter_u64_t rack_multi_single_eq
 
counter_u64_t rack_proc_non_comp_ack
 
counter_u64_t rack_fto_send
 
counter_u64_t rack_fto_rsm_send
 
counter_u64_t rack_nfto_resend
 
counter_u64_t rack_non_fto_send
 
counter_u64_t rack_extended_rfo
 
counter_u64_t rack_sack_proc_all
 
counter_u64_t rack_sack_proc_short
 
counter_u64_t rack_sack_proc_restart
 
counter_u64_t rack_sack_attacks_detected
 
counter_u64_t rack_sack_attacks_reversed
 
counter_u64_t rack_sack_used_next_merge
 
counter_u64_t rack_sack_splits
 
counter_u64_t rack_sack_used_prev_merge
 
counter_u64_t rack_sack_skipped_acked
 
counter_u64_t rack_ack_total
 
counter_u64_t rack_express_sack
 
counter_u64_t rack_sack_total
 
counter_u64_t rack_move_none
 
counter_u64_t rack_move_some
 
counter_u64_t rack_input_idle_reduces
 
counter_u64_t rack_collapsed_win
 
counter_u64_t rack_try_scwnd
 
counter_u64_t rack_hw_pace_init_fail
 
counter_u64_t rack_hw_pace_lost
 
counter_u64_t rack_out_size [TCP_MSS_ACCT_SIZE]
 
counter_u64_t rack_opts_arry [RACK_OPTS_SIZE]
 
int32_t rack_clear_counter =0
 
static struct tcp_function_block __tcp_rack
 
static const char * rack_stack_names []
 
static bool rack_mod_inited = false
 
static moduledata_t tcp_rack
 

Macro Definition Documentation

◆ CUM_ACKED

#define CUM_ACKED   1

Definition at line 156 of file rack.c.

◆ DELAY_ACK

#define DELAY_ACK (   tp,
  tlen 
)
Value:
(((tp->t_flags & TF_RXWIN0SENT) == 0) && \
((tp->t_flags & TF_DELACK) == 0) && \
(tlen <= tp->t_maxseg) && \
(tp->t_delayed_ack || (tp->t_flags & TF_NEEDSYN)))
#define TF_DELACK
Definition: tcp_var.h:498
#define TF_RXWIN0SENT
Definition: tcp_var.h:516
#define TF_NEEDSYN
Definition: tcp_var.h:507

Definition at line 4853 of file rack.c.

◆ RACK_REXMTVAL

#define RACK_REXMTVAL (   tp)    max(rack_rto_min, ((tp)->t_srtt + ((tp)->t_rttvar << 2)))

Definition at line 391 of file rack.c.

◆ RACK_TCPT_RANGESET

#define RACK_TCPT_RANGESET (   tv,
  value,
  tvmin,
  tvmax,
  slop 
)
Value:
do { \
(tv) = (value) + slop; \
if ((u_long)(tv) < (u_long)(tvmin)) \
(tv) = (tvmin); \
if ((u_long)(tv) > (u_long)(tvmax)) \
(tv) = (tvmax); \
} while (0)

Definition at line 393 of file rack.c.

◆ SACKED

#define SACKED   2

Definition at line 157 of file rack.c.

◆ TCPOUTFLAGS

#define TCPOUTFLAGS

Definition at line 90 of file rack.c.

◆ TCPSTATES

#define TCPSTATES   /* for logging */

Definition at line 77 of file rack.c.

◆ TICKS2SBT

#define TICKS2SBT (   __t)    (tick_sbt * ((sbintime_t)(__t)))

Definition at line 141 of file rack.c.

◆ timersub

#define timersub (   tvp,
  uvp,
  vvp 
)
Value:
do { \
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
if ((vvp)->tv_usec < 0) { \
(vvp)->tv_sec--; \
(vvp)->tv_usec += 1000000; \
} \
} while (0)

◆ V_newreno_beta

#define V_newreno_beta   VNET(newreno_beta)

Definition at line 146 of file rack.c.

◆ V_newreno_beta_ecn

#define V_newreno_beta_ecn   VNET(newreno_beta_ecn)

Definition at line 147 of file rack.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DECLARE_MODULE()

DECLARE_MODULE ( MODNAME  ,
tcp_rack  ,
SI_SUB_PROTO_DOMAIN  ,
SI_ORDER_ANY   
)

◆ is_rsm_inside_declared_tlp_block()

static int is_rsm_inside_declared_tlp_block ( struct tcp_rack rack,
struct rack_sendmap rsm 
)
inlinestatic

Definition at line 8120 of file rack.c.

References rack_control::last_tlp_acked_end, rack_control::last_tlp_acked_start, tcp_rack::r_ctl, rack_sendmap::r_end, rack_sendmap::r_start, SEQ_GT, and SEQ_LT.

Referenced by rack_proc_sack_blk(), and rack_process_to_cumack().

Here is the caller graph for this function:

◆ MALLOC_DEFINE() [1/2]

MALLOC_DEFINE ( M_TCPDO  ,
"tcp_do"  ,
"TCP deferred options"   
)

◆ MALLOC_DEFINE() [2/2]

MALLOC_DEFINE ( M_TCPFSB  ,
"tcp_fsb"  ,
"TCP fast send block"   
)

◆ MODULE_DEPEND()

MODULE_DEPEND ( MODNAME  ,
tcphpts  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( MODNAME  ,
 
)

◆ pace_to_fill_cwnd()

◆ rack_ack_received()

static void rack_ack_received ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  th_ack,
uint16_t  nsegs,
uint16_t  type,
int32_t  recovery 
)
static

Definition at line 4497 of file rack.c.

References BBR_LOG_CWND, cc_var::bytes_this_ack, CC_ACK, CC_ALGO, CCF_ABC_SENTAWND, CCF_CWND_LIMITED, CCF_USE_LOCAL_ABC, tcpcb::ccv, tcp_rack::client_bufferlvl, ctf_fixed_maxseg(), cc_var::curack, rack_control::cwnd_to_use, cc_var::flags, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, INP_WLOCK_ASSERT, cc_var::labc, cc_var::nsegs, r_ctl, tcp_rack::r_ctl, tcp_rack::r_must_retran, tcp_rack::r_use_labc_for_rec, rack_client_low_buf, rack_do_goodput_measurement(), rack_enough_for_measurement(), rack_max_abc_post_recovery, RACK_QUALITY_NONE, rack_verbose_logging, tcp_rack::rc_always_pace, rack_control::rc_early_recovery_segs, tcp_rack::rc_labc, rack_control::rc_out_at_rto, rack_control::rc_rack_largest_cwnd, rack_control::rc_snd_max_at_rto, tcp_rack::rc_tp, SEQ_GEQ, tcpcb::snd_cwnd, tcpcb::snd_ssthresh, tcpcb::snd_una, tcpcb::snd_wnd, tcpcb::t_bytes_acked, tcpcb::t_flags, tcpcb::t_inpcb, tcpcb::t_logstate, tcpcb::t_maxpeakrate, tcpcb::t_peakrate_thr, tcpcb::t_stats, tcp_get_usecs(), tcp_log_event_(), TCP_LOG_STATE_OFF, TF_GPUTINPROG, tcp_log_bbr::timeStamp, tcp_log_buffer::tlb_stackinfo, tcp_log_stackspecific::u_bbr, V_tcp_abc_l_var, V_tcp_do_newsack, VOI_TCP_CALCFRWINDIFF, and VOI_TCP_LCWIN.

Referenced by rack_do_compressed_ack_processing(), rack_fastack(), and rack_process_ack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_add_deferred_option()

static int rack_add_deferred_option ( struct tcp_rack rack,
int  sopt_name,
uint64_t  loptval 
)
static

Definition at line 19375 of file rack.c.

References next, rack_control::opt_list, deferred_opt_list::optname, deferred_opt_list::optval, and tcp_rack::r_ctl.

Referenced by rack_set_sockopt().

Here is the caller graph for this function:

◆ rack_adjust_orig_mlen()

static void rack_adjust_orig_mlen ( struct rack_sendmap rsm)
static

Definition at line 5870 of file rack.c.

References rack_sendmap::m, rack_sendmap::orig_m_len, and rack_sendmap::soff.

Referenced by rack_adjust_sendmap(), rack_fast_rsm_output(), rack_process_to_cumack(), and rack_setup_offset_for_rsm().

Here is the caller graph for this function:

◆ rack_adjust_sendmap()

static void rack_adjust_sendmap ( struct tcp_rack rack,
struct sockbuf *  sb,
tcp_seq  snd_una 
)
static

Definition at line 9927 of file rack.c.

References rack_sendmap::m, rack_sendmap::orig_m_len, tcp_rack::r_ctl, rack_sendmap::r_start, rack_adjust_orig_mlen(), rack_control::rc_mtree, and rack_sendmap::soff.

Referenced by rack_do_compressed_ack_processing(), rack_fastack(), and rack_process_ack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_alloc()

static struct rack_sendmap * rack_alloc ( struct tcp_rack rack)
static

◆ rack_alloc_full_limit()

static struct rack_sendmap * rack_alloc_full_limit ( struct tcp_rack rack)
static

Definition at line 2781 of file rack.c.

References tcp_rack::alloc_limit_reported, tcp_rack::do_detection, tcp_rack::r_ctl, rack_alloc(), rack_alloc_limited_conns, rack_to_alloc_limited, rack_control::rc_num_maps_alloced, and V_tcp_map_entries_limit.

Referenced by rack_log_output(), rack_timeout_tlp(), and rack_update_entry().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_alloc_limit()

static struct rack_sendmap * rack_alloc_limit ( struct tcp_rack rack,
uint8_t  limit_type 
)
static

Definition at line 2798 of file rack.c.

References tcp_rack::alloc_limit_reported, tcp_rack::do_detection, tcp_rack::r_ctl, rack_sendmap::r_limit_type, rack_alloc(), rack_alloc_limited_conns, rack_split_limited, rack_control::rc_num_split_allocs, and V_tcp_map_split_limit.

Referenced by rack_collapsed_window(), and rack_proc_sack_blk().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_apply_deferred_options()

static void rack_apply_deferred_options ( struct tcp_rack rack)
static

Definition at line 20017 of file rack.c.

References next, rack_control::opt_list, deferred_opt_list::optname, deferred_opt_list::optval, tcp_rack::r_ctl, rack_process_option(), and tcp_rack::rc_tp.

Referenced by rack_check_bottom_drag(), and rack_do_goodput_measurement().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_apply_updated_usrtt()

static void rack_apply_updated_usrtt ( struct tcp_rack rack,
uint32_t  us_rtt,
uint32_t  us_cts 
)
static

◆ rack_bw_can_be_raised()

static int rack_bw_can_be_raised ( struct tcp_rack rack,
uint64_t  cur_bw,
uint64_t  last_bw_est,
uint16_t  mult 
)
static

Definition at line 3053 of file rack.c.

References rack_log_timely(), rack_max_per_above, and rack_timely_no_stopping.

Referenced by rack_increase_bw_mul().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_calc_thresh_rack()

static uint32_t rack_calc_thresh_rack ( struct tcp_rack rack,
uint32_t  srtt,
uint32_t  cts 
)
static

◆ rack_calc_thresh_tlp()

◆ rack_cc_after_idle()

static void rack_cc_after_idle ( struct tcp_rack rack,
struct tcpcb tp 
)
inlinestatic

Definition at line 4813 of file rack.c.

References CC_ALGO, tcpcb::ccv, INP_WLOCK_ASSERT, KMOD_TCPSTAT_INC, rc_init_window(), tcpcb::snd_cwnd, tcpcb::t_inpcb, tcpcb::t_maxseg, tcpcb::t_state, and TCPS_ESTABLISHED.

Referenced by rack_do_compressed_ack_processing(), rack_do_segment_nounlock(), and rack_output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_cc_conn_init()

static void rack_cc_conn_init ( struct tcpcb tp)
static

Definition at line 6542 of file rack.c.

References cc_conn_init(), rack_convert_rtts(), rc_init_window(), tcpcb::snd_cwnd, tcpcb::snd_ssthresh, tcpcb::snd_wnd, tcpcb::t_fb_ptr, and tcpcb::t_srtt.

Referenced by rack_do_syn_recv(), and rack_do_syn_sent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_check_bottom_drag()

◆ rack_check_data_after_close()

static int rack_check_data_after_close ( struct mbuf *  m,
struct tcpcb tp,
int32_t *  tlen,
struct tcphdr *  th,
struct socket *  so 
)
static

◆ rack_check_probe_rtt()

◆ rack_check_recovery_mode()

static struct rack_sendmap * rack_check_recovery_mode ( struct tcpcb tp,
uint32_t  tsused 
)
static

◆ rack_clear_rate_sample()

static void rack_clear_rate_sample ( struct tcp_rack rack)
inlinestatic

◆ rack_clone_rsm()

◆ rack_collapsed_window()

◆ rack_cong_signal()

static void rack_cong_signal ( struct tcpcb tp,
uint32_t  type,
uint32_t  ack 
)
static

◆ rack_convert_rtts()

static void rack_convert_rtts ( struct tcpcb tp)
static

◆ rack_counter_destroy()

◆ rack_ctloutput()

static int rack_ctloutput ( struct inpcb inp,
struct sockopt *  sopt 
)
static

Definition at line 20587 of file rack.c.

References rack_get_sockopt(), and rack_set_sockopt().

Here is the call graph for this function:

◆ rack_ctor()

static int rack_ctor ( void *  mem,
int32_t  size,
void *  arg,
int32_t  how 
)
static

Definition at line 20606 of file rack.c.

Referenced by tcp_addrack().

Here is the caller graph for this function:

◆ rack_decrease_bw_mul()

◆ rack_decrease_highrtt()

static uint32_t rack_decrease_highrtt ( struct tcp_rack rack,
uint32_t  curper,
uint32_t  rtt 
)
static

Definition at line 3276 of file rack.c.

References tcp_rack::r_ctl, rack_gp_decrease_per, rack_gp_rtt_maxmul, and rack_control::rc_gp_min_rtt.

Referenced by rack_decrease_bw_mul().

Here is the caller graph for this function:

◆ rack_do_close_wait()

static int rack_do_close_wait ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_closing()

static int rack_do_closing ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_compressed_ack_processing()

static int rack_do_compressed_ack_processing ( struct tcpcb tp,
struct socket *  so,
struct mbuf *  m,
int  nxt_pkt,
struct timeval *  tv 
)
static

Definition at line 13220 of file rack.c.

References tcp_ackent::ack, ACK_BEHIND, rack_control::ack_count, ACK_CUMACK, ACK_DUPACK, ACK_RWND, tcp_ackent::ack_val_set, rack_control::act_rcv_time, BBR_LOG_CWND, CC_ACK, CC_ALGO, CC_ECN, CC_RTO_ERR, tcpcb::ccv, rack_control::challenge_ack_cnt, rack_control::challenge_ack_ts, CNT_OF_ACKS_IN, tcp_ackent::codepoint, ctf_ack_war_checks(), ctf_calc_rwin(), ctf_do_drop(), ctf_fixed_maxseg(), ctf_progress_timeout_check(), ctf_ts_check_ac(), rack_control::current_round, CYC_HANDLE_ACK, CYC_HANDLE_MAP, rack_control::dsack_byte_cnt, rack_control::dsack_round_end, tcp_ackent::flags, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex8, tcp_rack::forced_ack, tcp_rack::gp_ready, tcpcb::gput_ack, tcpcb::gput_seq, HAS_TSTMP, IN_FASTRECOVERY, tcp_rack::in_probe_rtt, IN_RECOVERY, inpcb::inp_socket, KMOD_TCPSTAT_ADD, tcpcb::last_ack_sent, PACE_PKT_OUTPUT, PACE_TMR_RXT, tcp_rack::probe_not_answered, PROGRESS_CLEAR, PROGRESS_DROP, PROGRESS_UPDATE, tcp_rack::r_ctl, tcp_rack::r_fast_output, tcp_rack::r_state, tcp_rack::r_wanted_output, rack_ack_received(), rack_ack_total, rack_adjust_sendmap(), rack_cc_after_idle(), rack_check_bottom_drag(), rack_check_probe_rtt(), rack_clear_rate_sample(), rack_cong_signal(), rack_do_decay(), rack_do_win_updates(), rack_free_trim(), rack_gain_for_fastoutput(), rack_handle_might_revert(), rack_handle_probe_response(), rack_input_idle_reduces, rack_log_doseg_done(), rack_log_dsack_event(), rack_log_input_packet(), rack_log_pacing_delay_calc(), rack_log_progress_event(), rack_log_wakeup(), rack_multi_single_eq, tcp_rack::rack_no_prr, rack_post_recovery(), rack_process_to_cumack(), RACK_REXMTVAL, rack_rto_max, rack_rto_min, rack_set_state(), rack_control::rack_sf, rack_strike_dupack(), RACK_TCPT_RANGESET, rack_timer_audit(), rack_timer_cancel(), rack_update_prr(), rack_verbose_logging, tcp_rack::rc_always_pace, tcp_rack::rc_dsack_round_seen, tcp_rack::rc_gp_dyn_mul, rack_control::rc_gp_srtt, rack_control::rc_high_rwnd, rack_control::rc_hpts_flags, tcp_rack::rc_in_persist, rack_control::rc_rcvtime, rack_control::rc_reorder_ts, rack_control::rc_tlp_cnt_out, tcp_rack::rc_tlp_in_progress, tcp_rack::rc_tp, rack_control::rc_went_idle_time, rack_control::retran_during_recovery, rack_control::roundends, tcp_log_bbr::rttProp, tcp_rack::sack_attack_disable, rack_control::sack_count, sack_filter_clear(), tcp_ackent::seq, SEQ_GEQ, SEQ_GT, SEQ_LEQ, SEQ_LT, tcpcb::snd_max, tcpcb::snd_nxt, tcpcb::snd_recover, tcpcb::snd_scale, tcpcb::snd_una, tcpcb::snd_wl1, tcpcb::snd_wl2, tcpcb::snd_wnd, tcpcb::t_acktime, tcpcb::t_badrxtwin, tcpcb::t_dupacks, tcpcb::t_fb_ptr, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_idle_reduce, tcpcb::t_inpcb, tcpcb::t_logstate, tcpcb::t_rcvtime, tcpcb::t_rxtcur, tcpcb::t_rxtshift, tcpcb::t_state, tcp_close(), tcp_drop(), tcp_ecn_input_segment(), TCP_EI_STATUS_SERVER_RST, tcp_fast_finwait2_recycle, tcp_finwait2_timeout, tcp_get_usecs(), tcp_log_end_status(), tcp_log_event_(), TCP_LOG_STATE_OFF, tcp_rack_partialack(), tcp_rack_xmit_timer_commit(), tcp_state_change(), tcp_timer_activate(), tcp_ts_getticks(), tcp_tv_to_mssectick(), tcp_tv_to_usectick(), tcp_twstart(), TCPS_CLOSING, TCPS_FIN_WAIT_1, TCPS_FIN_WAIT_2, TCPS_LAST_ACK, TF2_DROP_AF_DATA, TF_ACKNOW, TF_GPUTINPROG, TF_NEEDSYN, TF_PREVVALID, TF_RCVD_TSTMP, TF_SENTFIN, rack_control::timer_slop, tcp_log_bbr::timeStamp, tcp_ackent::timestamp, tcpopt::to_flags, tcpopt::to_tsecr, tcpopt::to_tsval, TOF_TS, TP_MAXIDLE, tcp_ackent::ts_echo, tcpcb::ts_offset, tcpcb::ts_recent, tcpcb::ts_recent_age, tcp_ackent::ts_value, TSTMP_GT, TSTMP_HDWR, TSTMP_LRO, TSTMP_LT, TT_2MSL, tcp_log_stackspecific::u_bbr, tcp_rack::use_fixed_rate, and tcp_ackent::win.

Referenced by rack_do_segment_nounlock().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_do_decay()

◆ rack_do_established()

static int rack_do_established ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_fastnewdata()

static int rack_do_fastnewdata ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_fin_wait_1()

◆ rack_do_fin_wait_2()

static int rack_do_fin_wait_2 ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_goodput_measurement()

static void rack_do_goodput_measurement ( struct tcpcb tp,
struct tcp_rack rack,
tcp_seq  th_ack,
int  line,
uint8_t  quality 
)
static

Definition at line 4038 of file rack.c.

References rack_control::act_rcv_time, tcp_rack::app_limited_needs_set, ctf_fixed_maxseg(), tcp_rack::defer_options, rack_control::gp_bw, tcp_rack::gp_ready, tcpcb::gput_ack, tcpcb::gput_seq, tcpcb::gput_ts, HPTS_USEC_IN_MSEC, HPTS_USEC_IN_SEC, tcp_rack::in_probe_rtt, inpcb::inp_socket, rack_control::last_max_bw, tcp_rack::measure_saw_probe_rtt, MIN_GP_WIN, rack_control::num_measurements, PACE_PKT_OUTPUT, rack_sendmap::r_ack_arrival, tcp_rack::r_ctl, rack_sendmap::r_end, rack_sendmap::r_flags, rack_sendmap::r_rtr_cnt, rack_sendmap::r_start, rack_sendmap::r_tim_lastsent, RACK_ACKED, rack_apply_deferred_options(), rack_get_bw(), rack_get_measure_window(), rack_log_pacing_delay_calc(), rack_make_timely_judgement(), RACK_REQ_AVG, rack_set_cc_pacing(), rack_set_pace_segments(), rack_to_usec_ts(), rack_update_multiplier(), rack_wma_divisor, rack_control::rc_app_limited_cnt, tcp_rack::rc_dragged_bottom, rack_control::rc_first_appl, rack_control::rc_gp_cumack_ts, tcp_rack::rc_gp_dyn_mul, tcp_rack::rc_gp_filled, rack_control::rc_gp_high_rwnd, rack_control::rc_gp_lowrtt, rack_control::rc_gp_output_ts, tcp_rack::rc_gp_rtt_set, tcp_rack::rc_gp_saw_ca, tcp_rack::rc_gp_saw_rec, tcp_rack::rc_gp_saw_ss, rack_control::rc_gp_srtt, rack_control::rc_hpts_flags, rc_init_window(), tcp_rack::rc_inp, rack_control::rc_last_output_to, rack_control::rc_loss_at_start, rack_control::rc_loss_count, rack_control::rc_mtree, rack_control::rc_pace_min_segs, rack_control::rc_prev_gp_srtt, rack_control::rc_probertt_sndmax_atexit, rack_control::rc_rack_min_rtt, rack_control::rc_rtt_diff, tcp_rack::rc_tp, rack_control::req_measurements, SEQ_GEQ, SEQ_GT, SEQ_LT, tcpcb::snd_wnd, tcpcb::t_flags, tcpcb::t_inpcb, tcpcb::t_srtt, tcpcb::t_state, tcpcb::t_stats, tcpcb::t_stats_gput_prev, tcp_hpts_remove(), tcp_in_hpts(), tcp_tv_to_usectick(), TCPS_FIN_WAIT_1, TCPS_HAVEESTABLISHED, TF_GPUTINPROG, TSTMP_GEQ, VOI_TCP_GPUT, and VOI_TCP_GPUT_ND.

Referenced by rack_ack_received(), rack_enter_persist(), rack_enter_probertt(), and rack_exit_probertt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_do_lastack()

static int rack_do_lastack ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_segment()

void rack_do_segment ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
int32_t  drop_hdrlen,
int32_t  tlen,
uint8_t  iptos 
)
static

Definition at line 14456 of file rack.c.

References ctf_do_queued_segments(), INP_WUNLOCK, rack_do_segment_nounlock(), tcpcb::t_in_pkt, tcpcb::t_inpcb, and tcp_get_usecs().

Here is the call graph for this function:

◆ rack_do_segment_nounlock()

static int rack_do_segment_nounlock ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
int32_t  drop_hdrlen,
int32_t  tlen,
uint8_t  iptos,
int32_t  nxt_pkt,
struct timeval *  tv 
)
static

Definition at line 13901 of file rack.c.

References rack_control::act_rcv_time, tcp_log_bbr::applimited, BANDLIM_RST_OPENPORT, BBR_LOG_CWND, tcp_log_bbr::bw_inuse, CC_ALGO, CC_ECN, tcpcb::ccv, ctf_do_dropwithreset(), ctf_fixed_maxseg(), ctf_flight_size(), tcp_log_bbr::cur_del_rate, rack_control::current_round, tcp_log_bbr::cwnd_gain, tcp_log_bbr::delivered, tcp_log_bbr::delRate, tcp_log_bbr::epoch, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, tcp_rack::forced_ack, tcpcb::gput_ack, tcpcb::gput_seq, HPTS_USEC_IN_SEC, tcp_rack::in_probe_rtt, tcp_log_bbr::inflight, tcp_log_bbr::inhpts, INP_IPV6, inpcb::inp_socket, inpcb::inp_vflag, INP_WLOCK_ASSERT, IS_FASTOPEN, tcpcb::iss, tcp_log_bbr::lost, tcp_log_bbr::lt_epoch, M_ACKCMP, PACE_PKT_OUTPUT, PACE_TMR_MASK, tcp_log_bbr::pacing_gain, tcp_log_bbr::pkt_epoch, tcp_log_bbr::pkts_out, tcp_rack::r_ctl, tcp_rack::r_early, tcp_rack::r_ent_rec_ns, tcp_rack::r_fast_output, tcp_rack::r_might_revert, tcp_rack::r_state, tcp_rack::r_substate, tcp_rack::r_wanted_output, rack_cc_after_idle(), rack_check_probe_rtt(), rack_clear_rate_sample(), rack_cong_signal(), rack_do_compressed_ack_processing(), rack_free_trim(), rack_handle_probe_response(), rack_input_idle_reduces, rack_log_doseg_done(), rack_log_pacing_delay_calc(), tcp_rack::rack_no_prr, rack_proc_non_comp_ack, rack_sack_not_required, rack_set_pace_segments(), rack_set_state(), rack_control::rack_sf, rack_start_hpts_timer(), rack_timer_audit(), rack_validate_fo_sendwin_up(), rack_verbose_logging, rack_control::rc_agg_early, tcp_rack::rc_always_pace, tcp_rack::rc_gp_dyn_mul, rack_control::rc_gp_srtt, rack_control::rc_high_rwnd, rack_control::rc_hpts_flags, tcp_rack::rc_inp, rack_control::rc_last_output_to, rack_control::rc_mtree, rack_control::rc_num_maps_alloced, rack_control::rc_prr_sndcnt, rack_control::rc_rcvtime, rack_control::rc_sacked, rack_control::rc_time_probertt_starts, tcp_rack::rc_tp, rack_control::roundends, tcp_log_bbr::rttProp, sack_filter_clear(), SEQ_GT, SEQ_LEQ, tcp_rack::set_pacing_done_a_iw, tcpcb::snd_max, tcpcb::snd_scale, tcpcb::snd_una, tcpcb::snd_wnd, tcpcb::t_fb, tcpcb::t_fb_ptr, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_idle_reduce, tcpcb::t_inpcb, tcpcb::t_logstate, tcpcb::t_maxseg, tcpcb::t_rcvtime, tcpcb::t_rxtcur, tcpcb::t_state, tcpcb::t_stats, tcp_dooptions(), tcp_ecn_input_parallel_syn(), tcp_ecn_input_segment(), TCP_EI_STATUS_CLIENT_FIN, TCP_EI_STATUS_RST_IN_FRONT, tcp_fastopen_disable_path(), tcp_fastopen_update_cache(), tcp_get_flags(), tcp_get_usecs(), tcp_hpts_remove(), tcp_in_hpts(), tcp_log_end_status(), tcp_log_event_(), TCP_LOG_EVENTP, TCP_LOG_IN, TCP_LOG_STATE_OFF, tcp_mss(), tcp_rack_xmit_timer_commit(), tcp_set_hpts, tcp_switch_back_to_default(), tcp_tv_to_mssectick(), tcp_tv_to_usectick(), TCPS_CLOSING, TCPS_FIN_WAIT_1, TCPS_LISTEN, TCPS_SYN_SENT, TCPS_TIME_WAIT, TF_DELACK, TF_GPUTINPROG, TF_RCVD_SCALE, TF_RCVD_TSTMP, TF_REQ_SCALE, TF_REQ_TSTMP, TF_SACK_PERMIT, tcp_function_block::tfb_tcp_do_segment, tcp_log_bbr::timeStamp, tcpopt::to_flags, tcpopt::to_mss, TO_SYN, tcpopt::to_tfo_cookie, tcpopt::to_tfo_len, tcpopt::to_tsecr, tcpopt::to_tsval, tcpopt::to_wscale, TOF_FASTOPEN, TOF_MSS, TOF_SACKPERM, TOF_SCALE, TOF_TS, tcpcb::ts_offset, tcpcb::ts_recent, tcpcb::ts_recent_age, TSTMP_GT, tcp_log_stackspecific::u_bbr, tcp_rack::use_fixed_rate, tcp_log_bbr::use_lt_bw, V_drop_synfin, V_tcp_always_keepalive, V_tcp_tolerate_missing_ts, and VOI_TCP_FRWIN.

Referenced by rack_do_segment().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_do_syn_recv()

static int rack_do_syn_recv ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_syn_sent()

static int rack_do_syn_sent ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt,
uint8_t  iptos 
)
static

◆ rack_do_win_updates()

◆ rack_dtor()

static void rack_dtor ( void *  mem,
int32_t  size,
void *  arg 
)
static

Definition at line 20613 of file rack.c.

Referenced by tcp_addrack().

Here is the caller graph for this function:

◆ rack_enough_for_measurement()

static int rack_enough_for_measurement ( struct tcpcb tp,
struct tcp_rack rack,
tcp_seq  th_ack,
uint8_t quality 
)
static

◆ rack_enter_persist()

◆ rack_enter_probertt()

static void rack_enter_probertt ( struct tcp_rack rack,
uint32_t  us_cts 
)
static

ProbeRTT is a bit different in rack_pacing than in BBR. It is like BBR in that it uses the lowering of the RTT as a signal that we saw something new and counts from there for how long between. But it is different in that its quite simple. It does not play with the cwnd and wait until we get down to N segments outstanding and hold that for 200ms. Instead it just sets the pacing reduction rate to a set percentage (70 by default) and hold that for a number of recent GP Srtt's.

Definition at line 3489 of file rack.c.

References ctf_fixed_maxseg(), tcpcb::gput_seq, tcp_rack::in_probe_rtt, tcp_rack::measure_saw_probe_rtt, tcp_rack::r_ctl, rack_do_goodput_measurement(), rack_log_rtt_shrinks(), rack_per_of_gp_probertt, rack_control::rack_per_of_gp_probertt, rack_probertt_use_min_rtt_entry, RACK_QUALITY_PROBERTT, RACK_RTTS_ENTERPROBE, rack_set_prtt_target(), rack_control::rc_entry_gp_rtt, tcp_rack::rc_gp_dyn_mul, rack_control::rc_gp_min_rtt, rack_control::rc_gp_srtt, rack_control::rc_lower_rtt_us_cts, rack_control::rc_pace_min_segs, rack_control::rc_time_probertt_entered, rack_control::rc_time_probertt_starts, tcp_rack::rc_tp, SEQ_GT, tcpcb::snd_max, tcpcb::snd_una, tcpcb::t_flags, and TF_GPUTINPROG.

Referenced by rack_apply_updated_usrtt(), and rack_check_probe_rtt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_exit_persist()

◆ rack_exit_probertt()

static void rack_exit_probertt ( struct tcp_rack rack,
uint32_t  us_cts 
)
static

Definition at line 3543 of file rack.c.

References tcpcb::ccv, ctf_fixed_maxseg(), cc_var::flags, tcpcb::gput_seq, tcp_rack::in_probe_rtt, tcp_rack::r_ctl, rack_sendmap::r_flags, rack_sendmap::r_nseq_appl, rack_sendmap::r_start, RACK_APP_LIMITED, rack_atexit_prtt, rack_atexit_prtt_hbp, rack_do_goodput_measurement(), rack_log_rtt_shrinks(), rack_control::rack_per_of_gp_ca, rack_control::rack_per_of_gp_ss, rack_probe_rtt_sets_cwnd, rack_probertt_clear_is, rack_probertt_use_min_rtt_exit, RACK_QUALITY_PROBERTT, RACK_RTTS_EXITPROBE, rack_set_prtt_target(), rack_timely_min_segs, rack_control::rc_app_limited_cnt, rack_control::rc_end_appl, rack_control::rc_entry_gp_rtt, rack_control::rc_first_appl, tcp_rack::rc_gp_bwred, tcp_rack::rc_gp_incr, rack_control::rc_gp_min_rtt, rack_control::rc_gp_srtt, tcp_rack::rc_gp_timely_dec_cnt, tcp_rack::rc_gp_timely_inc_cnt, tcp_rack::rc_highly_buffered, rack_control::rc_lower_rtt_us_cts, rack_control::rc_mtree, rack_control::rc_pace_min_segs, rack_control::rc_probertt_sndmax_atexit, rack_control::rc_rtt_diff, rack_control::rc_target_probertt_flight, rack_control::rc_time_of_last_probertt, rack_control::rc_time_probertt_entered, rack_control::rc_time_probertt_starts, tcp_rack::rc_tp, SEQ_GT, tcpcb::snd_cwnd, tcpcb::snd_max, tcpcb::snd_ssthresh, tcpcb::snd_una, tcpcb::t_bytes_acked, tcpcb::t_flags, and TF_GPUTINPROG.

Referenced by rack_check_probe_rtt(), rack_exit_persist(), and rack_output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_fast_output()

static int rack_fast_output ( struct tcpcb tp,
struct tcp_rack rack,
uint64_t  ts_val,
uint32_t  cts,
uint32_t  ms_cts,
struct timeval *  tv,
long  tot_len,
int *  send_err 
)
static

Definition at line 16059 of file rack.c.

References tcp_log_bbr::applimited, tcp_log_bbr::bw_inuse, CNT_OF_MSS_OUT, ctf_fixed_maxseg(), ctf_flight_size(), rack_control::cwnd_to_use, tcp_log_bbr::delivered, ERRNO_UNK, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, tcp_rack::forced_ack, rack_control::fsb, rack_fast_send_blk::hoplimit, rack_fast_send_blk::hw_tls, in_pseudo(), tcp_log_bbr::inflight, tcp_log_bbr::inhpts, inpcb::inp_route, inpcb::inp_route6, inpcb::inp_socket, IP_DF, ip::ip_dst, ip::ip_len, ip::ip_off, ip_output(), ip::ip_tos, ip::ip_ttl, ip::ip_v, IPPROTO_TCP, IPPROTO_UDP, IPTOS_ECN_MASK, IPVERSION, KMOD_TCPSTAT_ADD, KMOD_TCPSTAT_INC, rack_fast_send_blk::left_to_send, tcp_log_bbr::lt_epoch, rack_fast_send_blk::m, tcp_log_bbr::pacing_gain, tcp_log_bbr::pkts_out, PROGRESS_START, r_ctl, tcp_rack::r_ctl, tcp_rack::r_fast_output, tcp_rack::r_is_v6, rack_fo_m_copym(), rack_fto_send, rack_get_bw(), rack_get_output_gain(), rack_get_pacing_delay(), RACK_HAD_PUSH, rack_log_output(), rack_log_progress_event(), tcp_rack::rack_no_prr, rack_out_size, RACK_SENT_FP, rack_sndbuf_autoscale(), rack_start_gp_measurement(), rack_start_hpts_timer(), rack_to_usec_ts(), rack_control::rc_agg_delayed, rack_control::rc_agg_early, tcp_rack::rc_inp, rack_control::rc_pace_max_segs, rack_control::rc_pace_min_segs, rack_control::rc_prr_sndcnt, rack_control::rc_sacked, rack_control::rc_tlp_rxt_last_time, tcp_rack::rc_tp, tcp_rack::rc_user_set_max_segs, tcpcb::rcv_nxt, tcpcb::rcv_scale, rack_fast_send_blk::recwin, rack_fast_send_blk::rfo_apply_push, in_addr::s_addr, tcpcb::snd_max, tcpcb::snd_nxt, SND_OUT_DATA, tcpcb::snd_una, tcpcb::snd_up, tcpcb::t_acktime, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_logstate, tcpcb::t_maxseg, tcpcb::t_port, tcpcb::t_rtseq, tcpcb::t_rtttime, tcpcb::t_sndzerowin, tcpcb::t_state, tcpcb::t_stats, tcpcb::t_tsomax, tcpcb::t_tsomaxsegcount, tcpcb::t_tsomaxsegsize, tcp_account_for_send(), tcp_addoptions(), tcp_ecn_output_established(), rack_fast_send_blk::tcp_flags, tcp_in_hpts(), rack_fast_send_blk::tcp_ip_hdr, rack_fast_send_blk::tcp_ip_hdr_len, tcp_log_event_(), TCP_LOG_OUT, TCP_LOG_STATE_OFF, TCP_MSS_ACCT_ATIMER, tcp_set_flags(), TCPS_HAVERCVDSYN, TCPS_SYN_RECEIVED, TF2_ECN_PERMIT, TF2_ECN_SND_ECE, TF2_PLPMTU_PMTUD, TF_ACKNOW, TF_DELACK, TF_GPUTINPROG, TF_RCVD_TSTMP, TF_RXWIN0SENT, TF_TSO, rack_fast_send_blk::th, tcp_log_bbr::timeStamp, tcp_log_buffer::tlb_errno, tcpopt::to_flags, tcpopt::to_tsecr, tcpopt::to_tsval, TOF_TS, tcpcb::ts_offset, tcpcb::ts_recent, tcp_log_stackspecific::u_bbr, rack_fast_send_blk::udp, UDPSTAT_INC, udphdr::uh_sum, udphdr::uh_ulen, V_path_mtu_discovery, V_tcp_do_tso, V_tcp_minmss, V_tcp_udp_tunneling_port, and VOI_TCP_TXPB.

Referenced by rack_output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_fast_rsm_output()

static int rack_fast_rsm_output ( struct tcpcb tp,
struct tcp_rack rack,
struct rack_sendmap rsm,
uint64_t  ts_val,
uint32_t  cts,
uint32_t  ms_cts,
struct timeval *  tv,
int  len,
uint8_t  doing_tlp 
)
static

Definition at line 15541 of file rack.c.

References tcp_log_bbr::applimited, tcp_log_bbr::bw_inuse, ctf_fixed_maxseg(), ctf_flight_size(), rack_control::cwnd_to_use, tcp_log_bbr::delivered, ERRNO_UNK, tcp_rack::fast_rsm_hack, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, tcp_rack::forced_ack, rack_control::fsb, rack_fast_send_blk::hoplimit, IN_FASTRECOVERY, in_pseudo(), tcp_log_bbr::inflight, tcp_log_bbr::inhpts, inpcb::inp_route, inpcb::inp_route6, IP_DF, ip::ip_dst, ip::ip_len, ip::ip_off, ip_output(), ip::ip_tos, ip::ip_ttl, ip::ip_v, IPPROTO_TCP, IPPROTO_UDP, IPTOS_ECN_MASK, IPVERSION, KMOD_TCPSTAT_ADD, KMOD_TCPSTAT_INC, rack_control::last_sent_tlp_len, rack_control::last_sent_tlp_seq, tcp_log_bbr::lt_epoch, rack_sendmap::m, rack_sendmap::orig_m_len, tcp_log_bbr::pacing_gain, tcp_log_bbr::pkts_out, tcp_rack::r_ctl, rack_sendmap::r_end, rack_sendmap::r_flags, rack_sendmap::r_hw_tls, tcp_rack::r_is_v6, rack_sendmap::r_start, rack_adjust_orig_mlen(), rack_fo_base_copym(), rack_get_bw(), rack_get_output_gain(), RACK_HAD_PUSH, RACK_HAS_FIN, rack_log_output(), tcp_rack::rack_no_prr, rack_out_size, RACK_SENT_FP, RACK_TLP, rack_tlp_retran, rack_tlp_retran_bytes, rack_to_usec_ts(), rack_control::rc_agg_delayed, rack_control::rc_agg_early, tcp_rack::rc_inp, tcp_rack::rc_last_sent_tlp_past_cumack, tcp_rack::rc_last_sent_tlp_seq_valid, rack_control::rc_pace_max_segs, rack_control::rc_pace_min_segs, rack_control::rc_prr_sndcnt, rack_control::rc_sacked, rack_control::rc_tlp_cnt_out, tcp_rack::rc_tlp_in_progress, tcp_rack::rc_tp, tcp_rack::rc_user_set_max_segs, tcpcb::rcv_nxt, tcpcb::rcv_scale, rack_fast_send_blk::recwin, rack_control::retran_during_recovery, in_addr::s_addr, rack_sendmap::soff, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_logstate, tcpcb::t_maxseg, tcpcb::t_port, tcpcb::t_sndrexmitpack, tcpcb::t_sndzerowin, tcpcb::t_state, tcpcb::t_stats, tcpcb::t_tsomax, tcpcb::t_tsomaxsegcount, tcpcb::t_tsomaxsegsize, tcp_account_for_send(), tcp_addoptions(), tcp_ecn_output_established(), tcp_in_hpts(), rack_fast_send_blk::tcp_ip_hdr, rack_fast_send_blk::tcp_ip_hdr_len, tcp_log_event_(), TCP_LOG_OUT, TCP_LOG_STATE_OFF, TCP_MSS_ACCT_ATIMER, tcp_set_flags(), TCPS_HAVERCVDSYN, TCPS_SYN_RECEIVED, TF2_ECN_PERMIT, TF2_ECN_SND_ECE, TF2_PLPMTU_PMTUD, TF_ACKNOW, TF_DELACK, TF_RCVD_TSTMP, TF_RXWIN0SENT, TF_TSO, rack_fast_send_blk::th, tcp_log_bbr::timeStamp, tcp_log_buffer::tlb_errno, tcpopt::to_flags, tcpopt::to_tsecr, tcpopt::to_tsval, TOF_TS, tcpcb::ts_offset, tcpcb::ts_recent, tcp_log_stackspecific::u_bbr, rack_fast_send_blk::udp, UDPSTAT_INC, udphdr::uh_sum, udphdr::uh_ulen, V_path_mtu_discovery, V_tcp_do_tso, V_tcp_minmss, V_tcp_udp_tunneling_port, and VOI_TCP_RETXPB.

Referenced by rack_output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_fastack()

static int rack_fastack ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  nxt_pkt,
uint32_t  cts 
)
static

Definition at line 10826 of file rack.c.

References BYTES_THIS_ACK, CC_ACK, CC_RTO_ERR, ctf_outstanding(), rack_control::dsack_byte_cnt, tcp_rack::gp_ready, tcp_rack::in_probe_rtt, IN_RECOVERY, inpcb::inp_socket, IP6_HDR_LEN, KMOD_TCPSTAT_ADD, KMOD_TCPSTAT_INC, tcpcb::last_ack_sent, tcpcb::max_sndwnd, PACE_PKT_OUTPUT, PACE_TMR_RXT, PROGRESS_CLEAR, tcp_rack::r_ctl, tcp_rack::r_fast_output, tcp_rack::r_wanted_output, rack_ack_received(), rack_adjust_sendmap(), rack_check_bottom_drag(), rack_collapsed_window(), rack_cong_signal(), rack_enter_persist(), rack_exit_persist(), rack_gain_for_fastoutput(), rack_log_ack(), rack_log_progress_event(), rack_log_wakeup(), RACK_REXMTVAL, rack_rto_max, rack_rto_min, RACK_TCPT_RANGESET, rack_timer_cancel(), rack_un_collapse_window(), rack_validate_fo_sendwin_up(), tcp_rack::rc_always_pace, tcp_rack::rc_gp_dyn_mul, tcp_rack::rc_has_collapsed, rack_control::rc_high_rwnd, rack_control::rc_hpts_flags, tcp_rack::rc_in_persist, rack_control::rc_pace_min_segs, rack_control::rc_rcvtime, rack_control::rc_sacked, rack_control::rc_tlp_cnt_out, tcp_rack::rc_tlp_in_progress, tcp_rack::rc_tp, rack_control::rc_went_idle_time, rack_control::retran_during_recovery, SEQ_GT, SEQ_LEQ, tcpcb::snd_max, tcpcb::snd_nxt, tcpcb::snd_una, tcpcb::snd_wl1, tcpcb::snd_wl2, tcpcb::snd_wnd, tcpcb::t_acktime, tcpcb::t_badrxtwin, tcpcb::t_dupacks, tcpcb::t_fb_ptr, tcpcb::t_flags, tcpcb::t_inpcb, tcpcb::t_rxtcur, tcpcb::t_rxtshift, tcpcb::t_state, TA_INPUT, tcp_get_usecs(), tcp_trace(), tcp_ts_getticks(), TCPS_HAVEESTABLISHED, TF_NEEDFIN, TF_NEEDSYN, TF_PREVVALID, TF_RCVD_TSTMP, rack_control::timer_slop, tcpopt::to_flags, tcpopt::to_tsval, TOF_TS, tcpcb::ts_recent, tcpcb::ts_recent_age, TSTMP_LT, and tcp_rack::use_fixed_rate.

Referenced by rack_do_established().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_fill_info()

◆ rack_find_high_nonack()

static struct rack_sendmap * rack_find_high_nonack ( struct tcp_rack rack,
struct rack_sendmap rsm 
)
static

Definition at line 4880 of file rack.c.

References rack_sendmap::r_flags, RACK_ACKED, and RACK_HAS_FIN.

Referenced by rack_timeout_tlp().

Here is the caller graph for this function:

◆ rack_find_lowest_rsm()

static struct rack_sendmap * rack_find_lowest_rsm ( struct tcp_rack rack)
static

Definition at line 4860 of file rack.c.

References tcp_rack::r_ctl, rack_sendmap::r_flags, RACK_ACKED, and rack_control::rc_tmap.

Referenced by rack_check_recovery_mode(), rack_timer_start(), and tcp_rack_output().

Here is the caller graph for this function:

◆ rack_fini()

◆ rack_fo_base_copym()

static struct mbuf * rack_fo_base_copym ( struct mbuf *  the_m,
uint32_t  the_off,
int32_t *  plen,
struct rack_fast_send_blk fsb,
int32_t  seglimit,
int32_t  segsize,
int  hw_tls 
)
static

Definition at line 15340 of file rack.c.

References rack_fast_send_blk::m, rack_fast_send_blk::o_m_len, and rack_fast_send_blk::off.

Referenced by rack_fast_rsm_output(), and rack_fo_m_copym().

Here is the caller graph for this function:

◆ rack_fo_m_copym()

static struct mbuf * rack_fo_m_copym ( struct tcp_rack rack,
int32_t *  plen,
int32_t  seglimit,
int32_t  segsize,
struct mbuf **  s_mb,
int *  s_soff 
)
static

Definition at line 15502 of file rack.c.

References rack_control::fsb, rack_fast_send_blk::hw_tls, rack_fast_send_blk::m, rack_fast_send_blk::o_m_len, rack_fast_send_blk::off, tcp_rack::r_ctl, and rack_fo_base_copym().

Referenced by rack_fast_output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_free()

◆ rack_free_trim()

static void rack_free_trim ( struct tcp_rack rack)
static

Definition at line 2862 of file rack.c.

References tcp_rack::r_ctl, rack_free_cache, rack_zone, rack_control::rc_free, and tcp_rack::rc_free_cnt.

Referenced by rack_do_compressed_ack_processing(), and rack_do_segment_nounlock().

Here is the caller graph for this function:

◆ rack_gain_for_fastoutput()

static void rack_gain_for_fastoutput ( struct tcp_rack rack,
struct tcpcb tp,
struct socket *  so,
uint32_t  acked_amount 
)
static

◆ rack_get_bw()

◆ rack_get_decrease()

static uint32_t rack_get_decrease ( struct tcp_rack rack,
uint32_t  curper,
int32_t  rtt_diff 
)
static

Definition at line 3248 of file rack.c.

References tcp_rack::r_ctl, rack_gp_decrease_per, and rack_control::rc_gp_min_rtt.

Referenced by rack_decrease_bw_mul().

Here is the caller graph for this function:

◆ rack_get_fixed_pacing_bw()

static uint64_t rack_get_fixed_pacing_bw ( struct tcp_rack rack)
static

◆ rack_get_measure_window()

static uint32_t rack_get_measure_window ( struct tcpcb tp,
struct tcp_rack rack 
)
static

◆ rack_get_output_bw()

static uint64_t rack_get_output_bw ( struct tcp_rack rack,
uint64_t  bw,
struct rack_sendmap rsm,
int *  capped 
)
static

◆ rack_get_output_gain()

◆ rack_get_pacing_delay()

static int32_t rack_get_pacing_delay ( struct tcp_rack rack,
struct tcpcb tp,
uint32_t  len,
struct rack_sendmap rsm,
uint32_t  segsiz 
)
static

We have four possible states here having to do with the previous time and this time. previous | this-time A) 0 | 0 – fill_cw not in the picture B) 1 | 0 – we were doing a fill-cw but now are not C) 1 | 1 – all rates from fill_cw D) 0 | 1 – we were doing non-fill and now we are filling

For case A, C and D we don't allow a drop. But for case B where we now our on our steady rate we do allow a drop.

Definition at line 14746 of file rack.c.

References bbr_control::crte, rack_control::crte, rack_control::crte_prev_rate, ctf_fixed_maxseg(), rack_control::cwnd_to_use, ETHERNET_SEGMENT_SIZE, rack_control::gp_bw, tcp_rack::gp_ready, HPTS_USEC_IN_MSEC, HPTS_USEC_IN_SEC, IN_FASTRECOVERY, tcp_rack::in_probe_rtt, rack_control::init_rate, inpcb::inp_route, inpcb::inp_snd_tag, rack_control::last_hw_bw_req, pace_to_fill_cwnd(), r_ctl, tcp_rack::r_ctl, tcp_rack::r_rr_config, tcp_rack::r_up_only, tcp_rack::r_via_fill_cw, tcp_rack::rack_attempt_hdwr_pace, rack_enobuf_hw_boost_mult, rack_enobuf_hw_max, rack_enobuf_hw_min, rack_get_bw(), rack_get_fixed_pacing_bw(), rack_get_output_bw(), tcp_rack::rack_hdrw_pacing, tcp_rack::rack_hdw_pace_ena, rack_hw_pace_extra_slots, rack_hw_pace_init_fail, rack_hw_pace_lost, rack_hw_rate_min, rack_hw_rate_to_low, RACK_INITIAL_RTO, rack_limit_time_with_srtt, rack_log_hdwr_pacing(), rack_log_pacing_delay_calc(), rack_set_pace_segments(), rack_slot_reduction, tcp_hwrate_limit_table::rate, tcp_rack::rc_ack_can_sendout_data, tcp_rack::rc_always_pace, tcp_rack::rc_inp, rack_control::rc_min_to, rack_control::rc_pace_max_segs, tcp_rack::rc_pace_to_cwnd, rack_control::rc_rack_largest_cwnd, rack_control::rc_rack_min_rtt, tcp_rack::rc_tp, tcp_hwrate_limit_table::rs_num_enobufs, RS_PACING_GEQ, tcpcb::t_flags, tcpcb::t_maxpeakrate, tcpcb::t_srtt, tcp_chg_pacing_rate(), tcp_get_pacing_burst_size(), tcp_rel_pacing_rate(), tcp_set_pacing_rate(), tcp_hwrate_limit_table::time_between, and tcp_rack::use_fixed_rate.

Referenced by rack_fast_output(), and rack_output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_get_pacing_len()

static uint32_t rack_get_pacing_len ( struct tcp_rack rack,
uint64_t  bw,
uint32_t  mss 
)
static

Definition at line 14624 of file rack.c.

References rack_control::crte, tcp_rack::r_ctl, rack_pace_one_seg, tcp_hwrate_limit_table::rate, tcp_rack::rc_force_max_seg, tcp_rack::rc_tp, tcp_rack::rc_user_set_max_segs, tcp_get_pacing_burst_size(), and tcp_rack::use_fixed_rate.

Referenced by rack_set_pace_segments().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_get_persists_timer_val()

static uint32_t rack_get_persists_timer_val ( struct tcpcb tp,
struct tcp_rack rack 
)
static

◆ rack_get_sockopt()

static int rack_get_sockopt ( struct inpcb inp,
struct sockopt *  sopt 
)
static

Definition at line 20315 of file rack.c.

References newreno::beta, newreno::beta_ecn, rack_control::bw_rate_cap, tcpcb::cc_algo, cc_var::cc_data, CCALGONAME_NEWRENO, CCF_HYSTART_ALLOWED, CCF_HYSTART_CAN_SH_CWND, CCF_HYSTART_CONS_SSTH, tcpcb::ccv, tcp_rack::defer_options, tcp_rack::do_detection, tcp_rack::fast_rsm_hack, cc_var::flags, rack_control::init_rate, INP_WUNLOCK, intotcpcb, cc_algo::name, tcp_rack::no_prr_addback, tcp_rack::r_ctl, tcp_rack::r_fill_less_agg, tcp_rack::r_limit_scw, tcp_rack::r_mbuf_queue, tcp_rack::r_rack_hw_rate_caps, tcp_rack::r_rr_config, tcp_rack::r_up_only, tcp_rack::r_use_cmp_ack, tcp_rack::r_use_labc_for_rec, tcp_rack::rack_enable_scwnd, rack_fill_info(), tcp_rack::rack_hdw_pace_ena, RACK_HYSTART_OFF, RACK_HYSTART_ON, RACK_HYSTART_ON_W_SC, RACK_HYSTART_ON_W_SC_C, tcp_rack::rack_no_prr, rack_control::rack_per_of_gp_ca, rack_control::rack_per_of_gp_ss, tcp_rack::rack_rec_nonrxt_use_cr, tcp_rack::rack_tlp_threshold_use, tcp_rack::rc_allow_data_af_clo, tcp_rack::rc_always_pace, rack_control::rc_early_recovery_segs, rack_control::rc_fixed_pacing_rate_ca, rack_control::rc_fixed_pacing_rate_rec, rack_control::rc_fixed_pacing_rate_ss, tcp_rack::rc_force_max_seg, tcp_rack::rc_gp_dyn_mul, tcp_rack::rc_init_win, tcp_rack::rc_labc, rack_control::rc_min_to, rack_control::rc_no_push_at_mrtt, tcp_rack::rc_pace_to_cwnd, tcp_rack::rc_pacing_cc_set, rack_control::rc_pkt_delay, rack_control::rc_prr_sendalot, tcp_rack::rc_rack_tmr_std_based, tcp_rack::rc_rack_use_dsack, rack_control::rc_rate_sample_method, rack_control::rc_reorder_fade, rack_control::rc_reorder_shift, rack_control::rc_saved_beta, rack_control::rc_tlp_cwnd_reduce, rack_control::rc_tlp_threshold, tcp_rack::rc_user_set_max_segs, rack_control::req_measurements, tcpcb::t_delayed_ack, tcpcb::t_fb_ptr, tcp_default_ctloutput(), rack_control::timer_slop, and tcp_rack::use_rack_rr.

Referenced by rack_ctloutput().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_grab_rtt()

static uint32_t rack_grab_rtt ( struct tcpcb tp,
struct tcp_rack rack 
)
static

Definition at line 5070 of file rack.c.

References RACK_INITIAL_RTO, tcp_rack::rc_rack_rtt, and tcpcb::t_srtt.

Referenced by rack_check_recovery_mode(), rack_timer_start(), and tcp_rack_output().

Here is the caller graph for this function:

◆ rack_handle_delayed_ack()

static void rack_handle_delayed_ack ( struct tcpcb tp,
struct tcp_rack rack,
int32_t  tlen,
int32_t  tfo_syn 
)
static

Definition at line 10324 of file rack.c.

References DELAY_ACK, tcp_rack::r_ctl, tcp_rack::r_wanted_output, rack_timer_cancel(), tcp_rack::rc_dack_mode, tcp_rack::rc_dack_toggle, rack_control::rc_rcvtime, tcpcb::t_flags, TF_ACKNOW, and TF_DELACK.

Referenced by rack_do_fastnewdata(), and rack_process_data().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_handle_might_revert()

static void rack_handle_might_revert ( struct tcpcb tp,
struct tcp_rack rack 
)
static

◆ rack_handle_probe_response()

static void rack_handle_probe_response ( struct tcp_rack rack,
uint32_t  tiwin,
uint32_t  us_cts 
)
static

◆ rack_handoff_ok()

static int rack_handoff_ok ( struct tcpcb tp)
static

◆ rack_hw_tls_change()

static void rack_hw_tls_change ( struct tcpcb tp,
int  chg 
)
static

◆ rack_increase_bw_mul()

◆ rack_init()

static int rack_init ( struct tcpcb tp)
static

Definition at line 12348 of file rack.c.

References rack_control::act_rcv_time, newreno::beta, newreno::beta_ecn, rack_control::bw_rate_cap, CC_NEWRENO_BETA_ECN_ENABLED, CCF_HYSTART_ALLOWED, CCF_HYSTART_CAN_SH_CWND, CCF_HYSTART_CONS_SSTH, tcpcb::ccv, rack_control::challenge_ack_ts, rack_control::cwnd_to_use, tcp_rack::do_detection, cc_var::flags, tcp_rack::gp_ready, inpcb::inp_flags2, INP_IPV6, inpcb::inp_socket, INP_SUPPORTS_MBUFQ, inpcb::inp_vflag, tcpcb::iss, rack_sendmap::m, newreno::newreno_flags, rack_control::opt_list, rack_sendmap::orig_m_len, tcp_rack::r_ctl, rack_sendmap::r_dupack, rack_sendmap::r_end, rack_sendmap::r_flags, rack_sendmap::r_in_tmap, tcp_rack::r_is_v6, tcp_rack::r_limit_scw, tcp_rack::r_mbuf_queue, rack_sendmap::r_no_rtt_allowed, tcp_rack::r_rack_hw_rate_caps, rack_sendmap::r_rtr_bytes, rack_sendmap::r_rtr_cnt, rack_sendmap::r_start, rack_sendmap::r_tim_lastsent, tcp_rack::r_up_only, tcp_rack::r_use_cmp_ack, rack_alloc(), rack_bw_rate_cap, rack_clear_rate_sample(), rack_convert_rtts(), rack_def_profile, rack_default_init_window, rack_disable_prr, rack_do_dyn_mul, rack_do_hystart, rack_dsack_std_based, rack_enable_hw_pacing, rack_enable_mqueue_for_nonpaced, tcp_rack::rack_enable_scwnd, rack_enable_shared_cwnd, rack_gp_no_rec_chg, RACK_HAS_FIN, RACK_HAS_SYN, tcp_rack::rack_hdw_pace_ena, rack_hptsi_segments, rack_hw_rate_caps, rack_hw_up_only, rack_ignore_data_after_close, rack_init_fsb(), rack_limits_scwnd, rack_log_rtt_shrinks(), rack_lower_cwnd_at_tlp, rack_min_to, tcp_rack::rack_no_prr, rack_non_rxt_use_cr, rack_pace_every_seg, rack_pcb_zone, rack_per_of_gp_ca, rack_control::rack_per_of_gp_ca, rack_per_of_gp_probertt, rack_control::rack_per_of_gp_probertt, rack_per_of_gp_rec, rack_control::rack_per_of_gp_rec, rack_per_of_gp_ss, rack_control::rack_per_of_gp_ss, rack_pkt_delay, rack_probertt_filter_life, rack_rate_sample_method, tcp_rack::rack_rec_nonrxt_use_cr, rack_reorder_fade, rack_reorder_thresh, rack_req_measurements, RACK_RTTS_INIT, rack_send_a_lot_in_prr, rack_set_cc_pacing(), rack_set_pace_segments(), rack_set_profile(), rack_start_hpts_timer(), rack_stop_all_timers(), rack_tlp_thresh, rack_tlp_threshold_use, tcp_rack::rack_tlp_threshold_use, rack_to_usec_ts(), rack_use_cmp_acks, rack_use_imac_dack, tcp_rack::rc_allow_data_af_clo, tcp_rack::rc_always_pace, tcp_rack::rc_dack_mode, tcp_rack::rc_force_max_seg, rack_control::rc_free, tcp_rack::rc_gp_dyn_mul, rack_control::rc_gp_min_rtt, tcp_rack::rc_gp_no_rec_chg, rack_control::rc_high_rwnd, rack_control::rc_highest_us_rtt, tcp_rack::rc_init_win, rc_init_window(), tcp_rack::rc_inp, tcp_rack::rc_labc, rack_control::rc_last_time_decay, rack_control::rc_lower_rtt_us_cts, rack_control::rc_lowest_us_rtt, rack_control::rc_min_to, rack_control::rc_mtree, rack_control::rc_pkt_delay, rack_control::rc_prr_sendalot, tcp_rack::rc_rack_tmr_std_based, tcp_rack::rc_rack_use_dsack, rack_control::rc_rate_sample_method, rack_control::rc_reorder_fade, rack_control::rc_reorder_shift, rack_control::rc_saved_beta, rack_control::rc_time_of_last_probertt, rack_control::rc_time_probertt_starts, rack_control::rc_tlp_cwnd_reduce, rack_control::rc_tlp_rxt_last_time, rack_control::rc_tlp_threshold, rack_control::rc_tmap, tcp_rack::rc_tp, tcp_rack::rc_user_set_max_segs, rack_control::req_measurements, rack_control::roundends, SEQ_GT, tcpcb::snd_cwnd, tcpcb::snd_max, tcpcb::snd_ssthresh, tcpcb::snd_una, tcpcb::snd_wnd, rack_sendmap::soff, tcpcb::t_delayed_ack, tcpcb::t_fb_ptr, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_inpcb, tcpcb::t_rttlow, tcpcb::t_rxtcur, tcp_can_enable_pacing(), tcp_get_usecs(), tcp_rexmit_slop, tcp_ts_getticks(), tcp_tv_to_mssectick(), tcp_tv_to_usectick(), TF_SENTFIN, rack_control::timer_slop, tcp_rack::use_fixed_rate, use_rack_rr, tcp_rack::use_rack_rr, V_newreno_beta_ecn, V_tcp_abc_l_var, and V_tcp_delack_enabled.

Here is the call graph for this function:

◆ rack_init_fsb()

static int rack_init_fsb ( struct tcpcb tp,
struct tcp_rack rack 
)
static

Definition at line 12327 of file rack.c.

References rack_control::fsb, tcp_rack::r_ctl, tcp_rack::r_fsb_inited, rack_fast_send_blk::tcp_ip_hdr, and rack_fast_send_blk::tcp_ip_hdr_len.

Referenced by rack_init().

Here is the caller graph for this function:

◆ rack_init_fsb_block()

static void rack_init_fsb_block ( struct tcpcb tp,
struct tcp_rack rack 
)
static

◆ rack_init_sysctls()

static void rack_init_sysctls ( void  )
static

Definition at line 776 of file rack.c.

References rack_ack_total, rack_alloc_limited_conns, rack_always_send_oldest, rack_apply_rtt_with_reduced_conf, rack_atexit_prtt, rack_atexit_prtt_hbp, rack_autosndbuf_inc, rack_bw_rate_cap, rack_clear_counter, rack_client_low_buf, rack_collapsed_win, rack_cwnd_block_ends_measure, rack_def_data_window, rack_def_profile, rack_default_init_window, rack_delayed_ack_time, rack_disable_prr, rack_do_dyn_mul, rack_do_hystart, rack_down_raise_thresh, rack_dsack_std_based, rack_enable_hw_pacing, rack_enable_mqueue_for_nonpaced, rack_enable_shared_cwnd, rack_enobuf_hw_boost_mult, rack_enobuf_hw_max, rack_enobuf_hw_min, rack_express_sack, rack_extended_rfo, rack_fto_rsm_send, rack_fto_send, rack_goal_bdp, rack_gp_decrease_per, rack_gp_increase_per, rack_gp_no_rec_chg, rack_gp_per_bw_mul_down, rack_gp_per_bw_mul_up, rack_gp_rtt_maxmul, rack_gp_rtt_mindiv, rack_gp_rtt_minmul, rack_hbp_thresh, rack_highest_move_thresh_seen, rack_highest_sack_thresh_seen, rack_hot_alloc, rack_hptsi_segments, rack_hw_pace_extra_slots, rack_hw_pace_init_fail, rack_hw_pace_lost, rack_hw_rate_caps, rack_hw_rate_min, rack_hw_rate_to_low, rack_hw_rwnd_factor, rack_hw_up_only, rack_ignore_data_after_close, rack_input_idle_reduces, rack_limit_time_with_srtt, rack_limited_retran, rack_limits_scwnd, rack_lower_cwnd_at_tlp, rack_max_abc_post_recovery, rack_max_drain_hbp, rack_max_drain_wait, rack_max_per_above, rack_min_measure_usec, rack_min_probertt_hold, rack_min_rtt_movement, rack_min_srtts, rack_min_to, rack_move_none, rack_move_some, rack_multi_single_eq, rack_must_drain, rack_nfto_resend, rack_non_fto_send, rack_non_rxt_use_cr, rack_opts_arry, RACK_OPTS_SIZE, rack_out_size, rack_pace_every_seg, rack_pace_one_seg, rack_per_lower_bound, rack_per_of_gp_ca, rack_per_of_gp_lowthresh, rack_per_of_gp_probertt, rack_per_of_gp_probertt_reduce, rack_per_of_gp_rec, rack_per_of_gp_ss, rack_per_upper_bound_ca, rack_per_upper_bound_ss, rack_persist_max, rack_persist_min, rack_persists_acks, rack_persists_loss, rack_persists_lost_ends, rack_persists_sends, rack_pkt_delay, rack_probe_rtt_safety_val, rack_probe_rtt_sets_cwnd, rack_probertt_clear_is, rack_probertt_filter_life, rack_probertt_gpsrtt_cnt_div, rack_probertt_gpsrtt_cnt_mul, rack_probertt_lower_within, rack_probertt_use_min_rtt_entry, rack_probertt_use_min_rtt_exit, rack_proc_non_comp_ack, rack_prr_addbackmax, rack_rate_sample_method, rack_reorder_fade, rack_reorder_thresh, rack_req_measurements, rack_req_segs, rack_rto_max, rack_rto_min, rack_rwnd_block_ends_measure, rack_sack_attacks_detected, rack_sack_attacks_reversed, rack_sack_not_required, rack_sack_proc_all, rack_sack_proc_restart, rack_sack_proc_short, rack_sack_skipped_acked, rack_sack_splits, rack_sack_total, rack_sack_used_next_merge, rack_sack_used_prev_merge, rack_saw_enetunreach, rack_saw_enobuf, rack_saw_enobuf_hw, rack_send_a_lot_in_prr, rack_slot_reduction, rack_split_limited, rack_stats_gets_ms_rtt, rack_sysctl_ctx, rack_sysctl_root, rack_time_between_probertt, rack_timely_dec_clear, rack_timely_int_timely_only, rack_timely_max_push_drop, rack_timely_max_push_rise, rack_timely_min_segs, rack_timely_no_stopping, rack_tlp_limit, rack_tlp_min, rack_tlp_newdata, rack_tlp_retran, rack_tlp_retran_bytes, rack_tlp_thresh, rack_tlp_threshold_use, rack_tlp_tot, rack_tlp_use_greater, rack_to_alloc, rack_to_alloc_emerg, rack_to_alloc_hard, rack_to_alloc_limited, rack_to_tot, rack_try_scwnd, rack_use_cmp_acks, rack_use_fsb, rack_use_imac_dack, rack_use_max_for_nobackoff, rack_use_rfo, rack_use_rsm_rfo, rack_verbose_logging, rack_wma_divisor, sysctl_rack_clear(), TCP_MSS_ACCT_SIZE, TLP_USE_TWO_ONE, use_rack_rr, and USE_RTT_LOW.

Referenced by tcp_addrack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_log_ack()

static void rack_log_ack ( struct tcpcb tp,
struct tcpopt to,
struct tcphdr *  th,
int  entered_rec,
int  dup_ack_struck 
)
static

Definition at line 9362 of file rack.c.

References rack_control::ack_count, BYTES_THIS_ACK, CC_NDUPACK, ctf_fixed_maxseg(), ctf_log_sack_filter(), rack_control::dsack_round_end, sackblk::end, IN_FASTRECOVERY, INP_WLOCK_ASSERT, PACE_PKT_OUTPUT, PROGRESS_UPDATE, tcp_rack::r_ctl, tcp_rack::r_early, rack_sendmap::r_end, tcp_rack::r_rr_config, rack_sendmap::r_start, tcp_rack::r_timer_override, tcp_rack::r_wanted_output, rack_ack_total, rack_cong_signal(), rack_do_decay(), rack_express_sack, rack_handle_might_revert(), rack_log_dsack_event(), rack_log_progress_event(), rack_log_to_prr(), rack_move_none, rack_move_some, tcp_rack::rack_no_prr, rack_note_dsack(), rack_proc_sack_blk(), rack_process_to_cumack(), rack_sack_total, rack_control::rack_sf, rack_timer_cancel(), rack_update_prr(), rack_control::rc_agg_early, tcp_rack::rc_dsack_round_seen, rack_control::rc_hpts_flags, tcp_rack::rc_inp, rack_control::rc_mtree, rack_control::rc_prr_sndcnt, rack_control::rc_rcvtime, rack_control::rc_resend, rack_control::rc_sacklast, rack_control::rc_tmap, tcp_rack::rc_tp, tcp_rack::sack_attack_disable, rack_control::sack_count, sack_filter_blks(), rack_control::sack_moved_extra, rack_control::sack_noextra_move, SEQ_GEQ, SEQ_GT, SEQ_LEQ, SEQ_LT, tcpcb::snd_max, tcpcb::snd_una, sackblk::start, tcpcb::t_acktime, tcpcb::t_fb_ptr, tcpcb::t_flags, tcpcb::t_inpcb, tcp_get_flags(), tcp_get_usecs(), tcp_in_hpts(), tcp_rack_output(), tcp_record_dsack(), tcpopt::to_flags, tcpopt::to_nsacks, tcpopt::to_sacks, and TOF_SACK.

Referenced by rack_fastack(), and rack_process_ack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_log_alt_to_to_cancel()

static void rack_log_alt_to_to_cancel ( struct tcp_rack rack,
uint32_t  flex1,
uint32_t  flex2,
uint32_t  flex3,
uint32_t  flex4,
uint32_t  flex5,
uint32_t  flex6,
uint16_t  flex7,
uint8_t  mod 
)
static

◆ rack_log_doseg_done()

◆ rack_log_dsack_event()

◆ rack_log_fsb()

◆ rack_log_hdwr_pacing()

◆ rack_log_hpts_diag()

◆ rack_log_input_packet()

static void rack_log_input_packet ( struct tcpcb tp,
struct tcp_rack rack,
struct tcp_ackent ae,
int  ackval,
uint32_t  high_seq 
)
static

◆ rack_log_map_chg()

◆ rack_log_output()

◆ rack_log_pacing_delay_calc()

static void rack_log_pacing_delay_calc ( struct tcp_rack rack,
uint32_t  len,
uint32_t  slot,
uint64_t  bw_est,
uint64_t  bw,
uint64_t  len_time,
int  method,
int  line,
struct rack_sendmap rsm,
uint8_t  quality 
)
static

Definition at line 14555 of file rack.c.

References tcp_rack::app_limited_needs_set, tcp_log_bbr::applimited, BBR_LOG_HPTSI_CALC, tcp_log_bbr::bbr_substate, tcp_log_bbr::bw_inuse, ctf_flight_size(), tcp_log_bbr::cur_del_rate, tcp_log_bbr::cwnd_gain, rack_control::cwnd_to_use, tcp_log_bbr::delRate, tcp_log_bbr::epoch, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, rack_control::gp_bw, tcp_rack::gp_ready, tcp_rack::in_probe_rtt, tcp_log_bbr::inflight, inpcb::inp_socket, tcp_log_bbr::lost, tcp_log_bbr::lt_epoch, tcp_rack::measure_saw_probe_rtt, tcp_log_bbr::pacing_gain, tcp_log_bbr::pkt_epoch, tcp_log_bbr::pkts_out, tcp_rack::r_ctl, tcp_rack::r_early, tcp_rack::r_late, rack_get_bw(), rack_get_output_gain(), rack_control::rack_per_of_gp_ca, rack_control::rack_per_of_gp_rec, rack_control::rack_per_of_gp_ss, tcp_rack::rc_ack_can_sendout_data, rack_control::rc_agg_delayed, rack_control::rc_agg_early, tcp_rack::rc_gp_filled, tcp_rack::rc_gp_saw_ca, tcp_rack::rc_gp_saw_rec, tcp_rack::rc_gp_saw_ss, tcp_rack::rc_inp, rack_control::rc_pace_max_segs, rack_control::rc_pace_min_segs, rack_control::rc_probertt_sndmax_atexit, rack_control::rc_rack_min_rtt, rack_control::rc_sacked, tcp_rack::rc_tp, tcp_log_bbr::rttProp, tcpcb::snd_ssthresh, tcpcb::t_logstate, tcp_get_usecs(), TCP_LOG_EVENTP, TCP_LOG_STATE_OFF, tcp_log_bbr::timeStamp, tcp_log_stackspecific::u_bbr, and tcp_log_bbr::use_lt_bw.

Referenced by pace_to_fill_cwnd(), rack_do_compressed_ack_processing(), rack_do_goodput_measurement(), rack_do_segment_nounlock(), rack_get_pacing_delay(), rack_need_set_test(), rack_output(), rack_process_option(), rack_process_timers(), rack_start_gp_measurement(), rack_start_hpts_timer(), rack_timeout_rxt(), rack_timeout_tlp(), and rack_update_seg().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_log_progress_event()

◆ rack_log_retran_reason()

◆ rack_log_rtt_sample()

◆ rack_log_rtt_sample_calc()

static void rack_log_rtt_sample_calc ( struct tcp_rack rack,
uint32_t  rtt,
uint32_t  send_time,
uint32_t  ack_time,
int  where 
)
static

◆ rack_log_rtt_shrinks()

static void rack_log_rtt_shrinks ( struct tcp_rack rack,
uint32_t  us_cts,
uint32_t  rtt,
uint32_t  line,
uint8_t  reas 
)
static

Definition at line 3419 of file rack.c.

References rack_control::act_rcv_time, tcp_log_bbr::applimited, BBR_LOG_RTT_SHRINKS, ctf_flight_size(), tcp_log_bbr::cur_del_rate, tcp_log_bbr::cwnd_gain, tcp_log_bbr::delivered, tcp_log_bbr::delRate, tcp_log_bbr::epoch, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, tcp_rack::forced_ack, tcp_rack::in_probe_rtt, tcp_log_bbr::inflight, inpcb::inp_socket, tcp_log_bbr::lost, tcp_log_bbr::lt_epoch, tcp_rack::measure_saw_probe_rtt, tcp_log_bbr::pacing_gain, tcp_log_bbr::pkt_epoch, tcp_log_bbr::pkts_out, tcp_rack::r_ctl, rack_get_bw(), rack_control::rack_per_of_gp_ca, rack_control::rack_per_of_gp_probertt, rack_control::rack_per_of_gp_rec, rack_control::rack_per_of_gp_ss, rack_control::rc_entry_gp_rtt, tcp_rack::rc_gp_dyn_mul, rack_control::rc_gp_min_rtt, rack_control::rc_gp_srtt, rack_control::rc_highest_us_rtt, tcp_rack::rc_highly_buffered, tcp_rack::rc_inp, rack_control::rc_lower_rtt_us_cts, rack_control::rc_lowest_us_rtt, rack_control::rc_prev_gp_srtt, rack_control::rc_rtt_diff, rack_control::rc_sacked, rack_control::rc_target_probertt_flight, rack_control::rc_time_probertt_entered, rack_control::rc_time_probertt_starts, tcp_rack::rc_tp, tcp_log_bbr::rttProp, tcpcb::t_logstate, tcp_get_usecs(), TCP_LOG_EVENTP, TCP_LOG_STATE_OFF, tcp_log_bbr::timeStamp, and tcp_log_stackspecific::u_bbr.

Referenced by rack_apply_updated_usrtt(), rack_check_probe_rtt(), rack_enter_probertt(), rack_exit_probertt(), rack_init(), and tcp_rack_xmit_timer_commit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_log_rtt_upd()

static void rack_log_rtt_upd ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  t,
uint32_t  len,
struct rack_sendmap rsm,
int  conf 
)
static

Definition at line 2216 of file rack.c.

References rack_control::act_rcv_time, tcp_rack::app_limited_needs_set, tcp_log_bbr::applimited, BBR_LOG_BBRRTT, tcp_log_bbr::bw_inuse, ctf_flight_size(), tcp_log_bbr::cur_del_rate, tcp_log_bbr::cwnd_gain, tcp_log_bbr::delivered, tcp_log_bbr::delRate, tcp_log_bbr::epoch, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, tcp_rack::forced_ack, tcp_rack::in_probe_rtt, tcp_log_bbr::inflight, tcp_log_bbr::inhpts, inpcb::inp_socket, tcpcb::iss, tcp_log_bbr::lost, tcp_log_bbr::lt_epoch, tcp_rack::measure_saw_probe_rtt, tcp_log_bbr::pacing_gain, tcp_log_bbr::pkt_epoch, tcp_log_bbr::pkts_out, tcp_rack::r_ctl, rack_sendmap::r_end, rack_sendmap::r_flags, rack_sendmap::r_rtr_cnt, rack_sendmap::r_start, rack_sendmap::r_tim_lastsent, rack_control::rack_rs, tcp_rack::rc_dragged_bottom, tcp_rack::rc_gp_dyn_mul, tcp_rack::rc_gp_filled, rack_control::rc_gp_srtt, tcp_rack::rc_highly_buffered, tcp_rack::rc_inp, rack_control::rc_lower_rtt_us_cts, rack_control::rc_rack_min_rtt, rack_control::rc_rate_sample_method, rack_control::rc_sacked, rack_control::rc_target_probertt_flight, rack_control::rc_time_probertt_entered, rack_control::rc_time_probertt_starts, tcp_rack::rc_tp, rack_rtt_sample::rs_flags, rack_rtt_sample::rs_rtt_highest, rack_rtt_sample::rs_rtt_lowest, rack_rtt_sample::rs_rtt_tot, rack_rtt_sample::rs_us_rtrcnt, tcp_log_bbr::rttProp, tcpcb::t_logstate, tcp_get_usecs(), tcp_in_hpts(), TCP_LOG_EVENTP, TCP_LOG_STATE_OFF, tcp_tv_to_usectick(), tcp_log_bbr::timeStamp, tcp_log_stackspecific::u_bbr, and tcp_log_bbr::use_lt_bw.

Referenced by tcp_rack_xmit_timer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_log_sack_passed()

static void rack_log_sack_passed ( struct tcpcb tp,
struct tcp_rack rack,
struct rack_sendmap rsm 
)
static

Definition at line 7959 of file rack.c.

References tcp_rack::r_ctl, rack_sendmap::r_flags, RACK_ACKED, RACK_SACK_PASSED, and rack_control::rc_tmap.

Referenced by rack_proc_sack_blk().

Here is the caller graph for this function:

◆ rack_log_timely()

static void rack_log_timely ( struct tcp_rack rack,
uint32_t  logged,
uint64_t  cur_bw,
uint64_t  low_bnd,
uint64_t  up_bnd,
int  line,
uint8_t  method 
)
static

◆ rack_log_to_cancel()

◆ rack_log_to_event()

◆ rack_log_to_processing()

◆ rack_log_to_prr()

◆ rack_log_to_start()

◆ rack_log_type_bbrsnd()

◆ rack_log_type_just_return()

◆ rack_log_type_pacing_sizes()

◆ rack_log_wakeup()

static void rack_log_wakeup ( struct tcpcb tp,
struct tcp_rack rack,
struct sockbuf *  sb,
uint32_t  len,
int  type 
)
static

◆ rack_make_timely_judgement()

static int32_t rack_make_timely_judgement ( struct tcp_rack rack,
uint32_t  rtt,
int32_t  rtt_diff,
uint32_t  prev_rtt 
)
static

Definition at line 3974 of file rack.c.

References tcp_rack::r_ctl, rack_gp_rtt_maxmul, rack_gp_rtt_mindiv, rack_gp_rtt_minmul, rack_log_timely(), and rack_control::rc_gp_min_rtt.

Referenced by rack_do_goodput_measurement().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_merge_rsm()

static struct rack_sendmap * rack_merge_rsm ( struct tcp_rack rack,
struct rack_sendmap l_rsm,
struct rack_sendmap r_rsm 
)
static

◆ rack_mtu_change()

◆ rack_need_set_test()

◆ rack_note_dsack()

◆ rack_output()

static int rack_output ( struct tcpcb tp)
static

Definition at line 16474 of file rack.c.

References tcp_rack::alloc_limit_reported, tcp_log_bbr::applimited, tcp_log_bbr::bw_inuse, CC_NDUPACK, tcpcb::client, CNT_OF_MSS_OUT, rack_control::crte, ctf_fixed_maxseg(), ctf_flight_size(), CTF_JR_APP_LIMITED, CTF_JR_ASSESSING, CTF_JR_CWND_LIMITED, CTF_JR_PRR, CTF_JR_RWND_LIMITED, CTF_JR_SENT_DATA, ctf_outstanding(), rack_control::cwnd_to_use, tcp_log_bbr::delivered, tcp_rack::do_detection, ERRNO_UNK, tcp_log_bbr::flex1, tcp_log_bbr::flex2, tcp_log_bbr::flex3, tcp_log_bbr::flex4, tcp_log_bbr::flex5, tcp_log_bbr::flex6, tcp_log_bbr::flex7, tcp_log_bbr::flex8, tcp_rack::forced_ack, rack_control::fsb, tcp_rack::gp_ready, tcpcb::gput_ack, tcpcb::gput_seq, rack_fast_send_blk::hoplimit, HPTS_USEC_IN_MSEC, rack_fast_send_blk::hw_tls, inpcb::in6p_outputopts, IN_FASTRECOVERY, tcp_rack::in_probe_rtt, in_pseudo(), tcp_log_bbr::inflight, tcp_log_bbr::inhpts, inpcb::inp_hpts_calls, inpcb::inp_inc, INP_IPV6, INP_IPV6PROTO, inpcb::inp_options, inpcb::inp_route, inpcb::inp_route6, inpcb::inp_socket, inpcb::inp_vflag, INP_WLOCK_ASSERT, IP_DF, ip::ip_dst, ip::ip_len, IP_MAXPACKET, IP_NO_SND_TAG_RL, ip::ip_off, ip_output(), ip::ip_tos, ip::ip_ttl, ip::ip_v, IPPROTO_TCP, IPPROTO_UDP, IPTOS_ECN_MASK, IPVERSION, IS_FASTOPEN, tcpcb::iss, KMOD_TCPSTAT_ADD, KMOD_TCPSTAT_INC, tcpcb::last_ack_sent, rack_control::last_sent_tlp_len, rack_control::last_sent_tlp_seq, rack_fast_send_blk::left_to_send, tcp_log_bbr::lt_epoch, rack_fast_send_blk::m, tcpcb::max_sndwnd, MIN_GP_WIN, rack_fast_send_blk::o_m_len, rack_fast_send_blk::off, PACE_PKT_OUTPUT, PACE_TMR_MASK, tcp_log_bbr::pacing_gain, tcp_log_bbr::pkts_out, PROGRESS_START, tcp_rack::r_ctl, tcp_rack::r_early, rack_sendmap::r_end, tcp_rack::r_ent_rec_ns, tcp_rack::r_fast_output, rack_sendmap::r_flags, tcp_rack::r_fsb_inited, tcp_rack::r_is_v6, rack_sendmap::r_just_ret, tcp_rack::r_late, tcp_rack::r_must_retran, rack_sendmap::r_nseq_appl, tcp_rack::r_rr_config, rack_sendmap::r_start, tcp_rack::r_state, tcp_rack::r_timer_override, tcp_rack::r_wanted_output, rack_alloc(), rack_alloc_limited_conns, RACK_APP_LIMITED, tcp_rack::rack_attempted_scwnd, rack_cc_after_idle(), rack_cong_signal(), rack_cwnd_block_ends_measure, tcp_rack::rack_enable_scwnd, rack_enter_persist(), rack_exit_probertt(), rack_fast_output(), rack_fast_rsm_output(), rack_free_cache, rack_get_bw(), rack_get_output_gain(), rack_get_pacing_delay(), RACK_HAD_PUSH, RACK_HAS_FIN, RACK_HAS_SYN, rack_hw_rwnd_factor, rack_init_fsb_block(), rack_log_fsb(), rack_log_output(), rack_log_pacing_delay_calc(), rack_log_progress_event(), rack_log_type_just_return(), rack_min_probertt_hold, RACK_MUST_RXT, rack_nfto_resend, tcp_rack::rack_no_prr, rack_non_fto_send, rack_out_size, rack_process_timers(), rack_rwnd_block_ends_measure, rack_saw_enetunreach, rack_saw_enobuf, rack_saw_enobuf_hw, tcp_rack::rack_scwnd_is_idle, RACK_SENT_SP, RACK_SENT_W_DSACK, rack_set_state(), rack_sndbuf_autoscale(), rack_start_gp_measurement(), rack_start_hpts_timer(), rack_timer_cancel(), RACK_TLP, rack_tlp_retran, rack_tlp_retran_bytes, rack_to_alloc_limited, rack_to_usec_ts(), rack_try_scwnd, rack_use_fsb, rack_use_rfo, rack_use_rsm_rfo, rack_what_can_we_send(), tcp_rack::rc_ack_can_sendout_data, rack_control::rc_agg_delayed, rack_control::rc_agg_early, tcp_rack::rc_always_pace, rack_control::rc_app_limited_cnt, rack_control::rc_end_appl, tcp_rack::rc_enobuf, rack_control::rc_first_appl, rack_control::rc_free, tcp_rack::rc_free_cnt, tcp_rack::rc_gp_saw_ca, tcp_rack::rc_gp_saw_rec, tcp_rack::rc_gp_saw_ss, rack_control::rc_gp_srtt, rack_control::rc_high_rwnd, rack_control::rc_hpts_flags, tcp_rack::rc_in_persist, tcp_rack::rc_inp, rack_control::rc_last_output_to, tcp_rack::rc_last_sent_tlp_past_cumack, tcp_rack::rc_last_sent_tlp_seq_valid, rack_control::rc_loss_count, rack_control::rc_lower_rtt_us_cts, rack_control::rc_min_to, rack_control::rc_mtree, rack_control::rc_num_maps_alloced, rack_control::rc_out_at_rto, rack_control::rc_pace_max_segs, rack_control::rc_pace_min_segs, rack_control::rc_prr_sendalot, rack_control::rc_prr_sndcnt, rack_control::rc_rcvtime, rack_control::rc_resend, rack_control::rc_sacked, rack_control::rc_scw_index, rack_control::rc_snd_max_at_rto, rack_control::rc_time_of_last_probertt, rack_control::rc_time_probertt_entered, rack_control::rc_time_probertt_starts, rack_control::rc_tlp_cnt_out, tcp_rack::rc_tlp_in_progress, rack_control::rc_tlp_new_data, rack_control::rc_tlp_rxt_last_time, rack_control::rc_tlpsend, rack_control::rc_tmap, tcp_rack::rc_tp, tcp_rack::rc_user_set_max_segs, rack_control::rc_went_idle_time, tcpcb::rcv_adv, tcpcb::rcv_numsacks, tcpcb::rcv_nxt, tcpcb::rcv_scale, rack_fast_send_blk::recwin, tcpcb::request_r_scale, rack_control::retran_during_recovery, tcpcb::rfbuf_ts, rack_fast_send_blk::rfo_apply_push, in_addr::s_addr, tcpcb::sackblks, SEQ_GEQ, SEQ_GT, SEQ_LEQ, SEQ_LT, tcpcb::server, SND_BLOCKED, tcpcb::snd_cwnd, SND_LIMITED, tcpcb::snd_max, tcpcb::snd_nxt, SND_OUT_ACK, SND_OUT_DATA, SND_OUT_FAIL, tcpcb::snd_ssthresh, tcpcb::snd_una, tcpcb::snd_up, tcpcb::snd_wnd, tcpcb::t_acktime, tcpcb::t_fb_ptr, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_idle_reduce, tcpcb::t_inpcb, tcpcb::t_lib, tcpcb::t_logstate, tcpcb::t_maxseg, tcpcb::t_port, tcpcb::t_rcvtime, tcpcb::t_rtseq, tcpcb::t_rtttime, tcpcb::t_rxtcur, tcpcb::t_rxtshift, tcpcb::t_sndrexmitpack, tcpcb::t_sndzerowin, tcpcb::t_softerror, tcpcb::t_state, tcpcb::t_stats, tcpcb::t_tfo_client_cookie_len, tcpcb::t_tfo_cookie, tcpcb::t_tsomax, tcpcb::t_tsomaxsegcount, tcpcb::t_tsomaxsegsize, tcp_account_for_send(), tcp_addoptions(), tcp_clean_dsack_blocks(), tcp_dsack_block_exists(), tcp_ecn_output_established(), tcp_ecn_output_syn_sent(), TCP_EI_STATUS_SERVER_FIN, TCP_EI_STATUS_SERVER_RST, TCP_FASTOPEN_COOKIE_LEN, rack_fast_send_blk::tcp_flags, tcp_get_usecs(), tcp_hpts_remove(), tcp_in_hpts(), rack_fast_send_blk::tcp_ip_hdr, rack_fast_send_blk::tcp_ip_hdr_len, tcp_log_end_status(), tcp_log_event_(), TCP_LOG_OUT, TCP_LOG_STATE_OFF, tcp_m_copym(), TCP_MSS_ACCT_ATIMER, TCP_MSS_ACCT_INPACE, TCP_MSS_ACCT_JUSTRET, TCP_MSS_ACCT_PERSIST, TCP_MSS_ACCT_SNDACK, tcp_mss_update(), tcp_mssopt(), tcp_offload_output(), TCP_PROBE5, tcp_rack_output(), tcp_rl_log_enobuf(), tcp_set_flags(), tcp_ts_getticks(), tcp_tv_to_mssectick(), tcpip_fillheaders(), TCPS_CLOSED, TCPS_ESTABLISHED, TCPS_HAVEESTABLISHED, TCPS_HAVERCVDFIN, TCPS_HAVERCVDSYN, TCPS_SYN_RECEIVED, TCPS_SYN_SENT, TF2_ECN_PERMIT, TF2_ECN_SND_ECE, TF2_PLPMTU_MAXSEGSNT, TF2_PLPMTU_PMTUD, TF_ACKNOW, TF_DELACK, TF_GPUTINPROG, TF_LASTIDLE, TF_MORETOCOME, TF_NEEDFIN, TF_NEEDSYN, TF_NODELAY, TF_NOOPT, TF_NOPUSH, TF_RCVD_TSTMP, TF_REQ_SCALE, TF_REQ_TSTMP, TF_RXWIN0SENT, TF_SACK_PERMIT, TF_SENTFIN, TF_SIGNATURE, TF_TOE, TF_TSO, TF_WASCRECOVERY, TF_WASFRECOVERY, rack_fast_send_blk::th, tcp_log_bbr::timeStamp, tcp_log_buffer::tlb_errno, tcpopt::to_flags, tcpopt::to_mss, tcpopt::to_nsacks, tcpopt::to_sacks, tcpopt::to_signature, tcpopt::to_tfo_cookie, tcpopt::to_tfo_len, tcpopt::to_tsecr, tcpopt::to_tsval, tcpopt::to_wscale, TOF_FASTOPEN, TOF_MSS, TOF_SACK, TOF_SACKPERM, TOF_SCALE, TOF_SIGNATURE, TOF_TS, tcpcb::ts_offset, tcpcb::ts_recent, TSTMP_GEQ, TSTMP_GT, tcp_log_stackspecific::u_bbr, rack_fast_send_blk::udp, UDPSTAT_INC, udphdr::uh_dport, udphdr::uh_sport, udphdr::uh_sum, udphdr::uh_ulen, tcp_rack::use_rack_rr, V_path_mtu_discovery, V_tcp_do_ecn, V_tcp_do_tso, V_tcp_map_entries_limit, V_tcp_minmss, V_tcp_udp_tunneling_overhead, V_tcp_udp_tunneling_port, VOI_TCP_RETXPB, and VOI_TCP_TXPB.

Referenced by rack_process_option().

Here is the caller graph for this function:

◆ rack_peer_reneges()

static void rack_peer_reneges ( struct tcp_rack rack,
struct rack_sendmap rsm,
tcp_seq  th_ack 
)
inlinestatic

◆ rack_post_recovery()

◆ rack_proc_sack_blk()

static uint32_t rack_proc_sack_blk ( struct tcpcb tp,
struct tcp_rack rack,
struct sackblk sack,
struct tcpopt to,
struct rack_sendmap **  prsm,
uint32_t  cts,
int *  moved_two 
)
static

Need to split this in two pieces the before and after, the before remains in the map, the after must be added. In other words we have: rsm |-----------—| sackblk |----—> rsm will become rsm |—| and nrsm will be the sacked piece nrsm |-------—|

But before we start down that path lets see if the sack spans over on top of the next guy and it is already sacked.

So the next one is already acked, and we can thus by hookery use our stack_map to reflect the piece being sacked and then adjust the two tree entries moving the start and ends around. So we start like: rsm |---------—| (not-acked) next |--------—| (acked) sackblk |-----—> We want to end like so: rsm |---—| (not-acked) next |--------------—| (acked) nrsm |--—| Where nrsm is a temporary stack piece we use to update all the gizmos.

We can't use any hookery here, so we need to split the map. We enter like so: rsm |-----—| sackblk |--—> We will add the new block nrsm and that will be the new portion, and then fall through after reseting rsm. So we split and look like this: rsm |-—| sackblk |--—> nrsm |—| We then fall through reseting rsm to nrsm, so the next block picks it up.

The end of this block is either beyond this guy or right at this guy. I.e.: rsm — |--—| end |--—| <or> end |------—|

The end of this sack block is smaller than our rsm i.e.: rsm — |--—| end |–|

Goal, we want the right remainder of rsm to shrink in place and span from (rsm->r_start = end) to rsm->r_end. We want to expand prev to go all the way to prev->r_end <- end. so in the tree we have before: prev |-----—| (acked) rsm |----—| (non-acked) sackblk |-| We churn it so we end up with prev |-------—| (acked) rsm |--—| (non-acked) nrsm |-| (temporary)

Note if either prev/rsm is a TLP we don't do this.

This is the case where our previous block is not acked either, so we must split the block in two.

In this case nrsm becomes nrsm->r_start = end; nrsm->r_end = rsm->r_end; which is un-acked. <and> rsm->r_end = nrsm->r_start; i.e. the remaining un-acked piece is left on the left hand side.

So we start like this rsm |-------—| (not acked) sackblk |—| build it so we have rsm |—| (acked) nrsm |---—| (not acked)

Definition at line 8136 of file rack.c.

References rack_control::act_rcv_time, tcp_rack::app_limited_needs_set, sackblk::end, is_rsm_inside_declared_tlp_block(), rack_control::last_tlp_acked_end, rack_control::last_tlp_acked_start, MAP_SACK_M1, MAP_SACK_M2, MAP_SACK_M3, MAP_SACK_M4, MAP_SACK_M5, next, rack_sendmap::r_ack_arrival, tcp_rack::r_ctl, rack_sendmap::r_dupack, rack_sendmap::r_end, rack_sendmap::r_flags, rack_sendmap::r_in_tmap, rack_sendmap::r_just_ret, rack_sendmap::r_rtr_cnt, rack_sendmap::r_start, RACK_ACKED, rack_alloc_limit(), rack_clone_rsm(), RACK_LIMIT_TYPE_SPLIT, rack_log_dsack_event(), rack_log_map_chg(), rack_log_retran_reason(), rack_log_sack_passed(), rack_merge_rsm(), rack_need_set_test(), RACK_SACK_PASSED, rack_sack_proc_all, rack_sack_proc_short, rack_sack_skipped_acked, rack_sack_splits, rack_sack_used_next_merge, rack_sack_used_prev_merge, rack_setup_offset_for_rsm(), RACK_TLP, rack_to_usec_ts(), rack_update_rtt(), RACK_USE_END, tcp_rack::rc_last_tlp_acked_set, tcp_rack::rc_last_tlp_past_cumack, rack_control::rc_mtree, rack_control::rc_reorder_ts, rack_control::rc_sacked, rack_control::rc_sacklast, rack_control::rc_tmap, SACKED, SEQ_GEQ, SEQ_GT, SEQ_LT, tcpcb::snd_una, and sackblk::start.

Referenced by rack_log_ack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_process_ack()

static int rack_process_ack ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
struct tcpopt to,
uint32_t  tiwin,
int32_t  tlen,
int32_t *  ofia,
int32_t  thflags,
int32_t *  ret_val 
)
static

Definition at line 10005 of file rack.c.

References __ctf_do_dropafterack(), rack_control::act_rcv_time, BANDLIM_UNLIMITED, BYTES_THIS_ACK, CC_ACK, CC_RTO_ERR, rack_control::challenge_ack_cnt, rack_control::challenge_ack_ts, ctf_do_dropwithreset(), ctf_fixed_maxseg(), rack_control::dsack_byte_cnt, tcp_rack::gp_ready, IN_FASTRECOVERY, tcp_rack::in_probe_rtt, IN_RECOVERY, inpcb::inp_socket, INP_WLOCK_ASSERT, KMOD_TCPSTAT_ADD, PACE_PKT_OUTPUT, PACE_TMR_RXT, tcp_rack::probe_not_answered, PROGRESS_CLEAR, tcp_rack::r_ctl, tcp_rack::r_wanted_output, rack_ack_received(), rack_adjust_sendmap(), rack_check_bottom_drag(), rack_cong_signal(), rack_log_ack(), rack_log_progress_event(), rack_log_wakeup(), rack_post_recovery(), RACK_REXMTVAL, rack_rto_max, rack_rto_min, rack_control::rack_sf, rack_strike_dupack(), RACK_TCPT_RANGESET, rack_timer_cancel(), tcp_rack::rc_always_pace, tcp_rack::rc_gp_dyn_mul, rack_control::rc_hpts_flags, tcp_rack::rc_in_persist, rack_control::rc_rcvtime, rack_control::rc_reorder_ts, rack_control::rc_tlp_cnt_out, tcp_rack::rc_tlp_in_progress, tcp_rack::rc_tp, rack_control::rc_went_idle_time, tcpcb::rcv_scale, tcpcb::request_r_scale, rack_control::retran_during_recovery, sack_filter_clear(), SEQ_GEQ, SEQ_GT, SEQ_LEQ, SEQ_LT, tcpcb::snd_max, tcpcb::snd_nxt, tcpcb::snd_recover, tcpcb::snd_una, tcpcb::snd_wnd, tcpcb::t_acktime, tcpcb::t_badrxtwin, tcpcb::t_fb_ptr, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_inpcb, tcpcb::t_rxtcur, tcpcb::t_rxtshift, tcpcb::t_state, tcp_close(), TCP_EI_STATUS_SERVER_RST, tcp_get_usecs(), tcp_log_end_status(), tcp_rack_partialack(), tcp_tv_to_usectick(), TCPS_FIN_WAIT_1, TF2_DROP_AF_DATA, TF_NEEDSYN, TF_PREVVALID, TF_RCVD_SCALE, TF_RCVD_TSTMP, TF_REQ_SCALE, TF_SENTFIN, rack_control::timer_slop, tcpopt::to_flags, tcpopt::to_nsacks, TOF_SACK, and tcp_rack::use_fixed_rate.

Referenced by rack_do_close_wait(), rack_do_closing(), rack_do_established(), rack_do_fin_wait_1(), rack_do_fin_wait_2(), rack_do_lastack(), rack_do_syn_recv(), and rack_do_syn_sent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_process_data()

static int rack_process_data ( struct mbuf *  m,
struct tcphdr *  th,
struct socket *  so,
struct tcpcb tp,
int32_t  drop_hdrlen,
int32_t  tlen,
uint32_t  tiwin,
int32_t  thflags,
int32_t  nxt_pkt 
)
static

Definition at line 10389 of file rack.c.

References ctf_outstanding(), sackblk::end, inpcb::inp_socket, INP_WLOCK_ASSERT, IS_FASTOPEN, KMOD_TCPSTAT_ADD, KMOD_TCPSTAT_INC, tcpcb::max_sndwnd, tcp_rack::r_ctl, tcp_rack::r_wanted_output, rack_collapsed_window(), rack_enter_persist(), rack_exit_persist(), rack_handle_delayed_ack(), rack_log_wakeup(), RACK_OPTS_INC, rack_timer_cancel(), rack_un_collapse_window(), rack_validate_fo_sendwin_up(), tcp_rack::rc_has_collapsed, rack_control::rc_high_rwnd, tcp_rack::rc_in_persist, rack_control::rc_pace_min_segs, rack_control::rc_rcvtime, tcpcb::rcv_numsacks, tcpcb::rcv_nxt, tcpcb::rcv_up, tcpcb::sackblks, SEGQ_EMPTY, SEQ_GT, SEQ_LT, tcpcb::snd_max, tcpcb::snd_nxt, tcpcb::snd_una, tcpcb::snd_wl1, tcpcb::snd_wl2, tcpcb::snd_wnd, sackblk::start, tcpcb::t_fb_ptr, tcpcb::t_fbyte_in, tcpcb::t_fbyte_out, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_inpcb, tcpcb::t_starttime, tcpcb::t_state, tcp_get_flags(), tcp_reass(), tcp_state_change(), tcp_twstart(), tcp_update_dsack_list(), tcp_update_sack_list(), TCPS_CLOSE_WAIT, TCPS_CLOSING, TCPS_ESTABLISHED, TCPS_FIN_WAIT_1, TCPS_FIN_WAIT_2, TCPS_HAVEESTABLISHED, TCPS_HAVERCVDFIN, TCPS_SYN_RECEIVED, TF2_DROP_AF_DATA, TF2_FBYTES_COMPLETE, TF_ACKNOW, TF_DELACK, TF_NEEDSYN, TF_SACK_PERMIT, and TF_WAKESOR.

Referenced by rack_do_close_wait(), rack_do_closing(), rack_do_established(), rack_do_fin_wait_1(), rack_do_fin_wait_2(), rack_do_lastack(), rack_do_syn_recv(), and rack_do_syn_sent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_process_option()

static int rack_process_option ( struct tcpcb tp,
struct tcp_rack rack,
int  sopt_name,
uint32_t  optval,
uint64_t  loptval 
)
static

Definition at line 19394 of file rack.c.

References newreno::beta, newreno::beta_ecn, rack_control::bw_rate_cap, CC_ALGO, tcpcb::cc_algo, CC_NEWRENO_BETA, CC_NEWRENO_BETA_ECN, CC_NEWRENO_BETA_ECN_ENABLED, CCALGONAME_NEWRENO, CCF_HYSTART_ALLOWED, CCF_HYSTART_CAN_SH_CWND, CCF_HYSTART_CONS_SSTH, tcpcb::ccv, rack_control::crte, tcp_rack::defer_options, tcp_rack::do_detection, tcp_rack::fast_rsm_hack, cc_var::flags, tcp_rack::gp_ready, rack_control::init_rate, inpcb::inp_flags2, INP_MBUF_ACKCMP, INP_SUPPORTS_MBUFQ, tcpcb::iss, cc_algo::name, cc_newreno_opts::name, newreno::newreno_flags, tcp_rack::no_prr_addback, tcp_rack::r_ctl, tcp_rack::r_fill_less_agg, tcp_rack::r_limit_scw, tcp_rack::r_mbuf_queue, tcp_rack::r_rack_hw_rate_caps, tcp_rack::r_rr_config, tcp_rack::r_up_only, tcp_rack::r_use_cmp_ack, tcp_rack::r_use_labc_for_rec, tcp_rack::rack_attempt_hdwr_pace, rack_default_init_window, rack_do_hystart, tcp_rack::rack_enable_scwnd, rack_gp_rtt_maxmul, tcp_rack::rack_hdrw_pacing, tcp_rack::rack_hdw_pace_ena, RACK_HYSTART_ON, RACK_HYSTART_ON_W_SC, rack_log_dsack_event(), rack_log_pacing_delay_calc(), tcp_rack::rack_no_prr, RACK_OPTS_INC, rack_output(), rack_control::rack_per_of_gp_ca, rack_control::rack_per_of_gp_rec, rack_control::rack_per_of_gp_ss, tcp_rack::rack_rec_nonrxt_use_cr, RACK_REXMTVAL, rack_rto_max, rack_rto_min, rack_set_cc_pacing(), rack_set_pace_segments(), rack_set_profile(), RACK_TCPT_RANGESET, tcp_rack::rack_tlp_threshold_use, rack_undo_cc_pacing(), rack_update_seg(), tcp_rack::rc_allow_data_af_clo, tcp_rack::rc_always_pace, rack_control::rc_early_recovery_segs, rack_control::rc_fixed_pacing_rate_ca, rack_control::rc_fixed_pacing_rate_rec, rack_control::rc_fixed_pacing_rate_ss, tcp_rack::rc_force_max_seg, tcp_rack::rc_gp_dyn_mul, tcp_rack::rc_init_win, rc_init_window(), tcp_rack::rc_inp, tcp_rack::rc_labc, rack_control::rc_min_to, rack_control::rc_no_push_at_mrtt, tcp_rack::rc_pace_fill_if_rttin_range, tcp_rack::rc_pace_to_cwnd, tcp_rack::rc_pacing_cc_set, rack_control::rc_pkt_delay, rack_control::rc_prr_sendalot, tcp_rack::rc_rack_tmr_std_based, tcp_rack::rc_rack_use_dsack, rack_control::rc_rate_sample_method, rack_control::rc_reorder_fade, rack_control::rc_reorder_shift, rack_control::rc_saved_beta, rack_control::rc_tlp_cwnd_reduce, rack_control::rc_tlp_threshold, tcp_rack::rc_tp, tcp_rack::rc_user_set_max_segs, rack_control::req_measurements, tcp_rack::rtt_limit_mul, SEQ_GT, tcpcb::snd_cwnd, tcpcb::snd_max, tcpcb::t_delayed_ack, tcpcb::t_flags, tcpcb::t_inpcb, tcpcb::t_maxpeakrate, tcpcb::t_rxtcur, tcpcb::t_srtt, tcpcb::t_state, tcp_can_enable_pacing(), tcp_decrement_paced_conn(), tcp_rel_pacing_rate(), TCPS_HAVEESTABLISHED, TF_ACKNOW, TF_DELACK, rack_control::timer_slop, TLP_USE_ID, TLP_USE_TWO_TWO, tcp_rack::use_fixed_rate, tcp_rack::use_rack_rr, USE_RTT_AVG, USE_RTT_HIGH, USE_RTT_LOW, and cc_newreno_opts::val.

Referenced by rack_apply_deferred_options(), and rack_set_sockopt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_process_timers()

◆ rack_process_to_cumack()

static void rack_process_to_cumack ( struct tcpcb tp,
struct tcp_rack rack,
register uint32_t  th_ack,
uint32_t  cts,
struct tcpopt to 
)
static

Definition at line 8816 of file rack.c.

References rack_control::act_rcv_time, tcp_rack::app_limited_needs_set, CC_RTO_ERR, CUM_ACKED, is_rsm_inside_declared_tlp_block(), tcpcb::iss, rack_control::last_sent_tlp_len, rack_control::last_sent_tlp_seq, rack_control::last_tlp_acked_end, rack_control::last_tlp_acked_start, rack_sendmap::m, MAP_FREE, MAP_TRIM_HEAD, rack_sendmap::orig_m_len, rack_sendmap::r_ack_arrival, tcp_rack::r_ctl, rack_sendmap::r_dupack, rack_sendmap::r_end, tcp_rack::r_ent_rec_ns, rack_sendmap::r_flags, rack_sendmap::r_in_tmap, tcp_rack::r_might_revert, rack_sendmap::r_rtr_bytes, rack_sendmap::r_rtr_cnt, rack_sendmap::r_start, tcp_rack::r_state, rack_sendmap::r_tim_lastsent, tcp_rack::r_wanted_output, RACK_ACKED, rack_adjust_orig_mlen(), rack_cong_signal(), rack_free(), rack_log_dsack_event(), rack_log_map_chg(), rack_log_retran_reason(), rack_need_set_test(), rack_peer_reneges(), RACK_SACK_PASSED, RACK_TLP, RACK_TO_REXT, rack_to_usec_ts(), rack_ts_to_msec(), rack_update_rtt(), RACK_USE_BEG, RACK_USE_END_OR_THACK, rack_control::rc_gp_cumack_ts, rack_control::rc_holes_rxt, tcp_rack::rc_last_sent_tlp_past_cumack, tcp_rack::rc_last_sent_tlp_seq_valid, tcp_rack::rc_last_tlp_acked_set, tcp_rack::rc_last_tlp_past_cumack, rack_control::rc_mtree, rack_control::rc_reorder_ts, rack_control::rc_sacked, rack_control::rc_tmap, SEQ_GEQ, SEQ_GT, SEQ_LT, tcpcb::snd_max, tcpcb::snd_nxt, tcpcb::snd_una, rack_sendmap::soff, tcpcb::t_flags, tcpcb::t_state, TF_PREVVALID, TF_RCVD_TSTMP, TF_SENTFIN, tcpopt::to_flags, tcpopt::to_tsecr, and TOF_TS.

Referenced by rack_do_compressed_ack_processing(), and rack_log_ack().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_pru_options()

static int rack_pru_options ( struct tcpcb tp,
int  flags 
)
static

Definition at line 20055 of file rack.c.

◆ rack_remxt_tmr()

◆ rack_set_cc_pacing()

◆ rack_set_pace_segments()

◆ rack_set_profile()

◆ rack_set_prtt_target()

static void rack_set_prtt_target ( struct tcp_rack rack,
uint32_t  segsiz,
uint32_t  rtt 
)
static

Definition at line 3470 of file rack.c.

References HPTS_USEC_IN_SEC, tcp_rack::r_ctl, rack_get_bw(), rack_timely_min_segs, and rack_control::rc_target_probertt_flight.

Referenced by rack_enter_probertt(), and rack_exit_probertt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_set_sockopt()

◆ rack_set_state()

◆ rack_setup_offset_for_rsm()

static void rack_setup_offset_for_rsm ( struct rack_sendmap src_rsm,
struct rack_sendmap rsm 
)
static

Definition at line 5889 of file rack.c.

References rack_sendmap::m, rack_sendmap::orig_m_len, rack_sendmap::r_end, rack_sendmap::r_start, rack_adjust_orig_mlen(), and rack_sendmap::soff.

Referenced by rack_clone_rsm(), and rack_proc_sack_blk().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_sndbuf_autoscale()

static void rack_sndbuf_autoscale ( struct tcp_rack rack)
static

◆ rack_start_gp_measurement()

◆ rack_start_hpts_timer()

static void rack_start_hpts_timer ( struct tcp_rack rack,
struct tcpcb tp,
uint32_t  cts,
int32_t  slot,
uint32_t  tot_len_this_send,
int  sup_rack 
)
static

Turn off all the flags for queuing by default. The flags have important meanings to what happens when LRO interacts with the transport. Most likely (by default now) mbuf_queueing and ack compression are on. So the transport has a couple of flags that control what happens (if those are not on then these flags won't have any effect since it won't go through the queuing LRO path).

INP_MBUF_QUEUE_READY - This flags says that I am busy pacing output, so don't disturb. But it also means LRO can wake me if there is a SACK arrival.

INP_DONT_SACK_QUEUE - This flag is used in conjunction with the above flag (QUEUE_READY) and when present it says don't even wake me if a SACK arrives.

The idea behind these flags is that if we are pacing we set the MBUF_QUEUE_READY and only get woken up if a SACK arrives (which could change things) or if our pacing timer expires. If, however, we have a rack timer running, then we don't even want a sack to wake us since the rack timer has to expire before we can send.

Other cases should usually have none of the flags set so LRO can call into us.

Definition at line 5527 of file rack.c.

References delayed_ack, tcp_rack::gp_ready, HPTS_TICKS_PER_SLOT, HPTS_USEC_TO_SLOTS, tcp_rack::in_probe_rtt, INP_DONT_SACK_QUEUE, inpcb::inp_flags2, INP_MBUF_QUEUE_READY, inpcb::inp_socket, PACE_PKT_OUTPUT, PACE_TMR_DELACK, PACE_TMR_KEEP, PACE_TMR_MASK, PACE_TMR_RACK, PACE_TMR_RXT, PACE_TMR_TLP, tcp_rack::r_ctl, tcp_rack::r_early, tcp_rack::r_late, tcp_rack::r_rr_config, rack_log_hpts_diag(), rack_log_pacing_delay_calc(), rack_log_to_start(), rack_log_type_bbrsnd(), rack_min_probertt_hold, rack_timer_start(), tcp_rack::rc_ack_can_sendout_data, rack_control::rc_agg_delayed, rack_control::rc_agg_early, rack_control::rc_hpts_flags, rack_control::rc_last_output_to, rack_control::rc_timer_exp, tcp_rack::rc_tmr_stopped, tcp_rack::sack_attack_disable, SEQ_GT, tcpcb::snd_max, tcpcb::snd_una, tcpcb::t_flags, tcpcb::t_inpcb, tcpcb::t_state, tcp_delacktime, tcp_get_usecs(), tcp_hpts_insert_diag(), tcp_in_hpts(), TCPS_CLOSED, TCPS_CLOSING, TCPS_HAVEESTABLISHED, TCPS_LISTEN, TF_DELACK, TP_KEEPIDLE, TP_KEEPINIT, TSTMP_GT, tcp_rack::use_fixed_rate, tcp_rack::use_rack_rr, and V_tcp_always_keepalive.

Referenced by rack_do_segment_nounlock(), rack_fast_output(), rack_init(), rack_output(), rack_timeout_keepalive(), rack_timeout_persist(), rack_timeout_rack(), and rack_timer_audit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_stop_all_timers()

static void rack_stop_all_timers ( struct tcpcb tp)
static

Definition at line 7017 of file rack.c.

References tcp_rack::rc_in_persist, tcpcb::t_fb_ptr, tcp_timer_active(), tcp_timer_suspend(), TT_DELACK, TT_KEEP, TT_PERSIST, and TT_REXMT.

Referenced by rack_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_stopall()

static int rack_stopall ( struct tcpcb tp)
static

Definition at line 6996 of file rack.c.

References tcpcb::t_fb_ptr, and tcp_rack::t_timers_stopped.

◆ rack_strike_dupack()

static void rack_strike_dupack ( struct tcp_rack rack)
static

◆ rack_timeout_delack()

static int rack_timeout_delack ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  cts 
)
static

Definition at line 6236 of file rack.c.

References KMOD_TCPSTAT_INC, tcp_rack::r_ctl, rack_log_to_event(), RACK_TO_FRM_DELACK, rack_control::rc_hpts_flags, tcpcb::t_flags, tcpcb::t_timers, TF_ACKNOW, tcp_timer::tt_flags, and TT_STOPPED.

Referenced by rack_process_timers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_timeout_keepalive()

◆ rack_timeout_persist()

◆ rack_timeout_rack()

static int rack_timeout_rack ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  cts 
)
static

◆ rack_timeout_rxt()

static int rack_timeout_rxt ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  cts 
)
static

Definition at line 6578 of file rack.c.

References CC_RTO, ctf_progress_timeout_check(), rack_control::dsack_byte_cnt, rack_control::dsack_persist, tcpcb::gput_ack, tcpcb::gput_seq, IN_CONGRECOVERY, IN_FASTRECOVERY, in_losing(), INP_IPV6, inpcb::inp_vflag, KMOD_TCPSTAT_INC, rack_control::num_dsack, PROGRESS_DROP, tcp_rack::r_ctl, rack_sendmap::r_flags, rack_sendmap::r_tim_lastsent, rack_cong_signal(), RACK_INITIAL_RTO, rack_log_dsack_event(), rack_log_pacing_delay_calc(), rack_log_progress_event(), rack_remxt_tmr(), rack_rto_max, rack_rto_min, RACK_RWND_COLLAPSED, rack_control::rack_sf, RACK_TCPT_RANGESET, rack_control::rc_gp_srtt, rack_control::rc_hpts_flags, rack_control::rc_mtree, rack_control::rc_resend, rack_control::retran_during_recovery, sack_filter_clear(), tcpcb::snd_cwnd, tcpcb::snd_cwnd_prev, tcpcb::snd_max, tcpcb::snd_recover, tcpcb::snd_recover_prev, tcpcb::snd_ssthresh, tcpcb::snd_ssthresh_prev, tcpcb::snd_una, tcpcb::t_badrxtwin, tcpcb::t_flags, tcpcb::t_flags2, tcpcb::t_inpcb, tcpcb::t_maxseg, tcpcb::t_pmtud_saved_maxseg, tcpcb::t_rtttime, tcpcb::t_rttvar, tcpcb::t_rxtcur, tcpcb::t_rxtshift, tcpcb::t_softerror, tcpcb::t_srtt, tcpcb::t_state, tcpcb::t_timers, tcp_backoff, TCP_EI_STATUS_KEEP_MAX, TCP_EI_STATUS_RETRAN, tcp_log_end_status(), TCP_MAXRXTSHIFT, tcp_rexmit_drop_options, TCPS_ESTABLISHED, TCPS_FIN_WAIT_1, TCPS_HAVEESTABLISHED, TCPS_SYN_RECEIVED, TCPS_SYN_SENT, TF2_PLPMTU_BLACKHOLE, TF2_PLPMTU_MAXSEGSNT, TF2_PLPMTU_PMTUD, TF_ACKNOW, TF_GPUTINPROG, TF_PREVVALID, TF_RCVD_TSTMP, TF_REQ_SCALE, TF_REQ_TSTMP, TF_SACK_PERMIT, TF_WASCRECOVERY, TF_WASFRECOVERY, rack_control::timer_slop, TP_KEEPINIT, TSTMP_GT, tcp_timer::tt_flags, TT_STOPPED, V_tcp_mssdflt, V_tcp_pmtud_blackhole_detect, V_tcp_pmtud_blackhole_mss, and V_tcp_v6pmtud_blackhole_mss.

Referenced by rack_process_timers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_timeout_tlp()

static int rack_timeout_tlp ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  cts,
uint8_t doing_tlp 
)
static

◆ rack_timer_activate()

static void rack_timer_activate ( struct tcpcb tp,
uint32_t  timer_type,
uint32_t  delta 
)
static

Definition at line 7005 of file rack.c.

◆ rack_timer_active()

static int rack_timer_active ( struct tcpcb tp,
uint32_t  timer_type 
)
static

Definition at line 7011 of file rack.c.

◆ rack_timer_audit()

◆ rack_timer_cancel()

◆ rack_timer_start()

◆ rack_timer_stop()

static void rack_timer_stop ( struct tcpcb tp,
uint32_t  timer_type 
)
static

Definition at line 6990 of file rack.c.

◆ rack_un_collapse_window()

static void rack_un_collapse_window ( struct tcp_rack rack)
static

Definition at line 10310 of file rack.c.

References tcp_rack::r_ctl, rack_sendmap::r_flags, RACK_RWND_COLLAPSED, tcp_rack::rc_has_collapsed, and rack_control::rc_mtree.

Referenced by rack_do_win_updates(), rack_fastack(), and rack_process_data().

Here is the caller graph for this function:

◆ rack_undo_cc_pacing()

◆ rack_update_entry()

static uint32_t rack_update_entry ( struct tcpcb tp,
struct tcp_rack rack,
struct rack_sendmap rsm,
uint64_t  ts,
int32_t *  lenp,
uint16_t  add_flag 
)
static

◆ rack_update_multiplier()

◆ rack_update_prr()

static void rack_update_prr ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  changed,
tcp_seq  th_ack 
)
static

◆ rack_update_rsm()

◆ rack_update_rtt()

◆ rack_update_seg()

static void rack_update_seg ( struct tcp_rack rack)
static

Definition at line 19134 of file rack.c.

References tcp_rack::r_ctl, rack_log_pacing_delay_calc(), rack_set_pace_segments(), rack_control::rc_pace_max_segs, and tcp_rack::rc_tp.

Referenced by rack_process_option().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_validate_fo_sendwin_up()

static void rack_validate_fo_sendwin_up ( struct tcpcb tp,
struct tcp_rack rack 
)
static

Definition at line 10350 of file rack.c.

References ctf_fixed_maxseg(), ctf_outstanding(), rack_control::fsb, rack_fast_send_blk::left_to_send, tcp_rack::r_ctl, tcp_rack::r_fast_output, and tcpcb::snd_wnd.

Referenced by rack_do_segment_nounlock(), rack_do_syn_recv(), rack_do_win_updates(), rack_fastack(), and rack_process_data().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rack_validate_multipliers_at_or_above100()

static void rack_validate_multipliers_at_or_above100 ( struct tcp_rack rack)
static

Definition at line 3126 of file rack.c.

References tcp_rack::r_ctl, rack_control::rack_per_of_gp_ca, rack_control::rack_per_of_gp_rec, and rack_control::rack_per_of_gp_ss.

Referenced by rack_check_bottom_drag().

Here is the caller graph for this function:

◆ rack_validate_multipliers_at_or_below_100()

static void rack_validate_multipliers_at_or_below_100 ( struct tcp_rack rack)
static

Definition at line 3146 of file rack.c.

References tcp_rack::r_ctl, rack_control::rack_per_of_gp_ca, and rack_control::rack_per_of_gp_ss.

Referenced by rack_update_multiplier().

Here is the caller graph for this function:

◆ rack_what_can_we_send()

static uint32_t rack_what_can_we_send ( struct tcpcb tp,
struct tcp_rack rack,
uint32_t  cwnd_to_use,
uint32_t  avail,
int32_t  sb_offset 
)
inlinestatic

Definition at line 15264 of file rack.c.

References ctf_flight_size(), ctf_outstanding(), tcp_rack::r_ctl, rack_control::rc_sacked, and tcpcb::snd_wnd.

Referenced by rack_output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RB_GENERATE()

RB_GENERATE ( rack_rb_tree_head  ,
rack_sendmap  ,
r_next  ,
rb_map_cmp   
)

◆ rb_map_cmp()

static __inline int rb_map_cmp ( struct rack_sendmap b,
struct rack_sendmap a 
)
static

Definition at line 1741 of file rack.c.

References rack_sendmap::r_end, rack_sendmap::r_start, SEQ_GEQ, and SEQ_LT.

◆ RB_PROTOTYPE()

RB_PROTOTYPE ( rack_rb_tree_head  ,
rack_sendmap  ,
r_next  ,
rb_map_cmp   
)

◆ rc_init_window()

static uint32_t rc_init_window ( struct tcp_rack rack)
static

◆ sysctl_rack_clear()

◆ tcp_addrack()

static int tcp_addrack ( module_t  mod,
int32_t  type,
void *  data 
)
static

◆ tcp_rack_output()

◆ tcp_rack_partialack()

static void tcp_rack_partialack ( struct tcpcb tp)
static

◆ tcp_rack_xmit_timer()

◆ tcp_rack_xmit_timer_commit()

◆ VNET_DECLARE() [1/2]

VNET_DECLARE ( uint32_t  ,
newreno_beta   
)

◆ VNET_DECLARE() [2/2]

VNET_DECLARE ( uint32_t  ,
newreno_beta_ecn   
)

Variable Documentation

◆ __tcp_rack

struct tcp_function_block __tcp_rack
static
Initial value:
= {
.tfb_tcp_block_name = __XSTRING(STACKNAME),
.tfb_tcp_output = rack_output,
.tfb_do_queued_segments = ctf_do_queued_segments,
.tfb_do_segment_nounlock = rack_do_segment_nounlock,
.tfb_tcp_do_segment = rack_do_segment,
.tfb_tcp_ctloutput = rack_ctloutput,
.tfb_tcp_fb_init = rack_init,
.tfb_tcp_fb_fini = rack_fini,
.tfb_tcp_timer_stop_all = rack_stopall,
.tfb_tcp_timer_activate = rack_timer_activate,
.tfb_tcp_timer_active = rack_timer_active,
.tfb_tcp_timer_stop = rack_timer_stop,
.tfb_tcp_rexmit_tmr = rack_remxt_tmr,
.tfb_tcp_handoff_ok = rack_handoff_ok,
.tfb_tcp_mtu_chg = rack_mtu_change,
.tfb_pru_options = rack_pru_options,
.tfb_hwtls_change = rack_hw_tls_change,
}
static void rack_fini(struct tcpcb *tp, int32_t tcb_is_purged)
Definition: rack.c:12671
static void rack_remxt_tmr(struct tcpcb *tp)
Definition: rack.c:6410
static int32_t rack_handoff_ok(struct tcpcb *tp)
Definition: rack.c:12631
static int rack_ctloutput(struct inpcb *inp, struct sockopt *sopt)
Definition: rack.c:20587
static void rack_mtu_change(struct tcpcb *tp)
Definition: rack.c:19145
static void rack_hw_tls_change(struct tcpcb *tp, int chg)
Definition: rack.c:20032
static void rack_timer_stop(struct tcpcb *tp, uint32_t timer_type)
Definition: rack.c:6990
static void rack_timer_activate(struct tcpcb *tp, uint32_t timer_type, uint32_t delta)
Definition: rack.c:7005
static void rack_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, int32_t drop_hdrlen, int32_t tlen, uint8_t iptos)
Definition: rack.c:14456
static int32_t rack_output(struct tcpcb *tp)
Definition: rack.c:16474
static int rack_do_segment_nounlock(struct mbuf *m, struct tcphdr *th, struct socket *so, struct tcpcb *tp, int32_t drop_hdrlen, int32_t tlen, uint8_t iptos, int32_t nxt_pkt, struct timeval *tv)
Definition: rack.c:13901
static int32_t rack_timer_active(struct tcpcb *tp, uint32_t timer_type)
Definition: rack.c:7011
static int32_t rack_stopall(struct tcpcb *tp)
Definition: rack.c:6996
static int rack_pru_options(struct tcpcb *tp, int flags)
Definition: rack.c:20055
static int32_t rack_init(struct tcpcb *tp)
Definition: rack.c:12348
int ctf_do_queued_segments(struct socket *so, struct tcpcb *tp, int have_pkt)
#define TCP_FUNC_OUTPUT_CANDROP
Definition: tcp_var.h:322

Definition at line 20062 of file rack.c.

Referenced by rack_set_sockopt(), and tcp_addrack().

◆ rack_ack_total

counter_u64_t rack_ack_total

◆ rack_alloc_limited_conns

counter_u64_t rack_alloc_limited_conns

◆ rack_always_send_oldest

int32_t rack_always_send_oldest = 0
static

Definition at line 269 of file rack.c.

Referenced by rack_init_sysctls(), and rack_timeout_tlp().

◆ rack_apply_rtt_with_reduced_conf

int32_t rack_apply_rtt_with_reduced_conf = 0
static

Definition at line 210 of file rack.c.

Referenced by rack_handle_probe_response(), and rack_init_sysctls().

◆ rack_atexit_prtt

uint16_t rack_atexit_prtt = 130
static

Definition at line 281 of file rack.c.

Referenced by rack_exit_probertt(), and rack_init_sysctls().

◆ rack_atexit_prtt_hbp

uint16_t rack_atexit_prtt_hbp = 130
static

Definition at line 280 of file rack.c.

Referenced by rack_exit_probertt(), and rack_init_sysctls().

◆ rack_autosndbuf_inc

int32_t rack_autosndbuf_inc = 20
static

Definition at line 238 of file rack.c.

Referenced by rack_init_sysctls(), and rack_sndbuf_autoscale().

◆ rack_bw_rate_cap

uint64_t rack_bw_rate_cap = 0
static

Definition at line 328 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_clear_counter

int32_t rack_clear_counter =0

Definition at line 548 of file rack.c.

Referenced by rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_client_low_buf

int32_t rack_client_low_buf = 0
static

Definition at line 223 of file rack.c.

Referenced by rack_ack_received(), and rack_init_sysctls().

◆ rack_collapsed_win

counter_u64_t rack_collapsed_win

◆ rack_cwnd_block_ends_measure

int32_t rack_cwnd_block_ends_measure = 0
static

Definition at line 263 of file rack.c.

Referenced by rack_init_sysctls(), and rack_output().

◆ rack_def_data_window

uint32_t rack_def_data_window = 20
static

Definition at line 249 of file rack.c.

Referenced by rack_get_measure_window(), and rack_init_sysctls().

◆ rack_def_profile

int32_t rack_def_profile = 0
static

Definition at line 265 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_default_init_window

int32_t rack_default_init_window = 0
static

Definition at line 236 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_process_option().

◆ rack_delayed_ack_time

int32_t rack_delayed_ack_time = 40000
static

Definition at line 260 of file rack.c.

Referenced by rack_calc_thresh_tlp(), and rack_init_sysctls().

◆ rack_disable_prr

int32_t rack_disable_prr = 0
static

Definition at line 230 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_do_dyn_mul

int32_t rack_do_dyn_mul = 0
static

Definition at line 317 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_do_hystart

int32_t rack_do_hystart = 0
static

Definition at line 209 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_process_option().

◆ rack_down_raise_thresh

int32_t rack_down_raise_thresh = 100
static

Definition at line 326 of file rack.c.

Referenced by rack_init_sysctls(), and rack_update_multiplier().

◆ rack_dsack_std_based

int32_t rack_dsack_std_based = 0x3
static

Definition at line 224 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_enable_hw_pacing

int32_t rack_enable_hw_pacing = 0
static

Definition at line 201 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_enable_mqueue_for_nonpaced

int32_t rack_enable_mqueue_for_nonpaced = 0
static

Definition at line 229 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_enable_shared_cwnd

int32_t rack_enable_shared_cwnd = 1
static

Definition at line 217 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_enobuf_hw_boost_mult

int32_t rack_enobuf_hw_boost_mult = 2
static

Definition at line 239 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_enobuf_hw_max

int32_t rack_enobuf_hw_max = 12000
static

Definition at line 240 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_enobuf_hw_min

int32_t rack_enobuf_hw_min = 10000
static

Definition at line 241 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_express_sack

counter_u64_t rack_express_sack

Definition at line 376 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_log_ack(), and sysctl_rack_clear().

◆ rack_extended_rfo

counter_u64_t rack_extended_rfo

◆ rack_free_cache

const int32_t rack_free_cache = 2
static

Definition at line 256 of file rack.c.

Referenced by rack_alloc(), rack_free_trim(), and rack_output().

◆ rack_fto_rsm_send

counter_u64_t rack_fto_rsm_send

Definition at line 361 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_fto_send

counter_u64_t rack_fto_send

◆ rack_goal_bdp

uint32_t rack_goal_bdp = 2
static

Definition at line 250 of file rack.c.

Referenced by rack_get_measure_window(), and rack_init_sysctls().

◆ rack_gp_decrease_per

int32_t rack_gp_decrease_per = 20
static

Definition at line 312 of file rack.c.

Referenced by rack_decrease_highrtt(), rack_get_decrease(), and rack_init_sysctls().

◆ rack_gp_increase_per

int32_t rack_gp_increase_per = 2
static

Definition at line 313 of file rack.c.

Referenced by rack_increase_bw_mul(), and rack_init_sysctls().

◆ rack_gp_no_rec_chg

int32_t rack_gp_no_rec_chg = 1
static

Definition at line 318 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_gp_per_bw_mul_down

int32_t rack_gp_per_bw_mul_down = 4
static

Definition at line 308 of file rack.c.

Referenced by rack_init_sysctls(), and rack_update_multiplier().

◆ rack_gp_per_bw_mul_up

int32_t rack_gp_per_bw_mul_up = 2
static

Definition at line 307 of file rack.c.

Referenced by rack_init_sysctls(), and rack_update_multiplier().

◆ rack_gp_rtt_maxmul

int32_t rack_gp_rtt_maxmul = 3
static

◆ rack_gp_rtt_mindiv

int32_t rack_gp_rtt_mindiv = 4
static

Definition at line 311 of file rack.c.

Referenced by rack_init_sysctls(), and rack_make_timely_judgement().

◆ rack_gp_rtt_minmul

int32_t rack_gp_rtt_minmul = 1
static

Definition at line 310 of file rack.c.

Referenced by rack_init_sysctls(), and rack_make_timely_judgement().

◆ rack_hbp_thresh

int32_t rack_hbp_thresh = 3
static

Definition at line 299 of file rack.c.

Referenced by rack_init_sysctls(), and tcp_rack_xmit_timer_commit().

◆ rack_highest_move_thresh_seen

uint32_t rack_highest_move_thresh_seen = 0
static

Definition at line 200 of file rack.c.

Referenced by rack_init_sysctls().

◆ rack_highest_sack_thresh_seen

uint32_t rack_highest_sack_thresh_seen = 0
static

Definition at line 199 of file rack.c.

Referenced by rack_init_sysctls().

◆ rack_hot_alloc

counter_u64_t rack_hot_alloc

Definition at line 349 of file rack.c.

Referenced by rack_alloc(), rack_counter_destroy(), and rack_init_sysctls().

◆ rack_hptsi_segments

int32_t rack_hptsi_segments = 40
static

Definition at line 257 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_hw_pace_extra_slots

int32_t rack_hw_pace_extra_slots = 2
static

Definition at line 202 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_hw_pace_init_fail

counter_u64_t rack_hw_pace_init_fail

◆ rack_hw_pace_lost

counter_u64_t rack_hw_pace_lost

◆ rack_hw_rate_caps

int32_t rack_hw_rate_caps = 1
static

Definition at line 203 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_hw_rate_min

int32_t rack_hw_rate_min = 0
static

Definition at line 204 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_hw_rate_to_low

int32_t rack_hw_rate_to_low = 0
static

Definition at line 205 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_hw_rwnd_factor

int32_t rack_hw_rwnd_factor = 2
static

Definition at line 242 of file rack.c.

Referenced by rack_init_sysctls(), and rack_output().

◆ rack_hw_up_only

int32_t rack_hw_up_only = 1
static

Definition at line 206 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_ignore_data_after_close

int32_t rack_ignore_data_after_close = 1
static

Definition at line 216 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_input_idle_reduces

counter_u64_t rack_input_idle_reduces

◆ rack_limit_time_with_srtt

int32_t rack_limit_time_with_srtt = 0
static

Definition at line 237 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_limited_retran

int32_t rack_limited_retran = 0
static

Definition at line 268 of file rack.c.

Referenced by rack_init_sysctls().

◆ rack_limits_scwnd

int32_t rack_limits_scwnd = 1
static

Definition at line 228 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_lower_cwnd_at_tlp

int32_t rack_lower_cwnd_at_tlp = 0
static

Definition at line 267 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_max_abc_post_recovery

int32_t rack_max_abc_post_recovery = 2
static

Definition at line 222 of file rack.c.

Referenced by rack_ack_received(), and rack_init_sysctls().

◆ rack_max_drain_hbp

int32_t rack_max_drain_hbp = 1
static

Definition at line 298 of file rack.c.

Referenced by rack_check_probe_rtt(), and rack_init_sysctls().

◆ rack_max_drain_wait

uint32_t rack_max_drain_wait = 2
static

Definition at line 283 of file rack.c.

Referenced by rack_check_probe_rtt(), and rack_init_sysctls().

◆ rack_max_per_above

int32_t rack_max_per_above = 30
static

Definition at line 302 of file rack.c.

Referenced by rack_bw_can_be_raised(), and rack_init_sysctls().

◆ rack_min_measure_usec

uint32_t rack_min_measure_usec = 0
static

Definition at line 252 of file rack.c.

Referenced by rack_get_measure_window(), and rack_init_sysctls().

◆ rack_min_probertt_hold

uint32_t rack_min_probertt_hold = 40000
static

◆ rack_min_rtt_movement

uint32_t rack_min_rtt_movement = 250000
static

Definition at line 295 of file rack.c.

Referenced by rack_apply_updated_usrtt(), and rack_init_sysctls().

◆ rack_min_srtts

uint32_t rack_min_srtts = 1
static

Definition at line 251 of file rack.c.

Referenced by rack_enough_for_measurement(), and rack_init_sysctls().

◆ rack_min_to

int32_t rack_min_to = 1000
static

Definition at line 214 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_mod_inited

bool rack_mod_inited = false
static

Definition at line 20618 of file rack.c.

Referenced by tcp_addrack().

◆ rack_move_none

counter_u64_t rack_move_none

Definition at line 378 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_log_ack(), and sysctl_rack_clear().

◆ rack_move_some

counter_u64_t rack_move_some

Definition at line 379 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_log_ack(), and sysctl_rack_clear().

◆ rack_multi_single_eq

counter_u64_t rack_multi_single_eq

◆ rack_must_drain

uint32_t rack_must_drain = 1
static

Definition at line 284 of file rack.c.

Referenced by rack_check_probe_rtt(), and rack_init_sysctls().

◆ rack_nfto_resend

counter_u64_t rack_nfto_resend

Definition at line 362 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_output(), and sysctl_rack_clear().

◆ rack_non_fto_send

counter_u64_t rack_non_fto_send

Definition at line 363 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_output(), and sysctl_rack_clear().

◆ rack_non_rxt_use_cr

int32_t rack_non_rxt_use_cr = 0
static

Definition at line 232 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_opts_arry

counter_u64_t rack_opts_arry[RACK_OPTS_SIZE]

Definition at line 388 of file rack.c.

Referenced by rack_counter_destroy(), and rack_init_sysctls().

◆ rack_out_size

counter_u64_t rack_out_size[TCP_MSS_ACCT_SIZE]

◆ rack_pace_every_seg

int32_t rack_pace_every_seg = 0
static

Definition at line 259 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_pace_one_seg

int32_t rack_pace_one_seg = 0
static

Definition at line 296 of file rack.c.

Referenced by rack_get_pacing_len(), and rack_init_sysctls().

◆ rack_pcb_zone

uma_zone_t rack_pcb_zone

Definition at line 138 of file rack.c.

Referenced by rack_fini(), rack_init(), and tcp_addrack().

◆ rack_per_lower_bound

int32_t rack_per_lower_bound = 50
static

Definition at line 314 of file rack.c.

Referenced by rack_decrease_bw_mul(), and rack_init_sysctls().

◆ rack_per_of_gp_ca

uint16_t rack_per_of_gp_ca = 200
static

Definition at line 273 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_per_of_gp_lowthresh

uint16_t rack_per_of_gp_lowthresh = 40
static

Definition at line 278 of file rack.c.

Referenced by rack_check_probe_rtt(), and rack_init_sysctls().

◆ rack_per_of_gp_probertt

uint16_t rack_per_of_gp_probertt = 60
static

Definition at line 277 of file rack.c.

Referenced by rack_check_probe_rtt(), rack_enter_probertt(), rack_init(), and rack_init_sysctls().

◆ rack_per_of_gp_probertt_reduce

uint16_t rack_per_of_gp_probertt_reduce = 10
static

Definition at line 279 of file rack.c.

Referenced by rack_check_probe_rtt(), and rack_init_sysctls().

◆ rack_per_of_gp_rec

uint16_t rack_per_of_gp_rec = 200
static

Definition at line 274 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_per_of_gp_ss

uint16_t rack_per_of_gp_ss = 250
static

Definition at line 272 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_per_upper_bound_ca

int32_t rack_per_upper_bound_ca = 0
static

Definition at line 316 of file rack.c.

Referenced by rack_increase_bw_mul(), rack_init_sysctls(), and rack_update_multiplier().

◆ rack_per_upper_bound_ss

int32_t rack_per_upper_bound_ss = 0
static

Definition at line 315 of file rack.c.

Referenced by rack_increase_bw_mul(), rack_init_sysctls(), and rack_update_multiplier().

◆ rack_persist_max

int32_t rack_persist_max = 2000000
static

Definition at line 234 of file rack.c.

Referenced by rack_get_persists_timer_val(), and rack_init_sysctls().

◆ rack_persist_min

int32_t rack_persist_min = 250000
static

Definition at line 233 of file rack.c.

Referenced by rack_get_persists_timer_val(), and rack_init_sysctls().

◆ rack_persists_acks

counter_u64_t rack_persists_acks

◆ rack_persists_loss

counter_u64_t rack_persists_loss

◆ rack_persists_lost_ends

counter_u64_t rack_persists_lost_ends

◆ rack_persists_sends

counter_u64_t rack_persists_sends

◆ rack_pkt_delay

int32_t rack_pkt_delay = 1000
static

Definition at line 212 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_probe_rtt_safety_val

uint32_t rack_probe_rtt_safety_val = 2000000
static

Definition at line 288 of file rack.c.

Referenced by rack_check_probe_rtt(), and rack_init_sysctls().

◆ rack_probe_rtt_sets_cwnd

uint32_t rack_probe_rtt_sets_cwnd = 0
static

Definition at line 287 of file rack.c.

Referenced by rack_exit_probertt(), and rack_init_sysctls().

◆ rack_probertt_clear_is

int32_t rack_probertt_clear_is = 1
static

Definition at line 297 of file rack.c.

Referenced by rack_exit_probertt(), and rack_init_sysctls().

◆ rack_probertt_filter_life

uint32_t rack_probertt_filter_life = 10000000
static

Definition at line 293 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_probertt_gpsrtt_cnt_div

uint32_t rack_probertt_gpsrtt_cnt_div = 0
static

Definition at line 291 of file rack.c.

Referenced by rack_check_probe_rtt(), rack_exit_persist(), and rack_init_sysctls().

◆ rack_probertt_gpsrtt_cnt_mul

uint32_t rack_probertt_gpsrtt_cnt_mul = 0
static

Definition at line 290 of file rack.c.

Referenced by rack_check_probe_rtt(), rack_exit_persist(), and rack_init_sysctls().

◆ rack_probertt_lower_within

uint32_t rack_probertt_lower_within = 10
static

Definition at line 294 of file rack.c.

Referenced by rack_apply_updated_usrtt(), and rack_init_sysctls().

◆ rack_probertt_use_min_rtt_entry

uint32_t rack_probertt_use_min_rtt_entry = 1
static

Definition at line 285 of file rack.c.

Referenced by rack_enter_probertt(), and rack_init_sysctls().

◆ rack_probertt_use_min_rtt_exit

uint32_t rack_probertt_use_min_rtt_exit = 0
static

Definition at line 286 of file rack.c.

Referenced by rack_exit_probertt(), and rack_init_sysctls().

◆ rack_proc_non_comp_ack

counter_u64_t rack_proc_non_comp_ack

◆ rack_prr_addbackmax

int32_t rack_prr_addbackmax = 2
static

Definition at line 208 of file rack.c.

Referenced by rack_init_sysctls(), and rack_post_recovery().

◆ rack_rate_sample_method

int32_t rack_rate_sample_method = USE_RTT_LOW
static

Definition at line 258 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_reorder_fade

int32_t rack_reorder_fade = 60000000
static

Definition at line 195 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_reorder_thresh

int32_t rack_reorder_thresh = 2
static

Definition at line 194 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_req_measurements

uint8_t rack_req_measurements = 1
static

Definition at line 197 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_req_segs

int32_t rack_req_segs = 1
static

Definition at line 327 of file rack.c.

Referenced by rack_check_bottom_drag(), and rack_init_sysctls().

◆ rack_rto_max

◆ rack_rto_min

◆ rack_rwnd_block_ends_measure

int32_t rack_rwnd_block_ends_measure = 0
static

Definition at line 264 of file rack.c.

Referenced by rack_init_sysctls(), and rack_output().

◆ rack_sack_attacks_detected

counter_u64_t rack_sack_attacks_detected

Definition at line 369 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_sack_attacks_reversed

counter_u64_t rack_sack_attacks_reversed

Definition at line 370 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_sack_not_required

int32_t rack_sack_not_required = 1
static

Definition at line 235 of file rack.c.

Referenced by rack_do_segment_nounlock(), rack_handoff_ok(), and rack_init_sysctls().

◆ rack_sack_proc_all

counter_u64_t rack_sack_proc_all

◆ rack_sack_proc_restart

counter_u64_t rack_sack_proc_restart

Definition at line 368 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_sack_proc_short

counter_u64_t rack_sack_proc_short

◆ rack_sack_skipped_acked

counter_u64_t rack_sack_skipped_acked

◆ rack_sack_splits

counter_u64_t rack_sack_splits

◆ rack_sack_total

counter_u64_t rack_sack_total

Definition at line 377 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_log_ack(), and sysctl_rack_clear().

◆ rack_sack_used_next_merge

counter_u64_t rack_sack_used_next_merge

◆ rack_sack_used_prev_merge

counter_u64_t rack_sack_used_prev_merge

◆ rack_saw_enetunreach

counter_u64_t rack_saw_enetunreach

Definition at line 335 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_output(), and sysctl_rack_clear().

◆ rack_saw_enobuf

counter_u64_t rack_saw_enobuf

Definition at line 333 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_output(), and sysctl_rack_clear().

◆ rack_saw_enobuf_hw

counter_u64_t rack_saw_enobuf_hw

Definition at line 334 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_output(), and sysctl_rack_clear().

◆ rack_send_a_lot_in_prr

int32_t rack_send_a_lot_in_prr = 1
static

Definition at line 213 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_slot_reduction

int32_t rack_slot_reduction = 4
static

Definition at line 261 of file rack.c.

Referenced by rack_get_pacing_delay(), and rack_init_sysctls().

◆ rack_split_limited

counter_u64_t rack_split_limited

◆ rack_stack_names

const char* rack_stack_names[]
static
Initial value:
= {
__XSTRING(STACKNAME),
}

Definition at line 20598 of file rack.c.

Referenced by tcp_addrack().

◆ rack_stats_gets_ms_rtt

int32_t rack_stats_gets_ms_rtt = 1
static

Definition at line 207 of file rack.c.

Referenced by rack_init_sysctls(), and tcp_rack_xmit_timer_commit().

◆ rack_sysctl_ctx

struct sysctl_ctx_list rack_sysctl_ctx

Definition at line 153 of file rack.c.

Referenced by rack_init_sysctls(), and tcp_addrack().

◆ rack_sysctl_root

struct sysctl_oid* rack_sysctl_root

Definition at line 154 of file rack.c.

Referenced by rack_init_sysctls(), and tcp_addrack().

◆ rack_time_between_probertt

uint32_t rack_time_between_probertt = 9600000
static

Definition at line 289 of file rack.c.

Referenced by rack_apply_updated_usrtt(), rack_check_probe_rtt(), and rack_init_sysctls().

◆ rack_timely_dec_clear

int32_t rack_timely_dec_clear = 6
static

Definition at line 319 of file rack.c.

Referenced by rack_decrease_bw_mul(), and rack_init_sysctls().

◆ rack_timely_int_timely_only

int32_t rack_timely_int_timely_only = 0
static

Definition at line 324 of file rack.c.

Referenced by rack_init_sysctls().

◆ rack_timely_max_push_drop

int32_t rack_timely_max_push_drop = 3
static

Definition at line 321 of file rack.c.

Referenced by rack_init_sysctls(), and rack_update_multiplier().

◆ rack_timely_max_push_rise

int32_t rack_timely_max_push_rise = 3
static

Definition at line 320 of file rack.c.

Referenced by rack_init_sysctls(), and rack_update_multiplier().

◆ rack_timely_min_segs

int32_t rack_timely_min_segs = 4
static

Definition at line 322 of file rack.c.

Referenced by rack_exit_probertt(), rack_init_sysctls(), and rack_set_prtt_target().

◆ rack_timely_no_stopping

int32_t rack_timely_no_stopping = 0
static

Definition at line 325 of file rack.c.

Referenced by rack_bw_can_be_raised(), and rack_init_sysctls().

◆ rack_tlp_limit

int32_t rack_tlp_limit = 2
static

Definition at line 192 of file rack.c.

Referenced by rack_init_sysctls(), and rack_timer_start().

◆ rack_tlp_min

int32_t rack_tlp_min = 10000
static

Definition at line 253 of file rack.c.

Referenced by rack_calc_thresh_tlp(), rack_init_sysctls(), and rack_timer_start().

◆ rack_tlp_newdata

counter_u64_t rack_tlp_newdata

◆ rack_tlp_retran

counter_u64_t rack_tlp_retran

◆ rack_tlp_retran_bytes

counter_u64_t rack_tlp_retran_bytes

◆ rack_tlp_thresh

int32_t rack_tlp_thresh = 1
static

Definition at line 191 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_tlp_threshold_use

int32_t rack_tlp_threshold_use = TLP_USE_TWO_ONE
static

Definition at line 270 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_tlp_tot

counter_u64_t rack_tlp_tot

◆ rack_tlp_use_greater

int32_t rack_tlp_use_greater = 1
static

Definition at line 193 of file rack.c.

Referenced by rack_init_sysctls(), and rack_timer_start().

◆ rack_to_alloc

counter_u64_t rack_to_alloc

Definition at line 350 of file rack.c.

Referenced by rack_alloc(), rack_counter_destroy(), rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_to_alloc_emerg

counter_u64_t rack_to_alloc_emerg

Definition at line 352 of file rack.c.

Referenced by rack_alloc(), rack_counter_destroy(), rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_to_alloc_hard

counter_u64_t rack_to_alloc_hard

Definition at line 351 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), and sysctl_rack_clear().

◆ rack_to_alloc_limited

counter_u64_t rack_to_alloc_limited

◆ rack_to_tot

counter_u64_t rack_to_tot

◆ rack_try_scwnd

counter_u64_t rack_try_scwnd

Definition at line 383 of file rack.c.

Referenced by rack_counter_destroy(), rack_init_sysctls(), rack_output(), and sysctl_rack_clear().

◆ rack_use_cmp_acks

int32_t rack_use_cmp_acks = 1
static

Definition at line 218 of file rack.c.

Referenced by rack_init(), rack_init_sysctls(), and rack_set_profile().

◆ rack_use_fsb

int32_t rack_use_fsb = 1
static

Definition at line 219 of file rack.c.

Referenced by rack_init_sysctls(), and rack_output().

◆ rack_use_imac_dack

int32_t rack_use_imac_dack = 0
static

Definition at line 331 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().

◆ rack_use_max_for_nobackoff

int32_t rack_use_max_for_nobackoff = 0
static

Definition at line 323 of file rack.c.

Referenced by rack_init_sysctls().

◆ rack_use_rfo

int32_t rack_use_rfo = 1
static

Definition at line 220 of file rack.c.

Referenced by rack_init_sysctls(), and rack_output().

◆ rack_use_rsm_rfo

int32_t rack_use_rsm_rfo = 1
static

Definition at line 221 of file rack.c.

Referenced by rack_init_sysctls(), and rack_output().

◆ rack_verbose_logging

◆ rack_wma_divisor

int32_t rack_wma_divisor = 8
static

Definition at line 262 of file rack.c.

Referenced by rack_do_goodput_measurement(), and rack_init_sysctls().

◆ rack_zone

uma_zone_t rack_zone

Definition at line 137 of file rack.c.

Referenced by rack_alloc(), rack_fini(), rack_free_trim(), and tcp_addrack().

◆ tcp_rack

moduledata_t tcp_rack
static
Initial value:
= {
.name = __XSTRING(MODNAME),
.evhand = tcp_addrack,
.priv = 0
}
static int32_t tcp_addrack(module_t mod, int32_t type, void *data)
Definition: rack.c:20621

Definition at line 20694 of file rack.c.

◆ use_rack_rr

int32_t use_rack_rr = 1
static

Definition at line 231 of file rack.c.

Referenced by rack_init(), and rack_init_sysctls().