Setting tag sliver-openvswitch-2.2.90-1
[sliver-openvswitch.git] / lib / odp-execute.h
index 5d9fa90..91f0c51 100644 (file)
 #ifndef EXECUTE_ACTIONS_H
 #define EXECUTE_ACTIONS_H 1
 
+#include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
 #include "openvswitch/types.h"
 
-struct flow;
 struct nlattr;
 struct ofpbuf;
+struct pkt_metadata;
 
-void
-odp_execute_actions(void *dp, struct ofpbuf *packet, struct flow *key,
+typedef void (*odp_execute_cb)(void *dp, struct ofpbuf *packet,
+                               struct pkt_metadata *,
+                               const struct nlattr *action, bool may_steal);
+
+/* Actions that need to be executed in the context of a datapath are handed
+ * to 'dp_execute_action', if non-NULL.  Currently this is called only for
+ * actions OVS_ACTION_ATTR_OUTPUT and OVS_ACTION_ATTR_USERSPACE so
+ * 'dp_execute_action' needs to handle only these. */
+void odp_execute_actions(void *dp, struct ofpbuf *packet, bool steal,
+                    struct pkt_metadata *,
                     const struct nlattr *actions, size_t actions_len,
-                    void (*output)(void *dp, struct ofpbuf *packet,
-                                   const struct flow *key,
-                                   odp_port_t out_port),
-                    void (*userspace)(void *dp, struct ofpbuf *packet,
-                                      const struct flow *key,
-                                      const struct nlattr *action));
+                    odp_execute_cb dp_execute_action);
 #endif