diff options
Diffstat (limited to 'src/vnet/tcp')
-rw-r--r-- | src/vnet/tcp/tcp.c | 39 | ||||
-rw-r--r-- | src/vnet/tcp/tcp.h | 5 |
2 files changed, 38 insertions, 6 deletions
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c index e5feaeb1e03..69433e26a8c 100644 --- a/src/vnet/tcp/tcp.c +++ b/src/vnet/tcp/tcp.c @@ -633,18 +633,15 @@ tcp_initialize_timer_wheels (tcp_main_t * tm) } clib_error_t * -tcp_init (vlib_main_t * vm) +tcp_main_enable (vlib_main_t * vm) { - ip_main_t *im = &ip_main; - ip_protocol_info_t *pi; tcp_main_t *tm = vnet_get_tcp_main (); + ip_protocol_info_t *pi; + ip_main_t *im = &ip_main; vlib_thread_main_t *vtm = vlib_get_thread_main (); clib_error_t *error = 0; u32 num_threads; - tm->vlib_main = vm; - tm->vnet_main = vnet_get_main (); - if ((error = vlib_call_init_function (vm, ip_main_init))) return error; if ((error = vlib_call_init_function (vm, ip4_lookup_init))) @@ -697,6 +694,36 @@ tcp_init (vlib_main_t * vm) return error; } +clib_error_t * +vnet_tcp_enable_disable (vlib_main_t * vm, u8 is_en) +{ + if (is_en) + { + if (tcp_main.is_enabled) + return 0; + + return tcp_main_enable (vm); + } + else + { + tcp_main.is_enabled = 0; + } + + return 0; +} + +clib_error_t * +tcp_init (vlib_main_t * vm) +{ + tcp_main_t *tm = vnet_get_tcp_main (); + + tm->vlib_main = vm; + tm->vnet_main = vnet_get_main (); + tm->is_enabled = 0; + + return 0; +} + VLIB_INIT_FUNCTION (tcp_init); /* diff --git a/src/vnet/tcp/tcp.h b/src/vnet/tcp/tcp.h index 3560509d090..7d443433fa2 100644 --- a/src/vnet/tcp/tcp.h +++ b/src/vnet/tcp/tcp.h @@ -304,6 +304,9 @@ typedef struct _tcp_main /* Congestion control algorithms registered */ tcp_cc_algorithm_t *cc_algos; + /* Flag that indicates if stack is on or off */ + u8 is_enabled; + /* convenience */ vlib_main_t *vlib_main; vnet_main_t *vnet_main; @@ -323,6 +326,8 @@ vnet_get_tcp_main () return &tcp_main; } +clib_error_t *vnet_tcp_enable_disable (vlib_main_t * vm, u8 is_en); + always_inline tcp_connection_t * tcp_connection_get (u32 conn_index, u32 thread_index) { |