* limitations under the License.
*/
-#ifndef DPIF_PROVIDER_H
-#define DPIF_PROVIDER_H 1
+#ifndef XFIF_PROVIDER_H
+#define XFIF_PROVIDER_H 1
/* Provider interface to xfifs, which provide an interface to an Open vSwitch
- * datapath. */
+ * datapath. A datapath is a collection of physical or virtual ports that are
+ * exposed over OpenFlow as a single switch. Datapaths and the collections of
+ * ports that they contain may be fixed or dynamic. */
#include <assert.h>
+#include "openflow/openflow.h"
#include "xfif.h"
+#include "util.h"
#ifdef __cplusplus
extern "C" {
* These functions return 0 if successful or a positive errno value on failure,
* except where otherwise noted.
*
- * These functions are expected to execute synchronously, that is, to block as
- * necessary to obtain a result. Thus, they may not return EAGAIN or
- * EWOULDBLOCK or EINPROGRESS. We may relax this requirement in the future if
- * and when we encounter performance problems. */
+ * Most of these functions are expected to execute synchronously, that is, to
+ * block as necessary to obtain a result. Thus, these functions may return
+ * EAGAIN (or EWOULDBLOCK or EINPROGRESS) only where the function descriptions
+ * explicitly say those errors are a possibility. We may relax this
+ * requirement in the future if and when we encounter performance problems. */
struct xfif_class {
/* Type of xfif in this class, e.g. "system", "netdev", etc.
*
* packet. */
int (*set_sflow_probability)(struct xfif *xfif, uint32_t probability);
+ /* Translates OpenFlow queue ID 'queue_id' (in host byte order) into a
+ * priority value for use in the XFLOWAT_SET_PRIORITY action in
+ * '*priority'. */
+ int (*queue_to_priority)(const struct xfif *xfif, uint32_t queue_id,
+ uint32_t *priority);
+
/* Attempts to receive a message from 'xfif'. If successful, stores the
* message into '*packetp'. The message, if one is received, must begin
- * with 'struct xflow_msg' as a header. Only messages of the types
- * selected with the recv_set_mask member function should be received.
+ * with 'struct xflow_msg' as a header, and must have at least
+ * XFIF_RECV_MSG_PADDING bytes of headroom (allocated using
+ * e.g. ofpbuf_reserve()). Only messages of the types selected with the
+ * set_listen_mask member function should be received.
*
* This function must not block. If no message is ready to be received
* when it is called, it should return EAGAIN without blocking. */