X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface.h;h=f1d03871ed841b46b48bc4efb6ccb013976dc5f9;hb=e524d45eff40c773049e03ea5063216b469bbfcc;hp=01d61afb5e865e7343c007463620779e4c854abf;hpb=5100aa9cb9e7acff35fa3bfde8aa95b5ace60344;p=vpp.git diff --git a/src/vnet/interface.h b/src/vnet/interface.h index 01d61afb5e8..f1d03871ed8 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -40,7 +40,8 @@ #ifndef included_vnet_interface_h #define included_vnet_interface_h -#include +#include +#include #include struct vnet_main_t; @@ -130,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; \ @@ -139,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; \ @@ -301,31 +302,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 @@ -496,6 +472,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 @@ -715,8 +694,6 @@ typedef struct /* this swif is unnumbered, use addresses on unnumbered_sw_if_index... */ u32 unnumbered_sw_if_index; - u32 link_speed; - /* VNET_SW_INTERFACE_TYPE_HARDWARE. */ u32 hw_if_index; @@ -775,7 +752,8 @@ typedef enum _(RX_NO_BUF, rx-no-buf, if) \ _(RX_MISS, rx-miss, if) \ _(RX_ERROR, rx-error, if) \ - _(TX_ERROR, tx-error, if) + _(TX_ERROR, tx-error, if) \ + _(MPLS, mpls, if) #define foreach_combined_interface_counter_name \ _(RX, rx, if) \ @@ -811,6 +789,12 @@ typedef struct u32 tx_node_index; } vnet_hw_interface_nodes_t; +typedef struct +{ + u32 *split_buffers; + u32 padding[14]; +} vnet_interface_per_thread_data_t; + typedef struct { /* Hardware interfaces. */ @@ -849,6 +833,12 @@ typedef struct u32 pcap_pkts_to_capture; uword *pcap_drop_filter_hash; + /* 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 +862,10 @@ 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); + #endif /* included_vnet_interface_h */ /*