(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,
_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) \
/* 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;
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;
/* 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);
[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
/* 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;
typedef enum
{
+ /* THe BVI interface */
+ VNET_FLOOD_CLASS_BVI,
/* Always flood */
VNET_FLOOD_CLASS_NORMAL,
VNET_FLOOD_CLASS_TUNNEL_MASTER,
/* Does not flood when tunnel master is in the same L2 BD */
- VNET_FLOOD_CLASS_TUNNEL_NORMAL
+ VNET_FLOOD_CLASS_TUNNEL_NORMAL,
+ /* Never flood to this type */
+ 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. */
u32 link_speed;
- union
- {
- /* VNET_SW_INTERFACE_TYPE_HARDWARE. */
- u32 hw_if_index;
+ /* 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;