Catalli's threaded switch
[sliver-openvswitch.git] / lib / dpif-provider.h
index 33663ff..5a36af3 100644 (file)
@@ -18,7 +18,9 @@
 #define DPIF_PROVIDER_H 1
 
 /* Provider interface to dpifs, 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"
@@ -75,6 +77,16 @@ struct dpif_class {
      * to be called. */
     void (*wait)(void);
 
+#ifdef THREADED
+    /* Starts the datapath management. This function is thought for a scenario
+     * in which the datapath and the ofproto modules are managed in different
+     * threads/processes */
+    void (*start)(void);
+
+    /* Function called in the arrival of a fatal signal (e.g. SIGTERM) */
+    void (*exit_hook)(void*);
+#endif
+
     /* Enumerates the names of all known created datapaths, if possible, into
      * 'all_dps'.  The caller has already initialized 'all_dps' and other dpif
      * classes might already have added names to it.
@@ -300,6 +312,12 @@ struct dpif_class {
      * packet. */
     int (*set_sflow_probability)(struct dpif *dpif, uint32_t probability);
 
+    /* Translates OpenFlow queue ID 'queue_id' (in host byte order) into a
+     * priority value for use in the ODPAT_SET_PRIORITY action in
+     * '*priority'. */
+    int (*queue_to_priority)(const struct dpif *dpif, uint32_t queue_id,
+                             uint32_t *priority);
+
     /* Attempts to receive a message from 'dpif'.  If successful, stores the
      * message into '*packetp'.  The message, if one is received, must begin
      * with 'struct odp_msg' as a header, and must have at least
@@ -316,14 +334,6 @@ struct dpif_class {
     void (*recv_wait)(struct dpif *dpif);
 };
 
-/* Minimum number of bytes of headroom for a packet returned by the 'recv'
- * member function (see above).  This headroom allows "struct odp_msg" to be
- * replaced by "struct ofp_packet_in" without copying the buffer. */
-#define DPIF_RECV_MSG_PADDING (sizeof(struct ofp_packet_in) \
-                               - sizeof(struct odp_msg))
-BUILD_ASSERT_DECL(sizeof(struct ofp_packet_in) > sizeof(struct odp_msg));
-BUILD_ASSERT_DECL(DPIF_RECV_MSG_PADDING % 4 == 0);
-
 extern const struct dpif_class dpif_linux_class;
 extern const struct dpif_class dpif_netdev_class;