- * If no flow matching 'flow->key' exists in 'dpif', returns ENOENT. On
- * other failure, returns a positive errno value. */
- int (*flow_get)(const struct dpif *dpif, struct odp_flow *flow);
-
- /* Adds or modifies a flow in 'dpif' as specified in 'put':
+ * If 'actionsp' is nonnull, then on success '*actionsp' must be set to an
+ * ofpbuf owned by the caller that contains the Netlink attributes for the
+ * flow's actions. The caller must free the ofpbuf (with ofpbuf_delete())
+ * when it is no longer needed.
+ *
+ * If 'stats' is nonnull, then on success it must be updated with the
+ * flow's statistics. */
+ int (*flow_get)(const struct dpif *dpif,
+ const struct nlattr *key, size_t key_len,
+ struct ofpbuf **actionsp, struct dpif_flow_stats *stats);
+
+ /* Adds or modifies a flow in 'dpif'. The flow is specified by the Netlink
+ * attributes with types OVS_KEY_ATTR_* in the 'put->key_len' bytes
+ * starting at 'put->key'. The associated actions are specified by the
+ * Netlink attributes with types OVS_ACTION_ATTR_* in the
+ * 'put->actions_len' bytes starting at 'put->actions'.
+ *
+ * - If the flow's key does not exist in 'dpif', then the flow will be
+ * added if 'put->flags' includes DPIF_FP_CREATE. Otherwise the
+ * operation will fail with ENOENT.