tcp: allow registration of new cc algo types
Type: feature
Change-Id: I83e21b508a19df1beb207d961c8f2b52347deca0
Signed-off-by: Florin Coras <fcoras@cisco.com>
diff --git a/src/vnet/tcp/tcp.h b/src/vnet/tcp/tcp.h
index 98808c1..aeae57c 100644
--- a/src/vnet/tcp/tcp.h
+++ b/src/vnet/tcp/tcp.h
@@ -235,6 +235,7 @@
{
TCP_CC_NEWRENO,
TCP_CC_CUBIC,
+ TCP_CC_LAST = TCP_CC_CUBIC
} tcp_cc_algorithm_type_e;
typedef struct _tcp_cc_algorithm tcp_cc_algorithm_t;
@@ -448,18 +449,21 @@
tcp_connection_t *half_open_connections;
clib_spinlock_t half_open_lock;
- /* Congestion control algorithms registered */
- tcp_cc_algorithm_t *cc_algos;
-
/** vlib buffer size */
u32 bytes_per_buffer;
/* Seed used to generate random iss */
tcp_iss_seed_t iss_seed;
+ /* Congestion control algorithms registered */
+ tcp_cc_algorithm_t *cc_algos;
+
/** Hash table of cc algorithms by name */
uword *cc_algo_by_name;
+ /** Last cc algo registered */
+ tcp_cc_algorithm_type_e cc_last_type;
+
/*
* Configuration
*/
@@ -495,7 +499,6 @@
/** Default congestion control algorithm type */
tcp_cc_algorithm_type_e cc_algo;
-
} tcp_main_t;
extern tcp_main_t tcp_main;
@@ -936,9 +939,16 @@
void tcp_rcv_sacks (tcp_connection_t * tc, u32 ack);
u8 *tcp_scoreboard_replay (u8 * s, tcp_connection_t * tc, u8 verbose);
+/**
+ * Register exiting cc algo type
+ */
void tcp_cc_algo_register (tcp_cc_algorithm_type_e type,
const tcp_cc_algorithm_t * vft);
+/**
+ * Register new cc algo type
+ */
+tcp_cc_algorithm_type_e tcp_cc_algo_new_type (const tcp_cc_algorithm_t * vft);
tcp_cc_algorithm_t *tcp_cc_algo_get (tcp_cc_algorithm_type_e type);
static inline void *