dpif: Make dpif_class 'open' function take class instead of type name.
authorBen Pfaff <blp@nicira.com>
Thu, 18 Nov 2010 18:06:41 +0000 (10:06 -0800)
committerBen Pfaff <blp@nicira.com>
Thu, 18 Nov 2010 18:08:05 +0000 (10:08 -0800)
This makes it easier for dpif_provider implementations to share code but
distinguish the class actually in use, because comparing a pointer is
easier than comparing a string.

lib/dpif-linux.c
lib/dpif-netdev.c
lib/dpif-provider.h
lib/dpif.c

index b288cac368debf7d78699f1808a8bef50f5fb993..cb2183761e7b0141155bf7698d10b5bcc73b6560 100644 (file)
@@ -112,8 +112,8 @@ dpif_linux_enumerate(struct svec *all_dps)
 }
 
 static int
-dpif_linux_open(const char *name, const char *type OVS_UNUSED, bool create,
-                struct dpif **dpifp)
+dpif_linux_open(const struct dpif_class *class OVS_UNUSED, const char *name,
+                bool create, struct dpif **dpifp)
 {
     int minor;
 
index ff71a4a1d45aa8adff8c881c29b91f829749a968..c7179ec19deb90fc748caaa5a80d5117450bd87f 100644 (file)
@@ -238,8 +238,8 @@ create_dp_netdev(const char *name, int dp_idx, struct dpif **dpifp)
 }
 
 static int
-dpif_netdev_open(const char *name, const char *type OVS_UNUSED, bool create,
-                 struct dpif **dpifp)
+dpif_netdev_open(const struct dpif_class *class OVS_UNUSED, const char *name,
+                 bool create, struct dpif **dpifp)
 {
     if (create) {
         if (find_dp_netdev(name)) {
index 5d651c6e0036136136698843f0d2cfd179960bb3..e1f10c4703c5a0dc3a6ee1956be3c5b55ea797ff 100644 (file)
@@ -90,13 +90,14 @@ struct dpif_class {
 
     /* Attempts to open an existing dpif called 'name', if 'create' is false,
      * or to open an existing dpif or create a new one, if 'create' is true.
-     * 'type' corresponds to the 'type' field used in the dpif_class
-     * structure.
      *
-     * If successful, stores a pointer to the new dpif in '*dpifp'.  On failure
-     * there are no requirements on what is stored in '*dpifp'. */
-    int (*open)(const char *name, const char *type, bool create,
-                struct dpif **dpifp);
+     * 'dpif_class' is the class of dpif to open.
+     *
+     * If successful, stores a pointer to the new dpif in '*dpifp', which must
+     * have class 'dpif_class'.  On failure there are no requirements on what
+     * is stored in '*dpifp'. */
+    int (*open)(const struct dpif_class *dpif_class,
+                const char *name, bool create, struct dpif **dpifp);
 
     /* Closes 'dpif' and frees associated memory. */
     void (*close)(struct dpif *dpif);
index 30384196384444ac11ab6d853aec152bde248132..ea806dc1833f8d28d8149ef9b70b7e97ce6537f6 100644 (file)
@@ -258,8 +258,10 @@ do_open(const char *name, const char *type, bool create, struct dpif **dpifp)
         goto exit;
     }
 
-    error = registered_class->dpif_class->open(name, type, create, &dpif);
+    error = registered_class->dpif_class->open(registered_class->dpif_class,
+                                               name, create, &dpif);
     if (!error) {
+        assert(dpif->dpif_class == registered_class->dpif_class);
         registered_class->refcount++;
     }