X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_output.c;h=3363f76b722ce8af9314924ab772989eb9a48b16;hb=9ec846c2684b69f47505d73ea9f873b793a11558;hp=913bac64df0f28878490ece9b18adcac5c36d47a;hpb=148c7b768721231325a349fa82db693190513b53;p=vpp.git diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c index 913bac64df0..3363f76b722 100644 --- a/src/vnet/interface_output.c +++ b/src/vnet/interface_output.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -90,6 +91,7 @@ format_vnet_interface_output_trace (u8 * s, va_list * va) } return s; } +#endif /* CLIB_MARCH_VARIANT */ static void vnet_interface_output_trace (vlib_main_t * vm, @@ -426,7 +428,6 @@ vnet_interface_output_node_inline (vlib_main_t * vm, rt->sw_if_index, n_packets, n_bytes); return n_buffers; } -#endif /* CLIB_MARCH_VARIANT */ static_always_inline void vnet_interface_pcap_tx_trace (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame, @@ -485,11 +486,12 @@ static_always_inline void vnet_interface_pcap_tx_trace } } -#ifndef CLIB_MARCH_VARIANT +static vlib_node_function_t CLIB_MULTIARCH_FN (vnet_interface_output_node); -uword -vnet_interface_output_node (vlib_main_t * vm, vlib_node_runtime_t * node, - vlib_frame_t * frame) +static uword +CLIB_MULTIARCH_FN (vnet_interface_output_node) (vlib_main_t * vm, + vlib_node_runtime_t * node, + vlib_frame_t * frame) { vnet_main_t *vnm = vnet_get_main (); vnet_hw_interface_t *hi; @@ -506,6 +508,15 @@ vnet_interface_output_node (vlib_main_t * vm, vlib_node_runtime_t * node, return vnet_interface_output_node_inline (vm, node, frame, vnm, hi, /* do_tx_offloads */ 1); } + +CLIB_MARCH_FN_REGISTRATION (vnet_interface_output_node); + +#ifndef CLIB_MARCH_VARIANT +vlib_node_function_t * +vnet_interface_output_node_get (void) +{ + return CLIB_MARCH_FN_POINTER (vnet_interface_output_node); +} #endif /* CLIB_MARCH_VARIANT */ /* Use buffer's sw_if_index[VNET_TX] to choose output interface. */ @@ -799,19 +810,21 @@ interface_drop_punt (vlib_main_t * vm, node->flags |= VLIB_NODE_FLAG_TRACE; while (n_trace && n_left) { - vlib_trace_buffer (vm, node, 0 /* next_index */ , - b[0], 0 /* follow chain */ ); - /* - * Here we have a wireshark dissector problem. - * Packets may be well-formed, or not. We - * must not blow chunks in any case. - * - * Try to produce trace records which will help - * folks understand what's going on. - */ - drop_catchup_trace (vm, node, b[0]); - - n_trace--; + if (PREDICT_TRUE + (vlib_trace_buffer (vm, node, 0 /* next_index */ , b[0], + 0 /* follow chain */ ))) + { + /* + * Here we have a wireshark dissector problem. + * Packets may be well-formed, or not. We + * must not blow chunks in any case. + * + * Try to produce trace records which will help + * folks understand what's going on. + */ + drop_catchup_trace (vm, node, b[0]); + n_trace--; + } n_left--; b++; }