Changeset View
Changeset View
Standalone View
Standalone View
netinet/tcp_stacks/tcp_rack.h
Context not available. | |||||
#ifndef _NETINET_TCP_RACK_H_ | #ifndef _NETINET_TCP_RACK_H_ | ||||
#define _NETINET_TCP_RACK_H_ | #define _NETINET_TCP_RACK_H_ | ||||
#define RACK_ACKED 0x0001/* The remote endpoint acked this */ | #define RACK_ACKED 0x0001/* The remote endpoint acked this */ | ||||
#define RACK_TO_MIXED 0x0002/* A timeout occured that mixed the send order */ | #define RACK_TO_MIXED 0x0002/* A timeout occured that mixed the send order */ | ||||
#define RACK_DEFERRED 0x0004/* We can't use this for RTT calc */ | #define RACK_DEFERRED 0x0004/* We can't use this for RTT calc */ | ||||
#define RACK_OVERMAX 0x0008/* We have more retran's then we can fit */ | #define RACK_OVERMAX 0x0008/* We have more retran's then we can fit */ | ||||
#define RACK_SACK_PASSED 0x0010/* A sack was done above this block */ | #define RACK_SACK_PASSED 0x0010/* A sack was done above this block */ | ||||
#define RACK_WAS_SACKPASS 0x0020/* We retransmitted due to SACK pass */ | #define RACK_WAS_SACKPASS 0x0020/* We retransmitted due to SACK pass */ | ||||
#define RACK_HAS_FIN 0x0040/* segment is sent with fin */ | #define RACK_HAS_FIN 0x0040/* segment is sent with fin */ | ||||
#define RACK_TLP 0x0080/* segment sent as tail-loss-probe */ | #define RACK_TLP 0x0080/* segment sent as tail-loss-probe */ | ||||
#define RACK_RWND_COLLAPSED 0x0100/* The peer collapsed the rwnd on the segment */ | |||||
#define RACK_NUM_OF_RETRANS 3 | #define RACK_NUM_OF_RETRANS 3 | ||||
#define RACK_INITIAL_RTO 1000 /* 1 second in milli seconds */ | #define RACK_INITIAL_RTO 1000 /* 1 second in milli seconds */ | ||||
Context not available. | |||||
uint32_t r_rtr_bytes; /* How many bytes have been retransmitted */ | uint32_t r_rtr_bytes; /* How many bytes have been retransmitted */ | ||||
uint16_t r_rtr_cnt; /* Retran count, index this -1 to get time | uint16_t r_rtr_cnt; /* Retran count, index this -1 to get time | ||||
* sent */ | * sent */ | ||||
uint8_t r_flags; /* Flags as defined above */ | uint16_t r_flags; /* Flags as defined above */ | ||||
uint8_t r_sndcnt; /* Retran count, not limited by | uint8_t r_sndcnt; /* Retran count, not limited by | ||||
* RACK_NUM_OF_RETRANS */ | * RACK_NUM_OF_RETRANS */ | ||||
uint8_t r_in_tmap; /* Flag to see if its in the r_tnext array */ | uint8_t r_in_tmap; /* Flag to see if its in the r_tnext array */ | ||||
uint8_t r_resv[3]; | uint8_t r_resv[2]; | ||||
}; | }; | ||||
TAILQ_HEAD(rack_head, rack_sendmap); | TAILQ_HEAD(rack_head, rack_sendmap); | ||||
Context not available. | |||||
uint64_t rack_no_timer_in_hpts; | uint64_t rack_no_timer_in_hpts; | ||||
uint64_t tcp_rack_min_pace_seg; | uint64_t tcp_rack_min_pace_seg; | ||||
uint64_t tcp_rack_min_pace; | uint64_t tcp_rack_min_pace; | ||||
uint64_t tcp_rack_cheat; | |||||
}; | }; | ||||
#define TLP_USE_ID 1 /* Internet draft behavior */ | #define TLP_USE_ID 1 /* Internet draft behavior */ | ||||
Context not available. | |||||
* b) Locked by the hpts-mutex | * b) Locked by the hpts-mutex | ||||
* | * | ||||
*/ | */ | ||||
#define RACK_GP_HIST 4 /* How much goodput history do we maintain? */ | |||||
struct rack_control { | struct rack_control { | ||||
/* Second cache line 0x40 from tcp_rack */ | /* Second cache line 0x40 from tcp_rack */ | ||||
Context not available. | |||||
struct sack_filter rack_sf; | struct sack_filter rack_sf; | ||||
/* Cache line split 0x140 */ | /* Cache line split 0x140 */ | ||||
/* Flags for various things */ | /* Flags for various things */ | ||||
uint32_t rc_pace_max_segs; | |||||
uint32_t rc_pace_min_segs; | |||||
uint32_t rc_high_rwnd; | |||||
struct rack_rtt_sample rack_rs; | struct rack_rtt_sample rack_rs; | ||||
uint32_t rc_tlp_rxt_last_time; | |||||
uint32_t rc_gp_history[RACK_GP_HIST]; | |||||
uint32_t rc_tlp_threshold; /* Socket option value Lock(a) */ | uint32_t rc_tlp_threshold; /* Socket option value Lock(a) */ | ||||
uint16_t rc_early_recovery_segs; /* Socket option value Lock(a) */ | uint16_t rc_early_recovery_segs; /* Socket option value Lock(a) */ | ||||
uint16_t rc_reorder_shift; /* Socket option value Lock(a) */ | uint16_t rc_reorder_shift; /* Socket option value Lock(a) */ | ||||
Context not available. | |||||
uint8_t rc_early_recovery; /* Socket option value Lock(a) */ | uint8_t rc_early_recovery; /* Socket option value Lock(a) */ | ||||
uint8_t rc_prr_sendalot;/* Socket option value Lock(a) */ | uint8_t rc_prr_sendalot;/* Socket option value Lock(a) */ | ||||
uint8_t rc_min_to; /* Socket option value Lock(a) */ | uint8_t rc_min_to; /* Socket option value Lock(a) */ | ||||
uint8_t rc_prr_inc_var; /* Socket option value Lock(a) */ | |||||
uint8_t rc_tlp_rtx_out; /* This is TLPRtxOut in the draft */ | uint8_t rc_tlp_rtx_out; /* This is TLPRtxOut in the draft */ | ||||
uint8_t rc_rate_sample_method; | uint8_t rc_rate_sample_method; | ||||
uint8_t rc_gp_hist_idx: 7, | |||||
rc_gp_hist_filled: 1; | |||||
}; | }; | ||||
#ifdef _KERNEL | #ifdef _KERNEL | ||||
Context not available. | |||||
rc_last_pto_set : 1, /* XXX not used */ | rc_last_pto_set : 1, /* XXX not used */ | ||||
rc_tlp_in_progress : 1, | rc_tlp_in_progress : 1, | ||||
rc_always_pace : 1, /* Socket option value Lock(a) */ | rc_always_pace : 1, /* Socket option value Lock(a) */ | ||||
rc_timer_up : 1; /* The rack timer is up flag Lock(a) */ | tlp_timer_up : 1; /* The tlp timer is up flag Lock(a) */ | ||||
uint8_t r_idle_reduce_largest : 1, | uint8_t r_enforce_min_pace : 2, | ||||
r_enforce_min_pace : 2, | rc_has_collapsed : 1, | ||||
r_min_pace_seg_thresh : 5; | r_xxx_min_pace_seg_thresh : 5; | ||||
uint8_t rack_tlp_threshold_use; | uint8_t rack_tlp_threshold_use; | ||||
uint8_t rc_allow_data_af_clo: 1, | uint8_t rc_allow_data_af_clo: 1, | ||||
delayed_ack : 1, | delayed_ack : 1, | ||||
rc_avail : 6; | set_pacing_done_a_iw : 1, | ||||
uint8_t r_resv[2]; /* Fill to cache line boundary */ | use_rack_cheat : 1, | ||||
rc_avail : 4; | |||||
uint16_t rack_per_of_gp; | |||||
/* Cache line 2 0x40 */ | /* Cache line 2 0x40 */ | ||||
struct rack_control r_ctl; | struct rack_control r_ctl; | ||||
} __aligned(CACHE_LINE_SIZE); | } __aligned(CACHE_LINE_SIZE); | ||||
Context not available. |