NEWS: Point out userspace is compatible with Linux 3.3 OVS kernel module.
[sliver-openvswitch.git] / lib / odp-util.h
index b943c8c..a6f8a30 100644 (file)
@@ -59,8 +59,11 @@ odp_port_to_ofp_port(uint16_t odp_port)
         return odp_port;
     }
 }
+
 void format_odp_actions(struct ds *, const struct nlattr *odp_actions,
                         size_t actions_len);
+int odp_actions_from_string(const char *, const struct shash *port_names,
+                            struct ofpbuf *odp_actions);
 
 /* Upper bound on the length of a nlattr-formatted flow key.  The longest
  * nlattr-formatted flow key would be:
@@ -93,11 +96,27 @@ int odp_flow_key_from_string(const char *s, const struct shash *port_names,
                              struct ofpbuf *);
 
 void odp_flow_key_from_flow(struct ofpbuf *, const struct flow *);
-int odp_flow_key_to_flow(const struct nlattr *, size_t, struct flow *);
+
+uint32_t odp_flow_key_hash(const struct nlattr *, size_t);
+
+/* How well a kernel-provided flow key (a sequence of OVS_KEY_ATTR_*
+ * attributes) matches OVS userspace expectations.
+ *
+ * These values are arranged so that greater values are "more important" than
+ * lesser ones.  In particular, a single flow key can fit the descriptions for
+ * both ODP_FIT_TOO_LITTLE and ODP_FIT_TOO_MUCH.  Such a key is treated as
+ * ODP_FIT_TOO_LITTLE. */
+enum odp_key_fitness {
+    ODP_FIT_PERFECT,            /* The key had exactly the fields we expect. */
+    ODP_FIT_TOO_MUCH,           /* The key had fields we don't understand. */
+    ODP_FIT_TOO_LITTLE,         /* The key lacked fields we expected to see. */
+    ODP_FIT_ERROR,              /* The key was invalid. */
+};
+enum odp_key_fitness odp_flow_key_to_flow(const struct nlattr *, size_t,
+                                          struct flow *);
 
 enum user_action_cookie_type {
     USER_ACTION_COOKIE_UNSPEC,
-    USER_ACTION_COOKIE_CONTROLLER,   /* Packet for controller. */
     USER_ACTION_COOKIE_SFLOW,        /* Packet for sFlow sampling. */
 };
 
@@ -116,4 +135,7 @@ BUILD_ASSERT_DECL(sizeof(struct user_action_cookie) == 8);
 size_t odp_put_userspace_action(uint32_t pid,
                                 const struct user_action_cookie *,
                                 struct ofpbuf *odp_actions);
+
+void commit_odp_actions(const struct flow *, struct flow *base,
+                        struct ofpbuf *odp_actions);
 #endif /* odp-util.h */