[ovs-dev] [ofproto tests 08/29] dpif: Make dpif_class 'open' function take class instead of type name.
Ben Pfaff
blp at nicira.com
Tue Nov 16 19:20:58 UTC 2010
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 | 4 ++--
lib/dpif-netdev.c | 4 ++--
lib/dpif-provider.h | 13 +++++++------
lib/dpif.c | 1 +
4 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
index b288cac..cb21837 100644
--- a/lib/dpif-linux.c
+++ b/lib/dpif-linux.c
@@ -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;
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index ff71a4a..c7179ec 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -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)) {
diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h
index 5d651c6..e1f10c4 100644
--- a/lib/dpif-provider.h
+++ b/lib/dpif-provider.h
@@ -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);
diff --git a/lib/dpif.c b/lib/dpif.c
index 673eac4..ea806dc 100644
--- a/lib/dpif.c
+++ b/lib/dpif.c
@@ -261,6 +261,7 @@ do_open(const char *name, const char *type, bool create, struct dpif **dpifp)
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++;
}
--
1.7.1
More information about the dev
mailing list