X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_funcs.h;h=3db5a2d8c11628ecd15e5313b6964db1f3619e24;hb=254c803612c0c9ec5dfc1b90de6efb23ec5bedd5;hp=7d9c098b118a3dd6890b9a08a40d116c6aba0940;hpb=08eb2bb205f998a75dacd1f3b999ec1a10160b35;p=vpp.git diff --git a/src/vnet/interface_funcs.h b/src/vnet/interface_funcs.h index 7d9c098b118..3db5a2d8c11 100644 --- a/src/vnet/interface_funcs.h +++ b/src/vnet/interface_funcs.h @@ -342,6 +342,14 @@ vnet_sw_interface_is_up (vnet_main_t * vnm, u32 sw_if_index) vnet_sw_interface_is_link_up (vnm, sw_if_index)); } +always_inline uword +vnet_sw_interface_is_sub (vnet_main_t *vnm, u32 sw_if_index) +{ + vnet_sw_interface_t *sw = vnet_get_sw_interface (vnm, sw_if_index); + + return (sw->sw_if_index != sw->sup_sw_if_index); +} + always_inline vlib_frame_t * vnet_get_frame_to_sw_interface (vnet_main_t * vnm, u32 sw_if_index) { @@ -407,8 +415,7 @@ clib_error_t *set_hw_interface_change_rx_mode (vnet_main_t * vnm, u32 hw_if_index, u8 queue_id_valid, u32 queue_id, - vnet_hw_interface_rx_mode - mode); + vnet_hw_if_rx_mode mode); /* Set rx-placement on the interface */ clib_error_t *set_hw_interface_rx_placement (u32 hw_if_index, u32 queue_id, @@ -423,17 +430,24 @@ void vnet_sw_interface_set_protocol_mtu (vnet_main_t * vnm, u32 sw_if_index, u32 mtu[]); /* update the unnumbered state of an interface */ -void vnet_sw_interface_update_unnumbered (u32 sw_if_index, - u32 ip_sw_if_index, u8 enable); +int vnet_sw_interface_update_unnumbered (u32 sw_if_index, u32 ip_sw_if_index, + u8 enable); int vnet_sw_interface_stats_collect_enable_disable (u32 sw_if_index, u8 enable); void vnet_sw_interface_ip_directed_broadcast (vnet_main_t * vnm, u32 sw_if_index, u8 enable); +/* set interface rss queues */ +clib_error_t *vnet_hw_interface_set_rss_queues (vnet_main_t * vnm, + vnet_hw_interface_t * hi, + clib_bitmap_t * bitmap); + +void vnet_hw_if_update_runtime_data (vnet_main_t *vnm, u32 hw_if_index); + /* Formats sw/hw interface. */ format_function_t format_vnet_hw_interface; -format_function_t format_vnet_hw_interface_rx_mode; +format_function_t format_vnet_hw_if_rx_mode; format_function_t format_vnet_hw_if_index_name; format_function_t format_vnet_sw_interface; format_function_t format_vnet_sw_interface_name; @@ -445,6 +459,7 @@ format_function_t format_vnet_sw_interface_flags; unformat_function_t unformat_vnet_sw_interface; unformat_function_t unformat_vnet_hw_interface; unformat_function_t unformat_vnet_buffer_flags; +unformat_function_t unformat_vnet_buffer_offload_flags; /* Parses interface flags (up, down, enable, disable, etc.) */ unformat_function_t unformat_vnet_hw_interface_flags; @@ -487,8 +502,6 @@ typedef enum { VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DOWN, VNET_INTERFACE_OUTPUT_ERROR_INTERFACE_DELETED, - VNET_INTERFACE_OUTPUT_ERROR_NO_BUFFERS_FOR_GSO, - VNET_INTERFACE_OUTPUT_ERROR_UNHANDLED_GSO_TYPE, } vnet_interface_output_error_t; /* Format for interface output traces. */ @@ -497,6 +510,43 @@ u8 *format_vnet_interface_output_trace (u8 * s, va_list * va); serialize_function_t serialize_vnet_interface_state, unserialize_vnet_interface_state; +/** + * @brief Add buffer (vlib_buffer_t) to the trace + * + * @param *pm - pcap_main_t + * @param *vm - vlib_main_t + * @param buffer_index - u32 + * @param n_bytes_in_trace - u32 + * + */ +static inline void +pcap_add_buffer (pcap_main_t *pm, struct vlib_main_t *vm, u32 buffer_index, + u32 n_bytes_in_trace) +{ + vlib_buffer_t *b = vlib_get_buffer (vm, buffer_index); + u32 n = vlib_buffer_length_in_chain (vm, b); + i32 n_left = clib_min (n_bytes_in_trace, n); + f64 time_now = vlib_time_now (vm); + void *d; + + if (PREDICT_TRUE (pm->n_packets_captured < pm->n_packets_to_capture)) + { + clib_spinlock_lock_if_init (&pm->lock); + d = pcap_add_packet (pm, time_now, n_left, n); + while (1) + { + u32 copy_length = clib_min ((u32) n_left, b->current_length); + clib_memcpy_fast (d, b->data + b->current_data, copy_length); + n_left -= b->current_length; + if (n_left <= 0) + break; + d += b->current_length; + ASSERT (b->flags & VLIB_BUFFER_NEXT_PRESENT); + b = vlib_get_buffer (vm, b->next_buffer); + } + clib_spinlock_unlock_if_init (&pm->lock); + } +} #endif /* included_vnet_interface_funcs_h */ /*