+struct dpif_flow_dump {
+ const struct dpif *dpif;
+ int error;
+ 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 *);
+int dpif_flow_dump_done(struct dpif_flow_dump *);
+
+int dpif_execute(struct dpif *, const struct nlattr *actions,
+ size_t actions_len, const struct ofpbuf *);
+
+/* Minimum number of bytes of headroom for a packet returned by dpif_recv()
+ * member function. This headroom allows "struct odp_msg" to be replaced by
+ * "struct ofp_packet_in" without copying the buffer. */
+#define DPIF_RECV_MSG_PADDING \
+ ROUND_UP(sizeof(struct ofp_packet_in) - sizeof(struct odp_msg), 8)
+BUILD_ASSERT_DECL(sizeof(struct ofp_packet_in) > sizeof(struct odp_msg));
+BUILD_ASSERT_DECL(DPIF_RECV_MSG_PADDING % 8 == 0);
+
+int dpif_recv_get_mask(const struct dpif *, int *listen_mask);
+int dpif_recv_set_mask(struct dpif *, int listen_mask);
+int dpif_get_sflow_probability(const struct dpif *, uint32_t *probability);
+int dpif_set_sflow_probability(struct dpif *, uint32_t probability);