-#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_STRIP_VLAN 5 /* Strip the 802.1q header. */
-#define ODPAT_SET_DL_SRC 6 /* Ethernet source address. */
-#define ODPAT_SET_DL_DST 7 /* Ethernet destination address. */
-#define ODPAT_SET_NW_SRC 8 /* IP source address. */
-#define ODPAT_SET_NW_DST 9 /* IP destination address. */
-#define ODPAT_SET_NW_TOS 10 /* IP ToS/DSCP field (6 bits). */
-#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_SET_PRIORITY 14 /* Set skb->priority. */
-#define ODPAT_POP_PRIORITY 15 /* Restore original skb->priority. */
-#define ODPAT_N_ACTIONS 16
-
-struct odp_action_output {
- uint16_t type; /* ODPAT_OUTPUT. */
- uint16_t port; /* Output port. */
- uint16_t reserved1;
- 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;
- uint32_t arg; /* Copied to struct odp_msg 'arg' member. */
-};
-
-struct odp_action_tunnel {
- uint16_t type; /* ODPAT_SET_TUNNEL. */
- uint16_t reserved;
- ovs_be32 tun_id; /* Tunnel ID. */
-};
-
-/* Action structure for ODPAT_SET_VLAN_VID. */
-struct odp_action_vlan_vid {
- uint16_t type; /* ODPAT_SET_VLAN_VID. */
- ovs_be16 vlan_vid; /* VLAN id. */
- uint16_t reserved1;
- uint16_t reserved2;
-};
-
-/* Action structure for ODPAT_SET_VLAN_PCP. */
-struct odp_action_vlan_pcp {
- uint16_t type; /* ODPAT_SET_VLAN_PCP. */
- uint8_t vlan_pcp; /* VLAN priority. */
- uint8_t reserved1;
- uint16_t reserved2;
- uint16_t reserved3;
-};
-
-/* Action structure for ODPAT_SET_DL_SRC/DST. */
-struct odp_action_dl_addr {
- uint16_t type; /* ODPAT_SET_DL_SRC/DST. */
- uint8_t dl_addr[6]; /* Ethernet address. */
-};
-
-/* Action structure for ODPAT_SET_NW_SRC/DST. */
-struct odp_action_nw_addr {
- uint16_t type; /* ODPAT_SET_TW_SRC/DST. */
- uint16_t reserved;
- ovs_be32 nw_addr; /* IP address. */
-};
-
-struct odp_action_nw_tos {
- uint16_t type; /* ODPAT_SET_NW_TOS. */
- uint8_t nw_tos; /* IP ToS/DSCP field (6 bits). */
- uint8_t reserved1;
- uint16_t reserved2;
- uint16_t reserved3;
-};
-
-/* Action structure for ODPAT_SET_TP_SRC/DST. */
-struct odp_action_tp_port {
- uint16_t type; /* ODPAT_SET_TP_SRC/DST. */
- ovs_be16 tp_port; /* TCP/UDP port. */
- uint16_t reserved1;
- 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. */
+enum odp_action_type {
+ ODPAT_UNSPEC,
+ ODPAT_OUTPUT, /* Output to switch port. */
+ ODPAT_CONTROLLER, /* Send copy to controller. */
+ ODPAT_SET_DL_TCI, /* Set the 802.1q TCI value. */
+ ODPAT_STRIP_VLAN, /* Strip the 802.1q header. */
+ ODPAT_SET_DL_SRC, /* Ethernet source address. */
+ ODPAT_SET_DL_DST, /* Ethernet destination address. */
+ ODPAT_SET_NW_SRC, /* IP source address. */
+ ODPAT_SET_NW_DST, /* IP destination address. */
+ ODPAT_SET_NW_TOS, /* IP ToS/DSCP field (6 bits). */
+ ODPAT_SET_TP_SRC, /* TCP/UDP source port. */
+ ODPAT_SET_TP_DST, /* TCP/UDP destination port. */
+ ODPAT_SET_TUNNEL, /* Set the encapsulating tunnel ID. */
+ ODPAT_SET_PRIORITY, /* Set skb->priority. */
+ ODPAT_POP_PRIORITY, /* Restore original skb->priority. */
+ ODPAT_DROP_SPOOFED_ARP, /* Drop ARPs with spoofed source MAC. */
+ __ODPAT_MAX