X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdpo%2Finterface_rx_dpo.c;h=d3615d0ce7612b4a4d7bcb66c5df64e13a139215;hb=c5df8c71c;hp=4a6832ade9e7a5cca1fb0b55071f31aa49c0f719;hpb=756cd9441752fc8f84104c9ee19099506ba89f85;p=vpp.git diff --git a/src/vnet/dpo/interface_rx_dpo.c b/src/vnet/dpo/interface_rx_dpo.c index 4a6832ade9e..d3615d0ce76 100644 --- a/src/vnet/dpo/interface_rx_dpo.c +++ b/src/vnet/dpo/interface_rx_dpo.c @@ -15,6 +15,10 @@ #include #include +#include + +#ifndef CLIB_MARCH_VARIANT +interface_rx_dpo_t *interface_rx_dpo_pool; /* * The 'DB' of interface DPOs. @@ -106,6 +110,7 @@ interface_rx_dpo_add_or_lock (dpo_proto_t proto, dpo_set(dpo, DPO_INTERFACE_RX, proto, interface_rx_dpo_get_index(ido)); } +#endif /* CLIB_MARCH_VARIANT */ static clib_error_t * @@ -146,7 +151,8 @@ interface_rx_dpo_interface_delete (vnet_main_t * vnm, VNET_SW_INTERFACE_ADD_DEL_FUNCTION( interface_rx_dpo_interface_delete); -u8* +#ifndef CLIB_MARCH_VARIANT +static u8* format_interface_rx_dpo (u8* s, va_list *ap) { index_t index = va_arg(*ap, index_t); @@ -216,6 +222,7 @@ interface_rx_dpo_module_init (void) &interface_rx_dpo_vft, interface_rx_dpo_nodes); } +#endif /* CLIB_MARCH_VARIANT */ /** * @brief Interface DPO trace data @@ -234,10 +241,11 @@ typedef enum interface_rx_dpo_next_t_ always_inline uword interface_rx_dpo_inline (vlib_main_t * vm, vlib_node_runtime_t * node, - vlib_frame_t * from_frame) + vlib_frame_t * from_frame, + u8 is_l2) { u32 n_left_from, next_index, * from, * to_next; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; vnet_interface_main_t *im; im = &vnet_get_main ()->interface_main; @@ -278,6 +286,12 @@ interface_rx_dpo_inline (vlib_main_t * vm, vnet_buffer(b0)->sw_if_index[VLIB_RX] = ido0->ido_sw_if_index; vnet_buffer(b1)->sw_if_index[VLIB_RX] = ido1->ido_sw_if_index; + if (is_l2) + { + vnet_update_l2_len (b0); + vnet_update_l2_len (b1); + } + vlib_increment_combined_counter (im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_RX, thread_index, @@ -329,6 +343,10 @@ interface_rx_dpo_inline (vlib_main_t * vm, * interface DPR represents */ vnet_buffer(b0)->sw_if_index[VLIB_RX] = ido0->ido_sw_if_index; + /* Update l2_len to make l2 tag rewrite work */ + if (is_l2) + vnet_update_l2_len (b0); + /* Bump the interface's RX coutners */ vlib_increment_combined_counter (im->combined_sw_if_counters + VNET_INTERFACE_COUNTER_RX, @@ -363,32 +381,28 @@ format_interface_rx_dpo_trace (u8 * s, va_list * args) return s; } -static uword -interface_rx_dpo_ip4 (vlib_main_t * vm, +VLIB_NODE_FN (interface_rx_dpo_ip4_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame) { - return (interface_rx_dpo_inline(vm, node, from_frame)); + return (interface_rx_dpo_inline(vm, node, from_frame, 0)); } -static uword -interface_rx_dpo_ip6 (vlib_main_t * vm, +VLIB_NODE_FN (interface_rx_dpo_ip6_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame) { - return (interface_rx_dpo_inline(vm, node, from_frame)); + return (interface_rx_dpo_inline(vm, node, from_frame, 0)); } -static uword -interface_rx_dpo_l2 (vlib_main_t * vm, +VLIB_NODE_FN (interface_rx_dpo_l2_node) (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame) { - return (interface_rx_dpo_inline(vm, node, from_frame)); + return (interface_rx_dpo_inline(vm, node, from_frame, 1)); } VLIB_REGISTER_NODE (interface_rx_dpo_ip4_node) = { - .function = interface_rx_dpo_ip4, .name = "interface-rx-dpo-ip4", .vector_size = sizeof (u32), .format_trace = format_interface_rx_dpo_trace, @@ -400,11 +414,8 @@ VLIB_REGISTER_NODE (interface_rx_dpo_ip4_node) = { }, }; -VLIB_NODE_FUNCTION_MULTIARCH (interface_rx_dpo_ip4_node, - interface_rx_dpo_ip4) VLIB_REGISTER_NODE (interface_rx_dpo_ip6_node) = { - .function = interface_rx_dpo_ip6, .name = "interface-rx-dpo-ip6", .vector_size = sizeof (u32), .format_trace = format_interface_rx_dpo_trace, @@ -416,11 +427,8 @@ VLIB_REGISTER_NODE (interface_rx_dpo_ip6_node) = { }, }; -VLIB_NODE_FUNCTION_MULTIARCH (interface_rx_dpo_ip6_node, - interface_rx_dpo_ip6) VLIB_REGISTER_NODE (interface_rx_dpo_l2_node) = { - .function = interface_rx_dpo_l2, .name = "interface-rx-dpo-l2", .vector_size = sizeof (u32), .format_trace = format_interface_rx_dpo_trace, @@ -432,5 +440,3 @@ VLIB_REGISTER_NODE (interface_rx_dpo_l2_node) = { }, }; -VLIB_NODE_FUNCTION_MULTIARCH (interface_rx_dpo_l2_node, - interface_rx_dpo_l2)