X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface.h;h=b582dba7c8dc348679eddf729226503b2c535cb8;hb=refs%2Fchanges%2F30%2F12930%2F6;hp=d462e1e8448820aee6b5f5c17d28ea122bf1e262;hpb=70083ee74c3141bbefb185525315f1b34497dcaa;p=vpp.git diff --git a/src/vnet/interface.h b/src/vnet/interface.h index d462e1e8448..b582dba7c8d 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -81,6 +81,20 @@ typedef clib_error_t *(vnet_interface_set_l2_mode_function_t) (struct vnet_main_t * vnm, struct vnet_hw_interface_t * hi, i32 l2_if_adjust); +typedef enum +{ + VNET_FLOW_DEV_OP_ADD_FLOW, + VNET_FLOW_DEV_OP_DEL_FLOW, + VNET_FLOW_DEV_OP_GET_COUNTER, + VNET_FLOW_DEV_OP_RESET_COUNTER, +} vnet_flow_dev_op_t; + +/* Interface flow opeations callback. */ +typedef int (vnet_flow_dev_ops_function_t) (struct vnet_main_t * vnm, + vnet_flow_dev_op_t op, + u32 hw_if_index, u32 index, + uword * private_data); + typedef enum vnet_interface_function_priority_t_ { VNET_ITF_FUNC_PRIORITY_LOW, @@ -140,8 +154,10 @@ static void __vnet_interface_function_deinit_##tag##_##f (void) \ _VNET_INTERFACE_FUNCTION_DECL(f,hw_interface_add_del) #define VNET_HW_INTERFACE_LINK_UP_DOWN_FUNCTION(f) \ _VNET_INTERFACE_FUNCTION_DECL(f,hw_interface_link_up_down) -#define VNET_HW_INTERFACE_LINK_UP_DOWN_FUNCTION_PRIO(f,p) \ +#define VNET_HW_INTERFACE_LINK_UP_DOWN_FUNCTION_PRIO(f,p) \ _VNET_INTERFACE_FUNCTION_DECL_PRIO(f,hw_interface_link_up_down,p) +#define VNET_SW_INTERFACE_MTU_CHANGE_FUNCTION(f) \ + _VNET_INTERFACE_FUNCTION_DECL(f,sw_interface_mtu_change) #define VNET_SW_INTERFACE_ADD_DEL_FUNCTION(f) \ _VNET_INTERFACE_FUNCTION_DECL(f,sw_interface_add_del) #define VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION(f) \ @@ -189,6 +205,9 @@ typedef struct _vnet_device_class int (*name_renumber) (struct vnet_hw_interface_t * hi, u32 new_dev_instance); + /* Interface flow offload operations */ + vnet_flow_dev_ops_function_t *flow_ops_function; + /* Format device instance as name. */ format_function_t *format_device_name; @@ -201,6 +220,9 @@ typedef struct _vnet_device_class /* Trace buffer format for TX function. */ format_function_t *format_tx_trace; + /* Format flow offload entry */ + format_function_t *format_flow; + /* Function to clear hardware counters for device. */ void (*clear_counters) (u32 dev_class_instance); @@ -296,6 +318,11 @@ typedef enum vnet_link_t_ [VNET_LINK_NSH] = "nsh", \ } +#define FOR_EACH_VNET_LINK(_link) \ + for (_link = VNET_LINK_IP4; \ + _link <= VNET_LINK_NSH; \ + _link++) + /** * @brief Number of link types. Not part of the enum so it does not have to be included in * switch statements @@ -608,6 +635,18 @@ typedef enum VNET_FLOOD_CLASS_NO_FLOOD, } vnet_flood_class_t; +/* Per protocol MTU */ +typedef enum +{ + VNET_MTU_L3, /* Default payload MTU (without L2 headers) */ + VNET_MTU_IP4, /* Per-protocol MTUs overriding default */ + VNET_MTU_IP6, + VNET_MTU_MPLS, + VNET_N_MTU +} vnet_mtu_t; + +extern vnet_mtu_t vnet_link_to_mtu (vnet_link_t link); + /* Software-interface. This corresponds to a Ethernet VLAN, ATM vc, a tunnel, etc. Configuration (e.g. IP address) gets attached to software interface. */ @@ -648,20 +687,17 @@ typedef struct u32 link_speed; - /* Receive and transmit layer 3 packet size limits (MRU/MTU). */ - u32 max_l3_packet_bytes[VLIB_N_RX_TX]; + /* VNET_SW_INTERFACE_TYPE_HARDWARE. */ + u32 hw_if_index; - union - { - /* VNET_SW_INTERFACE_TYPE_HARDWARE. */ - u32 hw_if_index; + /* MTU for network layer (not including L2 headers) */ + u32 mtu[VNET_N_MTU]; - /* VNET_SW_INTERFACE_TYPE_SUB. */ - vnet_sub_interface_t sub; + /* VNET_SW_INTERFACE_TYPE_SUB. */ + vnet_sub_interface_t sub; - /* VNET_SW_INTERFACE_TYPE_P2P. */ - vnet_p2p_sub_interface_t p2p; - }; + /* VNET_SW_INTERFACE_TYPE_P2P. */ + vnet_p2p_sub_interface_t p2p; vnet_flood_class_t flood_class; } vnet_sw_interface_t;