-int dpif_execute(struct dpif *, uint16_t in_port,
- const union odp_action[], size_t n_actions,
- const struct ofpbuf *);
+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);