diff options
Diffstat (limited to 'extras/router-plugin/rtinject/tap_inject.c')
-rw-r--r-- | extras/router-plugin/rtinject/tap_inject.c | 161 |
1 files changed, 78 insertions, 83 deletions
diff --git a/extras/router-plugin/rtinject/tap_inject.c b/extras/router-plugin/rtinject/tap_inject.c index f41ae86c8..7befb3862 100644 --- a/extras/router-plugin/rtinject/tap_inject.c +++ b/extras/router-plugin/rtinject/tap_inject.c @@ -16,10 +16,10 @@ #include "tap_inject.h" -#include <vnet/mfib/mfib_table.h> +#include <vnet/fib/fib.h> #include <vnet/ip/ip.h> #include <vnet/ip/lookup.h> -#include <vnet/fib/fib.h> +#include <vnet/mfib/mfib_table.h> static tap_inject_main_t tap_inject_main; extern dpo_type_t tap_inject_dpo_type; @@ -33,7 +33,7 @@ tap_inject_get_main (void) void tap_inject_insert_tap (u32 sw_if_index, u32 tap_fd, u32 tap_if_index) { - tap_inject_main_t * im = tap_inject_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); vec_validate_init_empty (im->sw_if_index_to_tap_fd, sw_if_index, ~0); vec_validate_init_empty (im->sw_if_index_to_tap_if_index, sw_if_index, ~0); @@ -51,7 +51,7 @@ tap_inject_insert_tap (u32 sw_if_index, u32 tap_fd, u32 tap_if_index) void tap_inject_delete_tap (u32 sw_if_index) { - tap_inject_main_t * im = tap_inject_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); u32 tap_fd = im->sw_if_index_to_tap_fd[sw_if_index]; u32 tap_if_index = im->sw_if_index_to_tap_if_index[sw_if_index]; @@ -65,7 +65,7 @@ tap_inject_delete_tap (u32 sw_if_index) u32 tap_inject_lookup_tap_fd (u32 sw_if_index) { - tap_inject_main_t * im = tap_inject_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); vec_validate_init_empty (im->sw_if_index_to_tap_fd, sw_if_index, ~0); return im->sw_if_index_to_tap_fd[sw_if_index]; @@ -74,7 +74,7 @@ tap_inject_lookup_tap_fd (u32 sw_if_index) u32 tap_inject_lookup_sw_if_index_from_tap_fd (u32 tap_fd) { - tap_inject_main_t * im = tap_inject_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); vec_validate_init_empty (im->tap_fd_to_sw_if_index, tap_fd, ~0); return im->tap_fd_to_sw_if_index[tap_fd]; @@ -83,25 +83,24 @@ tap_inject_lookup_sw_if_index_from_tap_fd (u32 tap_fd) u32 tap_inject_lookup_sw_if_index_from_tap_if_index (u32 tap_if_index) { - tap_inject_main_t * im = tap_inject_get_main (); - uword * sw_if_index; + tap_inject_main_t *im = tap_inject_get_main (); + uword *sw_if_index; sw_if_index = hash_get (im->tap_if_index_to_sw_if_index, tap_if_index); - return sw_if_index ? *(u32 *)sw_if_index : ~0; + return sw_if_index ? *(u32 *) sw_if_index : ~0; } /* *INDENT-OFF* */ VLIB_PLUGIN_REGISTER () = { - // .version = VPP_BUILD_VER, FIXME - .description = "router", + // .version = VPP_BUILD_VER, FIXME + .description = "router", }; /* *INDENT-ON* */ - static void tap_inject_disable (void) { - tap_inject_main_t * im = tap_inject_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); im->flags &= ~TAP_INJECT_F_ENABLED; @@ -111,8 +110,8 @@ tap_inject_disable (void) static clib_error_t * tap_inject_enable (void) { - vlib_main_t * vm = vlib_get_main (); - tap_inject_main_t * im = tap_inject_get_main (); + vlib_main_t *vm = vlib_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); if (tap_inject_is_enabled ()) return 0; @@ -127,7 +126,8 @@ tap_inject_enable (void) } /* Register ARP and ICMP6 as neighbor nodes. */ - ethernet_register_input_type (vm, ETHERNET_TYPE_ARP, im->neighbor_node_index); + ethernet_register_input_type (vm, ETHERNET_TYPE_ARP, + im->neighbor_node_index); ip6_register_protocol (IP_PROTOCOL_ICMP6, im->neighbor_node_index); /* Register remaining protocols. */ @@ -147,26 +147,25 @@ tap_inject_enable (void) const mfib_prefix_t pfx_224_0_0_0 = { .fp_len = 24, .fp_proto = FIB_PROTOCOL_IP4, - .fp_grp_addr = { - .ip4.as_u32 = clib_host_to_net_u32(0xe0000000), - }, - .fp_src_addr = { - .ip4.as_u32 = 0, - }, + .fp_grp_addr = + { + .ip4.as_u32 = clib_host_to_net_u32(0xe0000000), + }, + .fp_src_addr = + { + .ip4.as_u32 = 0, + }, }; - dpo_set(&dpo, tap_inject_dpo_type, DPO_PROTO_IP4, ~0); + dpo_set (&dpo, tap_inject_dpo_type, DPO_PROTO_IP4, ~0); - index_t repi = replicate_create(1, DPO_PROTO_IP4); - replicate_set_bucket(repi, 0, &dpo); + index_t repi = replicate_create (1, DPO_PROTO_IP4); + replicate_set_bucket (repi, 0, &dpo); - mfib_table_entry_special_add(0, - &pfx_224_0_0_0, - MFIB_SOURCE_API, - MFIB_ENTRY_FLAG_ACCEPT_ALL_ITF, - repi); + mfib_table_entry_special_add (0, &pfx_224_0_0_0, MFIB_SOURCE_API, + MFIB_ENTRY_FLAG_ACCEPT_ALL_ITF, repi); - dpo_reset(&dpo); + dpo_reset (&dpo); } im->flags |= TAP_INJECT_F_ENABLED; @@ -175,24 +174,24 @@ tap_inject_enable (void) } static uword -tap_inject_iface_isr (vlib_main_t * vm, vlib_node_runtime_t * node, - vlib_frame_t * f) +tap_inject_iface_isr (vlib_main_t *vm, vlib_node_runtime_t *node, + vlib_frame_t *f) { - tap_inject_main_t * im = tap_inject_get_main (); - vnet_hw_interface_t * hw; - u32 * hw_if_index; - clib_error_t * err = 0; + tap_inject_main_t *im = tap_inject_get_main (); + vnet_hw_interface_t *hw; + u32 *hw_if_index; + clib_error_t *err = 0; vec_foreach (hw_if_index, im->interfaces_to_enable) { hw = vnet_get_hw_interface (vnet_get_main (), *hw_if_index); if (hw->hw_class_index == ethernet_hw_interface_class.index) - { - err = tap_inject_tap_connect (hw); - if (err) - break; - } + { + err = tap_inject_tap_connect (hw); + if (err) + break; + } } vec_foreach (hw_if_index, im->interfaces_to_disable) @@ -212,13 +211,12 @@ VLIB_REGISTER_NODE (tap_inject_iface_isr_node, static) = { .vector_size = sizeof (u32), }; - static clib_error_t * -tap_inject_interface_add_del (struct vnet_main_t * vnet_main, u32 hw_if_index, - u32 add) +tap_inject_interface_add_del (struct vnet_main_t *vnet_main, u32 hw_if_index, + u32 add) { - vlib_main_t * vm = vlib_get_main (); - tap_inject_main_t * im = tap_inject_get_main (); + vlib_main_t *vm = vlib_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); if (!tap_inject_is_config_enabled ()) return 0; @@ -237,15 +235,14 @@ tap_inject_interface_add_del (struct vnet_main_t * vnet_main, u32 hw_if_index, VNET_HW_INTERFACE_ADD_DEL_FUNCTION (tap_inject_interface_add_del); - static clib_error_t * tap_inject_enable_disable_all_interfaces (int enable) { - vnet_main_t * vnet_main = vnet_get_main (); - tap_inject_main_t * im = tap_inject_get_main (); - vnet_hw_interface_t * interfaces; - vnet_hw_interface_t * hw; - u32 ** indices; + vnet_main_t *vnet_main = vnet_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); + vnet_hw_interface_t *interfaces; + vnet_hw_interface_t *hw; + u32 **indices; if (enable) tap_inject_enable (); @@ -255,7 +252,8 @@ tap_inject_enable_disable_all_interfaces (int enable) /* Collect all the interface indices. */ interfaces = vnet_main->interface_main.hw_interfaces; indices = enable ? &im->interfaces_to_enable : &im->interfaces_to_disable; - pool_foreach (hw, interfaces, vec_add1 (*indices, hw - interfaces)); + pool_foreach (hw, interfaces, vec_add1 (*indices, hw - interfaces)) + ; if (tap_inject_iface_isr (vlib_get_main (), 0, 0)) return clib_error_return (0, "tap-inject interface add del isr failed"); @@ -264,26 +262,26 @@ tap_inject_enable_disable_all_interfaces (int enable) } static clib_error_t * -tap_inject_cli (vlib_main_t * vm, unformat_input_t * input, - vlib_cli_command_t * cmd) +tap_inject_cli (vlib_main_t *vm, unformat_input_t *input, + vlib_cli_command_t *cmd) { - tap_inject_main_t * im = tap_inject_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); if (cmd->function_arg) { - clib_error_t * err; + clib_error_t *err; if (tap_inject_is_config_disabled ()) - return clib_error_return (0, - "tap-inject is disabled in config, thus cannot be enabled."); + return clib_error_return ( + 0, "tap-inject is disabled in config, thus cannot be enabled."); /* Enable */ err = tap_inject_enable_disable_all_interfaces (1); if (err) - { - tap_inject_enable_disable_all_interfaces (0); - return err; - } + { + tap_inject_enable_disable_all_interfaces (0); + return err; + } im->flags |= TAP_INJECT_F_CONFIG_ENABLE; } @@ -311,13 +309,12 @@ VLIB_CLI_COMMAND (tap_inject_disable_cmd, static) = { .function_arg = 0, }; - static clib_error_t * -show_tap_inject (vlib_main_t * vm, unformat_input_t * input, - vlib_cli_command_t * cmd) +show_tap_inject (vlib_main_t *vm, unformat_input_t *input, + vlib_cli_command_t *cmd) { - vnet_main_t * vnet_main = vnet_get_main (); - tap_inject_main_t * im = tap_inject_get_main (); + vnet_main_t *vnet_main = vnet_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); u32 k, v; if (tap_inject_is_config_disabled ()) @@ -333,10 +330,9 @@ show_tap_inject (vlib_main_t * vm, unformat_input_t * input, } hash_foreach (k, v, im->tap_if_index_to_sw_if_index, { - vlib_cli_output (vm, "%U -> %U", - format_vnet_sw_interface_name, vnet_main, - vnet_get_sw_interface (vnet_main, v), - format_tap_inject_tap_name, k); + vlib_cli_output (vm, "%U -> %U", format_vnet_sw_interface_name, vnet_main, + vnet_get_sw_interface (vnet_main, v), + format_tap_inject_tap_name, k); }); return 0; @@ -348,31 +344,30 @@ VLIB_CLI_COMMAND (show_tap_inject_cmd, static) = { .function = show_tap_inject, }; - static clib_error_t * -tap_inject_config (vlib_main_t * vm, unformat_input_t * input) +tap_inject_config (vlib_main_t *vm, unformat_input_t *input) { - tap_inject_main_t * im = tap_inject_get_main (); + tap_inject_main_t *im = tap_inject_get_main (); while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "enable")) - im->flags |= TAP_INJECT_F_CONFIG_ENABLE; + im->flags |= TAP_INJECT_F_CONFIG_ENABLE; else if (unformat (input, "disable")) - im->flags |= TAP_INJECT_F_CONFIG_DISABLE; + im->flags |= TAP_INJECT_F_CONFIG_DISABLE; else if (unformat (input, "netlink-only")) - im->flags |= TAP_INJECT_F_CONFIG_NETLINK; + im->flags |= TAP_INJECT_F_CONFIG_NETLINK; else - return clib_error_return (0, "syntax error `%U'", - format_unformat_error, input); + return clib_error_return (0, "syntax error `%U'", + format_unformat_error, input); } if (tap_inject_is_config_enabled () && tap_inject_is_config_disabled ()) - return clib_error_return (0, - "tap-inject cannot be both enabled and disabled."); + return clib_error_return ( + 0, "tap-inject cannot be both enabled and disabled."); return 0; } |