X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ftcp%2Ftcp_types.h;h=aacfd8f2fd4c3a13fa07d764aebd42ed8dc15a2c;hb=5035bf04130a35b76f6b49f450e27d02bafb9dab;hp=d7bcac5e3bc108faac109343b1f5dba9fd94f4d8;hpb=eedc74b804a955de39e013f14c97f2abb4770157;p=vpp.git diff --git a/src/vnet/tcp/tcp_types.h b/src/vnet/tcp/tcp_types.h index d7bcac5e3bc..aacfd8f2fd4 100644 --- a/src/vnet/tcp/tcp_types.h +++ b/src/vnet/tcp/tcp_types.h @@ -20,7 +20,6 @@ #include #include #include -#include #define TCP_TICK 0.000001 /**< TCP tick period (s) */ #define THZ (u32) (1/TCP_TICK) /**< TCP tick frequency */ @@ -33,7 +32,6 @@ #define TCP_FIB_RECHECK_PERIOD 1 * THZ /**< Recheck every 1s */ #define TCP_MAX_OPTION_SPACE 40 #define TCP_CC_DATA_SZ 24 -#define TCP_MAX_GSO_SZ 65536 #define TCP_RXT_MAX_BURST 10 #define TCP_DUPACK_THRESHOLD 3 @@ -76,12 +74,12 @@ typedef enum _tcp_timers foreach_tcp_timer #undef _ TCP_N_TIMERS -} tcp_timers_e; +} __clib_packed tcp_timers_e; #define TCP_TIMER_HANDLE_INVALID ((u32) ~0) -#define TCP_TIMER_TICK 0.1 /**< Timer tick in seconds */ -#define TCP_TO_TIMER_TICK TCP_TICK*10 /**< Factor for converting +#define TCP_TIMER_TICK 0.0001 /**< Timer tick in seconds */ +#define TCP_TO_TIMER_TICK TCP_TICK*10000 /**< Factor for converting ticks to timer ticks */ #define TCP_RTO_MAX 60 * THZ /* Min max RTO (60s) as per RFC6298 */ @@ -151,13 +149,14 @@ typedef enum tcp_connection_flag_ #define TCP_SCOREBOARD_TRACE (0) #define TCP_MAX_SACK_BLOCKS 255 /**< Max number of SACK blocks stored */ #define TCP_INVALID_SACK_HOLE_INDEX ((u32)~0) +#define TCP_MAX_SACK_REORDER 300 typedef struct _scoreboard_trace_elt { u32 start; u32 end; u32 ack; - u32 snd_una_max; + u32 snd_nxt; u32 group; } scoreboard_trace_elt_t; @@ -185,7 +184,8 @@ typedef struct _sack_scoreboard u32 lost_bytes; /**< Bytes lost as per RFC6675 */ u32 last_lost_bytes; /**< Number of bytes last lost */ u32 cur_rxt_hole; /**< Retransmitting from this hole */ - u8 is_reneging; + u32 reorder; /**< Estimate of segment reordering */ + u8 is_reneging; /**< Flag set if peer is reneging*/ #if TCP_SCOREBOARD_TRACE scoreboard_trace_elt_t *trace; @@ -293,7 +293,6 @@ typedef struct _tcp_connection /** Send sequence variables RFC793 */ u32 snd_una; /**< oldest unacknowledged sequence number */ - u32 snd_una_max; /**< newest unacknowledged sequence number + 1*/ u32 snd_wnd; /**< send window */ u32 snd_wl1; /**< seq number used for last snd.wnd update */ u32 snd_wl2; /**< ack number used for last snd.wnd update */ @@ -308,20 +307,19 @@ typedef struct _tcp_connection u32 rcv_wnd; /**< receive window we expect */ u32 rcv_las; /**< rcv_nxt at last ack sent/rcv_wnd update */ - u32 iss; /**< initial sent sequence */ - u32 irs; /**< initial remote sequence */ /* Options */ u8 snd_opts_len; /**< Tx options len */ + u8 snd_sack_pos; /**< Position in vec of first block to send */ u8 rcv_wscale; /**< Window scale to advertise to peer */ u8 snd_wscale; /**< Window scale to use when sending */ u32 tsval_recent; /**< Last timestamp received */ u32 tsval_recent_age; /**< When last updated tstamp_recent*/ + u32 timestamp_delta; /**< Offset for timestamp */ tcp_options_t snd_opts; /**< Tx options for connection */ tcp_options_t rcv_opts; /**< Rx options for connection */ sack_block_t *snd_sacks; /**< Vector of SACKs to send. XXX Fixed size? */ - u8 snd_sack_pos; /**< Position in vec of first block to send */ sack_block_t *snd_sacks_fl; /**< Vector for building new list */ sack_scoreboard_t sack_sb; /**< SACK "scoreboard" that tracks holes */ @@ -345,7 +343,7 @@ typedef struct _tcp_connection u32 rxt_delivered; /**< Rxt bytes delivered during current cc event */ u32 rxt_head; /**< snd_una last time we re rxted the head */ u32 tsecr_last_ack; /**< Timestamp echoed to us in last healthy ACK */ - u32 snd_congestion; /**< snd_una_max when congestion is detected */ + u32 snd_congestion; /**< snd_nxt when congestion is detected */ u32 tx_fifo_size; /**< Tx fifo size. Used to constrain cwnd */ tcp_cc_algorithm_t *cc_algo; /**< Congestion control algorithm */ u8 cc_data[TCP_CC_DATA_SZ]; /**< Congestion control algo private data */ @@ -381,10 +379,11 @@ typedef struct _tcp_connection tcp_errors_t errors; /**< Soft connection errors */ + u32 iss; /**< initial sent sequence */ + u32 irs; /**< initial remote sequence */ f64 start_ts; /**< Timestamp when connection initialized */ u32 last_fib_check; /**< Last time we checked fib route for peer */ u16 mss; /**< Our max seg size that includes options */ - u32 timestamp_delta; /**< Offset for timestamp */ u32 ipv6_flow_label; /**< flow label for ipv6 header */ #define rst_state snd_wl1 @@ -445,7 +444,35 @@ tcp_get_connection_from_transport (transport_connection_t * tconn) return (tcp_connection_t *) tconn; } -typedef tw_timer_wheel_16t_2w_512sl_t tcp_timer_wheel_t; +/* + * Define custom timer wheel geometry + */ + +#undef TW_TIMER_WHEELS +#undef TW_SLOTS_PER_RING +#undef TW_RING_SHIFT +#undef TW_RING_MASK +#undef TW_TIMERS_PER_OBJECT +#undef LOG2_TW_TIMERS_PER_OBJECT +#undef TW_SUFFIX +#undef TW_OVERFLOW_VECTOR +#undef TW_FAST_WHEEL_BITMAP +#undef TW_TIMER_ALLOW_DUPLICATE_STOP +#undef TW_START_STOP_TRACE_SIZE + +#define TW_TIMER_WHEELS 2 +#define TW_SLOTS_PER_RING 1024 +#define TW_RING_SHIFT 10 +#define TW_RING_MASK (TW_SLOTS_PER_RING -1) +#define TW_TIMERS_PER_OBJECT 16 +#define LOG2_TW_TIMERS_PER_OBJECT 4 +#define TW_SUFFIX _tcp_twsl +#define TW_FAST_WHEEL_BITMAP 0 +#define TW_TIMER_ALLOW_DUPLICATE_STOP 1 + +#include + +typedef tw_timer_wheel_tcp_twsl_t tcp_timer_wheel_t; #endif /* SRC_VNET_TCP_TCP_TYPES_H_ */