X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface.h;h=c6400ce69789c9336fb09609e54a41009a8be88d;hb=3ffe6cadf;hp=2e32a790996fa4fda8360df692b2e71eea03e6dc;hpb=8b5d0b8c3a089e88a8872af939302029eb3434d9;p=vpp.git diff --git a/src/vnet/interface.h b/src/vnet/interface.h index 2e32a790996..c6400ce6978 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -47,7 +47,7 @@ struct vnet_main_t; struct vnet_hw_interface_t; struct vnet_sw_interface_t; -struct ip46_address_t; +union ip46_address_t_; typedef enum { @@ -131,7 +131,7 @@ static void __vnet_interface_function_deinit_##tag##_##f (void) \ { \ vnet_main_t * vnm = vnet_get_main(); \ _vnet_interface_function_list_elt_t *next; \ - if (vnm->tag##_functions[p]->fp == (void *) &f) \ + if (vnm->tag##_functions[p]->fp == f) \ { \ vnm->tag##_functions[p] = \ vnm->tag##_functions[p]->next_interface_function; \ @@ -140,7 +140,7 @@ static void __vnet_interface_function_deinit_##tag##_##f (void) \ next = vnm->tag##_functions[p]; \ while (next->next_interface_function) \ { \ - if (next->next_interface_function->fp == (void *) &f) \ + if (next->next_interface_function->fp == f) \ { \ next->next_interface_function = \ next->next_interface_function->next_interface_function; \ @@ -174,6 +174,14 @@ static __clib_unused void * __clib_unused_##f = f; #define VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION_PRIO(f,p) \ _VNET_INTERFACE_FUNCTION_DECL_PRIO(f,sw_interface_admin_up_down, p) +/** + * Tunnel description parameters + */ +typedef int (*vnet_dev_class_ip_tunnel_desc_t) (u32 sw_if_index, + union ip46_address_t_ * src, + union ip46_address_t_ * dst, + u8 * is_l2); + /* A class of hardware interface devices. */ typedef struct _vnet_device_class { @@ -235,6 +243,8 @@ typedef struct _vnet_device_class /* Format flow offload entry */ format_function_t *format_flow; + vnet_dev_class_ip_tunnel_desc_t ip_tun_desc; + /* Function to clear hardware counters for device. */ void (*clear_counters) (u32 dev_class_instance); @@ -302,31 +312,6 @@ CLIB_MARCH_SFX (devclass##_tx_fn_multiarch_register) (void) \ } \ uword CLIB_CPU_OPTIMIZED CLIB_MARCH_SFX (devclass##_tx_fn) -#define VLIB_DEVICE_TX_FUNCTION_CLONE_TEMPLATE(arch, fn, tgt) \ - uword \ - __attribute__ ((flatten)) \ - __attribute__ ((target (tgt))) \ - CLIB_CPU_OPTIMIZED \ - fn ## _ ## arch ( vlib_main_t * vm, \ - vlib_node_runtime_t * node, \ - vlib_frame_t * frame) \ - { return fn (vm, node, frame); } - -#define VLIB_DEVICE_TX_FUNCTION_MULTIARCH_CLONE(fn) \ - foreach_march_variant(VLIB_DEVICE_TX_FUNCTION_CLONE_TEMPLATE, fn) - -#if CLIB_DEBUG > 0 -#define VLIB_MULTIARCH_CLONE_AND_SELECT_FN(fn,...) -#define VLIB_DEVICE_TX_FUNCTION_MULTIARCH(dev, fn) -#else -#define VLIB_DEVICE_TX_FUNCTION_MULTIARCH(dev, fn) \ - VLIB_DEVICE_TX_FUNCTION_MULTIARCH_CLONE(fn) \ - CLIB_MULTIARCH_SELECT_FN(fn, static inline) \ - static void __attribute__((__constructor__)) \ - __vlib_device_tx_function_multiarch_select_##dev (void) \ - { dev.tx_function = fn ## _multiarch_select(); } -#endif - /** * Link Type: A description of the protocol of packets on the link. * On an ethernet link this maps directly into the ethertype. On a GRE tunnel @@ -497,6 +482,9 @@ typedef enum vnet_hw_interface_flags_t_ /* tx checksum offload */ VNET_HW_INTERFACE_FLAG_SUPPORTS_TX_L4_CKSUM_OFFLOAD = (1 << 17), + + /* gso */ + VNET_HW_INTERFACE_FLAG_SUPPORTS_GSO = (1 << 18), } vnet_hw_interface_flags_t; #define VNET_HW_INTERFACE_FLAG_DUPLEX_SHIFT 1 @@ -587,6 +575,10 @@ typedef struct vnet_hw_interface_t /* device input device_and_queue runtime index */ uword *dq_runtime_index_by_queue; + /* numa node that hardware device connects to */ + u8 numa_node; + + u8 padding[3]; } vnet_hw_interface_t; extern vnet_device_class_t vnet_local_interface_device_class; @@ -679,7 +671,7 @@ typedef enum vnet_sw_interface_flags_t_ /* Interface is disabled for forwarding: punt all traffic to slow-path. */ VNET_SW_INTERFACE_FLAG_PUNT = (1 << 1), - VNET_SW_INTERFACE_FLAG_PROXY_ARP = (1 << 2), + __VNET_SW_INTERFACE_FLAG_UNSUED = (1 << 2), VNET_SW_INTERFACE_FLAG_UNNUMBERED = (1 << 3), @@ -783,7 +775,7 @@ typedef enum _(RX_MULTICAST, rx-multicast, if) \ _(RX_BROADCAST, rx-broadcast, if) \ _(TX, tx, if) \ - _(TX_UNICAST, tx-unicast-miss, if) \ + _(TX_UNICAST, tx-unicast, if) \ _(TX_MULTICAST, tx-multicast, if) \ _(TX_BROADCAST, tx-broadcast, if) @@ -811,6 +803,15 @@ typedef struct u32 tx_node_index; } vnet_hw_interface_nodes_t; +typedef struct +{ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); + u32 *split_buffers; +} vnet_interface_per_thread_data_t; + +typedef u8 *(*vnet_buffer_opquae_formatter_t) (const vlib_buffer_t * b, + u8 * s); + typedef struct { /* Hardware interfaces. */ @@ -849,6 +850,16 @@ typedef struct u32 pcap_pkts_to_capture; uword *pcap_drop_filter_hash; + /* Buffer metadata format helper functions */ + vnet_buffer_opquae_formatter_t *buffer_opaque_format_helpers; + vnet_buffer_opquae_formatter_t *buffer_opaque2_format_helpers; + + /* per-thread data */ + vnet_interface_per_thread_data_t *per_thread_data; + + /* enable GSO processing in packet path if this count is > 0 */ + u32 gso_interface_count; + /* feature_arc_index */ u8 output_feature_arc_index; } vnet_interface_main_t; @@ -872,6 +883,16 @@ void vnet_pcap_drop_trace_filter_add_del (u32 error_index, int is_add); int vnet_interface_name_renumber (u32 sw_if_index, u32 new_show_dev_instance); +uword vnet_interface_output_node (vlib_main_t * vm, + vlib_node_runtime_t * node, + vlib_frame_t * frame); + +void vnet_register_format_buffer_opaque_helper + (vnet_buffer_opquae_formatter_t fn); + +void vnet_register_format_buffer_opaque2_helper + (vnet_buffer_opquae_formatter_t fn); + #endif /* included_vnet_interface_h */ /*