- /* Stores up to 'n' flows in 'dpif' into 'flows', updating their statistics
- * and actions as described under the flow_get member function. If
- * successful, returns the number of flows actually present in 'dpif',
- * which might be greater than the number stored (if 'dpif' has more than
- * 'n' flows). On failure, returns a negative errno value. */
- int (*flow_list)(const struct dpif *dpif, struct odp_flow flows[], int n);
-
- /* Performs the 'n_actions' actions in 'actions' on the Ethernet frame
- * specified in 'packet'.
+ /* Attempts to begin dumping the flows in a dpif. On success, returns 0
+ * and initializes '*statep' with any data needed for iteration. On
+ * failure, returns a positive errno value. */
+ int (*flow_dump_start)(const struct dpif *dpif, void **statep);
+
+ /* Attempts to retrieve another flow from 'dpif' for 'state', which was
+ * initialized by a successful call to the 'flow_dump_start' function for
+ * 'dpif'. On success, updates the output parameters as described below
+ * and returns 0. Returns EOF if the end of the flow table has been
+ * reached, or a positive errno value on error. This function will not be
+ * called again once it returns nonzero within a given iteration (but the
+ * 'flow_dump_done' function will be called afterward).
+ *
+ * On success, if 'key' and 'key_len' are nonnull then '*key' and
+ * '*key_len' must be set to Netlink attributes with types OVS_KEY_ATTR_*
+ * representing the dumped flow's key. If 'actions' and 'actions_len' are
+ * nonnull then they should be set to Netlink attributes with types
+ * OVS_ACTION_ATTR_* representing the dumped flow's actions. If 'stats'
+ * is nonnull then it should be set to the dumped flow's statistics.
+ *
+ * All of the returned data is owned by 'dpif', not by the caller, and the
+ * caller must not modify or free it. 'dpif' must guarantee that it
+ * remains accessible and unchanging until at least the next call to
+ * 'flow_dump_next' or 'flow_dump_done' for 'state'. */
+ int (*flow_dump_next)(const struct dpif *dpif, void *state,
+ const struct nlattr **key, size_t *key_len,
+ const struct nlattr **actions, size_t *actions_len,
+ const struct dpif_flow_stats **stats);
+
+ /* Releases resources from 'dpif' for 'state', which was initialized by a
+ * successful call to the 'flow_dump_start' function for 'dpif'. */
+ int (*flow_dump_done)(const struct dpif *dpif, void *state);
+
+ /* Performs the 'execute->actions_len' bytes of actions in
+ * 'execute->actions' on the Ethernet frame specified in 'execute->packet'
+ * taken from the flow specified in the 'execute->key_len' bytes of
+ * 'execute->key'. ('execute->key' is mostly redundant with
+ * 'execute->packet', but it contains some metadata that cannot be
+ * recovered from 'execute->packet', such as tun_id and in_port.) */
+ int (*execute)(struct dpif *dpif, const struct dpif_execute *execute);
+
+ /* Executes each of the 'n_ops' operations in 'ops' on 'dpif', in the order
+ * in which they are specified, placing each operation's results in the
+ * "output" members documented in comments.