#define ODP_PORT_QUERY _IOWR('O', 9, struct odp_port)
#define ODP_PORT_LIST _IOWR('O', 10, struct odp_portvec)
-#define ODP_PORT_GROUP_SET _IOR('O', 11, struct odp_port_group)
-#define ODP_PORT_GROUP_GET _IOWR('O', 12, struct odp_port_group)
-
#define ODP_FLOW_GET _IOWR('O', 13, struct odp_flow)
#define ODP_FLOW_PUT _IOWR('O', 14, struct odp_flow)
#define ODP_FLOW_LIST _IOWR('O', 15, struct odp_flowvec)
#define ODP_VPORT_ETHER_SET _IOW('O', 26, struct odp_vport_ether)
#define ODP_VPORT_MTU_GET _IOWR('O', 27, struct odp_vport_mtu)
#define ODP_VPORT_MTU_SET _IOW('O', 28, struct odp_vport_mtu)
+#define ODP_VPORT_STATS_SET _IOWR('O', 29, struct odp_vport_stats_req)
struct odp_stats {
/* Flows. */
/* Ports. */
uint32_t n_ports; /* Current number of ports. */
uint32_t max_ports; /* Maximum supported number of ports. */
- uint16_t max_groups; /* Maximum number of port groups. */
- uint16_t reserved;
/* Lookups. */
uint64_t n_frags; /* Number of dropped IP fragments. */
uint32_t n_ports;
};
-struct odp_port_group {
- uint16_t *ports;
- uint16_t n_ports; /* Number of ports. */
- uint16_t group; /* Group number. */
-};
-
struct odp_flow_stats {
uint64_t n_packets; /* Number of matched packets. */
uint64_t n_bytes; /* Number of matched bytes. */
uint64_t used_sec; /* Time last used, in system monotonic time. */
uint32_t used_nsec;
uint8_t tcp_flags;
- uint8_t ip_tos;
+ uint8_t reserved;
uint16_t error; /* Used by ODP_FLOW_GET. */
};
uint8_t dl_src[6]; /* Ethernet source address. */
uint8_t dl_dst[6]; /* Ethernet destination address. */
uint8_t nw_proto; /* IP protocol or lower 8 bits of
- ARP opcode. */
+ ARP opcode. */
uint8_t dl_vlan_pcp; /* Input VLAN priority. */
uint8_t nw_tos; /* IP ToS (DSCP field, 6 bits). */
uint8_t reserved[3]; /* Align to 32-bits...must be zeroed. */
/* Action types. */
#define ODPAT_OUTPUT 0 /* Output to switch port. */
-#define ODPAT_OUTPUT_GROUP 1 /* Output to all ports in group. */
#define ODPAT_CONTROLLER 2 /* Send copy to controller. */
#define ODPAT_SET_VLAN_VID 3 /* Set the 802.1q VLAN id. */
#define ODPAT_SET_VLAN_PCP 4 /* Set the 802.1q priority. */
#define ODPAT_SET_TP_SRC 11 /* TCP/UDP source port. */
#define ODPAT_SET_TP_DST 12 /* TCP/UDP destination port. */
#define ODPAT_SET_TUNNEL 13 /* Set the encapsulating tunnel ID. */
-#define ODPAT_N_ACTIONS 14
+#define ODPAT_SET_PRIORITY 14 /* Set skb->priority. */
+#define ODPAT_POP_PRIORITY 15 /* Restore original skb->priority. */
+#define ODPAT_DROP_SPOOFED_ARP 16 /* Drop ARPs with spoofed source MAC. */
+#define ODPAT_N_ACTIONS 17
struct odp_action_output {
uint16_t type; /* ODPAT_OUTPUT. */
uint16_t reserved2;
};
-struct odp_action_output_group {
- uint16_t type; /* ODPAT_OUTPUT_GROUP. */
- uint16_t group; /* Group number. */
- uint16_t reserved1;
- uint16_t reserved2;
-};
-
struct odp_action_controller {
uint16_t type; /* ODPAT_OUTPUT_CONTROLLER. */
uint16_t reserved;
uint16_t reserved2;
};
+/* Action structure for ODPAT_SET_PRIORITY. */
+struct odp_action_priority {
+ uint16_t type; /* ODPAT_SET_PRIORITY. */
+ uint16_t reserved;
+ uint32_t priority; /* skb->priority value. */
+};
+
union odp_action {
uint16_t type;
struct odp_action_output output;
- struct odp_action_output_group output_group;
struct odp_action_controller controller;
struct odp_action_tunnel tunnel;
struct odp_action_vlan_vid vlan_vid;
struct odp_action_nw_addr nw_addr;
struct odp_action_nw_tos nw_tos;
struct odp_action_tp_port tp_port;
+ struct odp_action_priority priority;
};
struct odp_execute {
- uint16_t in_port;
- uint16_t reserved1;
- uint32_t reserved2;
-
union odp_action *actions;
uint32_t n_actions;