+ /* Kernel-to-user notifications. */
+ ODP_PACKET_CMD_MISS, /* Flow table miss. */
+ ODP_PACKET_CMD_ACTION, /* ODPAT_CONTROLLER action. */
+ ODP_PACKET_CMD_SAMPLE, /* Sampled packet. */
+
+ /* User commands. */
+ ODP_PACKET_CMD_EXECUTE /* Apply actions to a packet. */
+};
+
+/**
+ * enum odp_packet_attr - attributes for %ODP_PACKET_* commands.
+ * @ODP_PACKET_ATTR_PACKET: Present for all notifications. Contains the entire
+ * packet as received, from the start of the Ethernet header onward. For
+ * %ODP_PACKET_CMD_ACTION, %ODP_PACKET_ATTR_PACKET reflects changes made by
+ * actions preceding %ODPAT_CONTROLLER, but %ODP_PACKET_ATTR_KEY is the flow
+ * key extracted from the packet as originally received.
+ * @ODP_PACKET_ATTR_KEY: Present for all notifications. Contains the flow key
+ * extracted from the packet as nested %ODP_KEY_ATTR_* attributes. This allows
+ * userspace to adapt its flow setup strategy by comparing its notion of the
+ * flow key against the kernel's.
+ * @ODP_PACKET_ATTR_USERDATA: Present for an %ODP_PACKET_CMD_ACTION
+ * notification if the %ODPAT_CONTROLLER action's argument was nonzero.
+ * @ODP_PACKET_ATTR_SAMPLE_POOL: Present for %ODP_PACKET_CMD_SAMPLE. Contains
+ * the number of packets processed so far that were candidates for sampling.
+ * @ODP_PACKET_ATTR_ACTIONS: Present for %ODP_PACKET_CMD_SAMPLE. Contains a
+ * copy of the actions applied to the packet, as nested %ODPAT_* attributes.
+ *
+ * These attributes follow the &struct odp_header within the Generic Netlink
+ * payload for %ODP_PACKET_* commands.
+ *
+ * The %ODP_PACKET_ATTR_TYPE, %ODP_PACKET_ATTR_PACKET and %ODP_PACKET_ATTR_KEY
+ * attributes are present for all notifications. For %ODP_PACKET_CMD_ACTION,
+ * the %ODP_PACKET_ATTR_USERDATA attribute is included if it would be nonzero.
+ * For %ODP_PACKET_CMD_SAMPLE, the %ODP_PACKET_ATTR_SAMPLE_POOL and
+ * %ODP_PACKET_ATTR_ACTIONS attributes are included.
+ */
+enum odp_packet_attr {