X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_funcs.h;h=57e0d33b406cc5c3f8bb171ed6cd13ca61609acb;hb=49378f206b8e780a898e632f7dd8db912b9b118e;hp=565dcd5be99c03e3e2a124210adbf852fc83731c;hpb=25ab6c541062f436989b89962cdab10f21f1b4f0;p=vpp.git diff --git a/src/vnet/interface_funcs.h b/src/vnet/interface_funcs.h index 565dcd5be99..57e0d33b406 100644 --- a/src/vnet/interface_funcs.h +++ b/src/vnet/interface_funcs.h @@ -231,6 +231,10 @@ u32 vnet_register_interface (vnet_main_t * vnm, void vnet_set_interface_output_node (vnet_main_t * vnm, u32 hw_if_index, u32 node_index); +void vnet_set_interface_l3_output_node (vlib_main_t *vm, u32 sw_if_index, + u8 *output_node); +void vnet_reset_interface_l3_output_node (vlib_main_t *vm, u32 sw_if_index); + /* Creates a software interface given template. */ clib_error_t *vnet_create_sw_interface (vnet_main_t * vnm, vnet_sw_interface_t * template, @@ -350,6 +354,9 @@ vnet_sw_interface_is_sub (vnet_main_t *vnm, u32 sw_if_index) return (sw->sw_if_index != sw->sup_sw_if_index); } +clib_error_t *vnet_sw_interface_supports_addressing (vnet_main_t *vnm, + u32 sw_if_index); + always_inline vlib_frame_t * vnet_get_frame_to_sw_interface (vnet_main_t * vnm, u32 sw_if_index) { @@ -420,9 +427,12 @@ clib_error_t *set_hw_interface_change_rx_mode (vnet_main_t * vnm, /* Set rx-placement on the interface */ clib_error_t *set_hw_interface_rx_placement (u32 hw_if_index, u32 queue_id, u32 thread_index, u8 is_main); +/* Set tx-queue placement on the interface */ +int set_hw_interface_tx_queue (u32 hw_if_index, u32 queue_id, uword *bitmap); /* Set the MTU on the HW interface */ -void vnet_hw_interface_set_mtu (vnet_main_t * vnm, u32 hw_if_index, u32 mtu); +clib_error_t *vnet_hw_interface_set_mtu (vnet_main_t *vnm, u32 hw_if_index, + u32 mtu); /* Set the MTU on the SW interface */ void vnet_sw_interface_set_mtu (vnet_main_t * vnm, u32 sw_if_index, u32 mtu); @@ -430,8 +440,8 @@ 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); @@ -443,6 +453,8 @@ 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_if_rx_mode; @@ -500,8 +512,7 @@ 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_NO_TX_QUEUE, } vnet_interface_output_error_t; /* Format for interface output traces. */ @@ -547,6 +558,31 @@ pcap_add_buffer (pcap_main_t *pm, struct vlib_main_t *vm, u32 buffer_index, clib_spinlock_unlock_if_init (&pm->lock); } } + +typedef struct +{ + vnet_hw_if_caps_t val; + vnet_hw_if_caps_t mask; +} vnet_hw_if_caps_change_t; + +void vnet_hw_if_change_caps (vnet_main_t *vnm, u32 hw_if_index, + vnet_hw_if_caps_change_t *caps); + +static_always_inline void +vnet_hw_if_set_caps (vnet_main_t *vnm, u32 hw_if_index, vnet_hw_if_caps_t caps) +{ + vnet_hw_if_caps_change_t cc = { .val = caps, .mask = caps }; + vnet_hw_if_change_caps (vnm, hw_if_index, &cc); +} + +static_always_inline void +vnet_hw_if_unset_caps (vnet_main_t *vnm, u32 hw_if_index, + vnet_hw_if_caps_t caps) +{ + vnet_hw_if_caps_change_t cc = { .val = 0, .mask = caps }; + vnet_hw_if_change_caps (vnm, hw_if_index, &cc); +} + #endif /* included_vnet_interface_funcs_h */ /*