X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fwireguard%2Fwireguard.c;h=5d73638f8f98d52c20a5f837de2c3975d3f49354;hb=44ec846f4;hp=584222990691643f6f0f7574ef8080ea1fe979c2;hpb=d9ed3f2d8aeffbecfabc581b64a62d8ff59c7cd0;p=vpp.git diff --git a/src/plugins/wireguard/wireguard.c b/src/plugins/wireguard/wireguard.c old mode 100755 new mode 100644 index 58422299069..5d73638f8f9 --- a/src/plugins/wireguard/wireguard.c +++ b/src/plugins/wireguard/wireguard.c @@ -15,8 +15,8 @@ #include #include -#include #include +#include #include #include @@ -24,6 +24,47 @@ #include wg_main_t wg_main; +wg_async_post_next_t wg_encrypt_async_next; +wg_async_post_next_t wg_decrypt_async_next; + +void +wg_set_async_mode (u32 is_enabled) +{ + vnet_crypto_request_async_mode (is_enabled); + + if (is_enabled) + wg_op_mode_set_ASYNC (); + else + wg_op_mode_unset_ASYNC (); +} + +static void +wireguard_register_post_node (vlib_main_t *vm) + +{ + wg_async_post_next_t *eit; + wg_async_post_next_t *dit; + + eit = &wg_encrypt_async_next; + dit = &wg_decrypt_async_next; + + eit->wg4_post_next = + vnet_crypto_register_post_node (vm, "wg4-output-tun-post-node"); + eit->wg6_post_next = + vnet_crypto_register_post_node (vm, "wg6-output-tun-post-node"); + + dit->wg4_post_next = + vnet_crypto_register_post_node (vm, "wg4-input-post-node"); + dit->wg6_post_next = + vnet_crypto_register_post_node (vm, "wg6-input-post-node"); +} + +void +wg_secure_zero_memory (void *v, size_t n) +{ + static void *(*const volatile memset_v) (void *, int, size_t) = &memset; + memset_v (v, 0, n); +} static clib_error_t * wg_init (vlib_main_t * vm) @@ -32,9 +73,12 @@ wg_init (vlib_main_t * vm) wmp->vlib_main = vm; - wmp->in_fq_index = vlib_frame_queue_main_init (wg_input_node.index, 0); - wmp->out_fq_index = - vlib_frame_queue_main_init (wg_output_tun_node.index, 0); + wmp->in4_fq_index = vlib_frame_queue_main_init (wg4_input_node.index, 0); + wmp->in6_fq_index = vlib_frame_queue_main_init (wg6_input_node.index, 0); + wmp->out4_fq_index = + vlib_frame_queue_main_init (wg4_output_tun_node.index, 0); + wmp->out6_fq_index = + vlib_frame_queue_main_init (wg6_output_tun_node.index, 0); vlib_thread_main_t *tm = vlib_get_thread_main (); @@ -42,6 +86,8 @@ wg_init (vlib_main_t * vm) CLIB_CACHE_LINE_BYTES); wg_timer_wheel_init (); + wireguard_register_post_node (vm); + wmp->op_mode_flags = 0; return (NULL); } @@ -50,13 +96,18 @@ VLIB_INIT_FUNCTION (wg_init); /* *INDENT-OFF* */ -VNET_FEATURE_INIT (wg_output_tun, static) = -{ +VNET_FEATURE_INIT (wg4_output_tun, static) = { .arc_name = "ip4-output", - .node_name = "wg-output-tun", + .node_name = "wg4-output-tun", .runs_after = VNET_FEATURES ("gso-ip4"), }; +VNET_FEATURE_INIT (wg6_output_tun, static) = { + .arc_name = "ip6-output", + .node_name = "wg6-output-tun", + .runs_after = VNET_FEATURES ("gso-ip6"), +}; + VLIB_PLUGIN_REGISTER () = { .version = VPP_BUILD_VER,