datapath: Eliminate 'flags' member from odp_flow.
[sliver-openvswitch.git] / lib / dpif.h
index 4efabd0..e401168 100644 (file)
@@ -30,6 +30,7 @@ extern "C" {
 #endif
 
 struct dpif;
+struct ds;
 struct netdev;
 struct nlattr;
 struct ofpbuf;
@@ -107,11 +108,32 @@ int dpif_port_dump_done(struct dpif_port_dump *);
 int dpif_port_poll(const struct dpif *, char **devnamep);
 void dpif_port_poll_wait(const struct dpif *);
 
+struct dpif_flow_stats {
+    uint64_t n_packets;
+    uint64_t n_bytes;
+    long long int used;
+    uint8_t tcp_flags;
+};
+
+void dpif_flow_stats_format(const struct dpif_flow_stats *, struct ds *);
+
+enum dpif_flow_put_flags {
+    DPIF_FP_CREATE = 1 << 0,    /* Allow creating a new flow. */
+    DPIF_FP_MODIFY = 1 << 1,    /* Allow modifying an existing flow. */
+    DPIF_FP_ZERO_STATS = 1 << 2 /* Zero the stats of an existing flow. */
+};
+
 int dpif_flow_flush(struct dpif *);
-int dpif_flow_put(struct dpif *, struct odp_flow_put *);
-int dpif_flow_del(struct dpif *, struct odp_flow *);
-int dpif_flow_get(const struct dpif *, struct odp_flow *);
-int dpif_flow_get_multiple(const struct dpif *, struct odp_flow[], size_t n);
+int dpif_flow_put(struct dpif *, enum dpif_flow_put_flags,
+                  const struct nlattr *key, size_t key_len,
+                  const struct nlattr *actions, size_t actions_len,
+                  struct dpif_flow_stats *);
+int dpif_flow_del(struct dpif *,
+                  const struct nlattr *key, size_t key_len,
+                  struct dpif_flow_stats *);
+int dpif_flow_get(const struct dpif *,
+                  const struct nlattr *key, size_t key_len,
+                  struct ofpbuf **actionsp, struct dpif_flow_stats *);
 
 struct dpif_flow_dump {
     const struct dpif *dpif;
@@ -119,7 +141,10 @@ struct dpif_flow_dump {
     void *state;
 };
 void dpif_flow_dump_start(struct dpif_flow_dump *, const struct dpif *);
-bool dpif_flow_dump_next(struct dpif_flow_dump *, struct odp_flow *);
+bool dpif_flow_dump_next(struct dpif_flow_dump *,
+                         const struct nlattr **key, size_t *key_len,
+                         const struct nlattr **actions, size_t *actions_len,
+                         const struct dpif_flow_stats **);
 int dpif_flow_dump_done(struct dpif_flow_dump *);
 
 int dpif_execute(struct dpif *, const struct nlattr *actions,