X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvnet%2Ftcp%2Ftcp.h;h=a13a30dcb728d59612d1efafed700fc668dec08a;hb=1cfcb78940580c8e3645fca0419d32f9286e942d;hp=2bc6f22ba83c089da557a4a4b6e6df7aae95ce73;hpb=a3c3265b20c2a382656957b4afd2003bddccd9bb;p=vpp.git diff --git a/src/vnet/tcp/tcp.h b/src/vnet/tcp/tcp.h index 2bc6f22ba83..a13a30dcb72 100644 --- a/src/vnet/tcp/tcp.h +++ b/src/vnet/tcp/tcp.h @@ -288,6 +288,11 @@ typedef enum _tcp_cc_ack_t TCP_CC_PARTIALACK } tcp_cc_ack_t; +typedef enum tcp_cc_event_ +{ + TCP_CC_EVT_START_TX, +} tcp_cc_event_t; + typedef struct _tcp_connection { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); @@ -372,6 +377,7 @@ typedef struct _tcp_connection u32 last_fib_check; /**< Last time we checked fib route for peer */ u16 mss; /**< Our max seg size that includes options */ + u32 timestamp_delta; } tcp_connection_t; /* *INDENT-OFF* */ @@ -387,6 +393,8 @@ struct _tcp_cc_algorithm void (*congestion) (tcp_connection_t * tc); void (*loss) (tcp_connection_t * tc); void (*recovered) (tcp_connection_t * tc); + void (*undo_recovery) (tcp_connection_t * tc); + void (*event) (tcp_connection_t *tc, tcp_cc_event_t evt); }; /* *INDENT-ON* */ @@ -921,6 +929,16 @@ tcp_time_now_w_thread (u32 thread_index) return tcp_main.wrk_ctx[thread_index].time_now; } +/** + * Generate timestamp for tcp connection + */ +always_inline u32 +tcp_tstamp (tcp_connection_t * tc) +{ + return (tcp_main.wrk_ctx[tc->c_thread_index].time_now - + tc->timestamp_delta); +} + always_inline f64 tcp_time_now_us (u32 thread_index) { @@ -965,6 +983,26 @@ tcp_cc_loss (tcp_connection_t * tc) tc->cc_algo->loss (tc); } +static inline void +tcp_cc_recovered (tcp_connection_t * tc) +{ + tc->cc_algo->recovered (tc); +} + +static inline void +tcp_cc_undo_recovery (tcp_connection_t * tc) +{ + if (tc->cc_algo->undo_recovery) + tc->cc_algo->undo_recovery (tc); +} + +static inline void +tcp_cc_event (tcp_connection_t * tc, tcp_cc_event_t evt) +{ + if (tc->cc_algo->event) + tc->cc_algo->event (tc, evt); +} + always_inline void tcp_timer_set (tcp_connection_t * tc, u8 timer_id, u32 interval) {