diff options
author | Florin Coras <fcoras@cisco.com> | 2019-07-04 17:05:59 -0700 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2019-07-05 11:58:34 +0000 |
commit | ca2831a80c891ee941faf79cbd80805a2c343eaf (patch) | |
tree | 839d28f2b07486f77a68ea7461d9b1a80e8e5822 /src | |
parent | eff6b82e905f39aa740db38341626d8d615282fa (diff) |
tcp: add cc algo start tx event
Type: feature
Notify cc algos that new data is sent on a connection that was
apparently idle.
Change-Id: I892e5e9bb5b88d791265ffbbefce6f9694d01970
Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/vnet/tcp/tcp.h | 13 | ||||
-rw-r--r-- | src/vnet/tcp/tcp_output.c | 3 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/vnet/tcp/tcp.h b/src/vnet/tcp/tcp.h index f2626af9da8..c83e7dced1e 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); @@ -388,6 +393,7 @@ struct _tcp_cc_algorithm 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* */ @@ -979,6 +985,13 @@ tcp_cc_undo_recovery (tcp_connection_t * tc) 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) { diff --git a/src/vnet/tcp/tcp_output.c b/src/vnet/tcp/tcp_output.c index 8537b1fb772..17873ac4dab 100644 --- a/src/vnet/tcp/tcp_output.c +++ b/src/vnet/tcp/tcp_output.c @@ -425,6 +425,9 @@ tcp_update_burst_snd_vars (tcp_connection_t * tc) if (tc->flags & TCP_CONN_RATE_SAMPLE) tc->flags |= TCP_CONN_TRACK_BURST; + + if (tc->snd_una == tc->snd_nxt) + tcp_cc_event (tc, TCP_CC_EVT_START_TX); } void |