X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_funcs.h;h=565dcd5be99c03e3e2a124210adbf852fc83731c;hb=25ab6c541062f436989b89962cdab10f21f1b4f0;hp=c0ad81c6d8710e0d1b1924481bc75416f5bd7be0;hpb=3940de36728b768574a3e998389bb90d55f690d1;p=vpp.git diff --git a/src/vnet/interface_funcs.h b/src/vnet/interface_funcs.h index c0ad81c6d87..565dcd5be99 100644 --- a/src/vnet/interface_funcs.h +++ b/src/vnet/interface_funcs.h @@ -239,6 +239,7 @@ clib_error_t *vnet_create_sw_interface (vnet_main_t * vnm, void vnet_delete_hw_interface (vnet_main_t * vnm, u32 hw_if_index); void vnet_delete_sw_interface (vnet_main_t * vnm, u32 sw_if_index); int vnet_sw_interface_is_p2p (vnet_main_t * vnm, u32 sw_if_index); +int vnet_sw_interface_is_nbma (vnet_main_t * vnm, u32 sw_if_index); always_inline vnet_sw_interface_flags_t vnet_sw_interface_get_flags (vnet_main_t * vnm, u32 sw_if_index) @@ -341,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) { @@ -390,6 +399,12 @@ void vnet_hw_interface_init_for_class (vnet_main_t * vnm, u32 hw_if_index, clib_error_t *vnet_rename_interface (vnet_main_t * vnm, u32 hw_if_index, char *new_name); +/* Add/delete secondary interface mac address*/ +clib_error_t *vnet_hw_interface_add_del_mac_address (vnet_main_t * vnm, + u32 hw_if_index, + const u8 * mac_address, + u8 is_add); + /* Change interface mac address*/ clib_error_t *vnet_hw_interface_change_mac_address (vnet_main_t * vnm, u32 hw_if_index, @@ -400,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, @@ -424,9 +438,14 @@ int vnet_sw_interface_stats_collect_enable_disable (u32 sw_if_index, 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); + /* 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; @@ -437,11 +456,16 @@ format_function_t format_vnet_sw_interface_flags; /* Parses sw/hw interface name -> index. */ 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; unformat_function_t unformat_vnet_sw_interface_flags; +/* VLAN tag-rewrite */ +format_function_t format_vtr; + /* Node runtime for interface output function. */ typedef struct { @@ -486,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 */ /*