X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface.h;h=f82cf9d2485395a0cdbef6de1cbef892c3d9a004;hb=17ff3c1;hp=c8cda6b78142c7cb18f145cb3ebab8e2f12fb86b;hpb=87dad11c8717735479e57cf6c065c7a7963c3aa3;p=vpp.git diff --git a/src/vnet/interface.h b/src/vnet/interface.h index c8cda6b7814..f82cf9d2485 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -76,6 +76,25 @@ typedef clib_error_t *(vnet_interface_set_rx_mode_function_t) (struct vnet_main_t * vnm, u32 if_index, u32 queue_id, vnet_hw_interface_rx_mode mode); +/* Interface set l2 mode callback. */ +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, @@ -135,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) \ @@ -165,6 +186,9 @@ typedef struct _vnet_device_class /* Function to call interface rx mode is changed */ vnet_interface_set_rx_mode_function_t *rx_mode_change_function; + /* Function to call interface l2 mode is changed */ + vnet_interface_set_l2_mode_function_t *set_l2_mode_function; + /* Redistribute flag changes/existence of this interface class. */ u32 redistribute; @@ -181,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; @@ -193,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); @@ -288,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 @@ -504,14 +539,6 @@ typedef struct vnet_hw_interface_t /* Largest packet size for this interface. */ u32 max_packet_bytes; - /* Number of extra bytes that go on the wire. - Packet length on wire - = max (length + per_packet_overhead_bytes, min_packet_bytes). */ - u32 per_packet_overhead_bytes; - - /* Receive and transmit layer 3 packet size limits (MRU/MTU). */ - u32 max_l3_packet_bytes[VLIB_N_RX_TX]; - /* Hash table mapping sub interface id to sw_if_index. */ uword *sub_interface_sw_if_index_by_id; @@ -551,6 +578,7 @@ typedef enum /* A sub-interface. */ VNET_SW_INTERFACE_TYPE_SUB, VNET_SW_INTERFACE_TYPE_P2P, + VNET_SW_INTERFACE_TYPE_PIPE, } vnet_sw_interface_type_t; typedef struct @@ -608,6 +636,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,17 +688,17 @@ typedef struct u32 link_speed; - union - { - /* VNET_SW_INTERFACE_TYPE_HARDWARE. */ - u32 hw_if_index; + /* VNET_SW_INTERFACE_TYPE_HARDWARE. */ + u32 hw_if_index; - /* VNET_SW_INTERFACE_TYPE_SUB. */ - vnet_sub_interface_t sub; + /* MTU for network layer (not including L2 headers) */ + u32 mtu[VNET_N_MTU]; - /* VNET_SW_INTERFACE_TYPE_P2P. */ - vnet_p2p_sub_interface_t p2p; - }; + /* VNET_SW_INTERFACE_TYPE_SUB. */ + vnet_sub_interface_t sub; + + /* VNET_SW_INTERFACE_TYPE_P2P. */ + vnet_p2p_sub_interface_t p2p; vnet_flood_class_t flood_class; } vnet_sw_interface_t; @@ -698,6 +738,26 @@ typedef enum _x <= VNET_INTERFACE_COUNTER_TX_BROADCAST; \ _x++) +#define foreach_simple_interface_counter_name \ + _(DROP, drops, if) \ + _(PUNT, punt, if) \ + _(IP4, ip4, if) \ + _(IP6, ip6, if) \ + _(RX_NO_BUF, rx-no-buf, if) \ + _(RX_MISS, rx-miss, if) \ + _(RX_ERROR, rx-error, if) \ + _(TX_ERROR, tx-error, if) + +#define foreach_combined_interface_counter_name \ + _(RX, rx, if) \ + _(RX_UNICAST, rx-unicast, if) \ + _(RX_MULTICAST, rx-multicast, if) \ + _(RX_BROADCAST, rx-broadcast, if) \ + _(TX, tx, if) \ + _(TX_UNICAST, tx-unicast-miss, if) \ + _(TX_MULTICAST, tx-multicast, if) \ + _(TX_BROADCAST, tx-broadcast, if) + typedef enum { COLLECT_SIMPLE_STATS = 0,