From 4a38774146f0171a09d5cb1863595b3b546c766e Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 18 Nov 2010 10:06:41 -0800 Subject: [PATCH] dpif: Make dpif_class 'open' function take class instead of type name. 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 | 4 +++- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c index b288cac3..cb218376 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 ff71a4a1..c7179ec1 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 5d651c6e..e1f10c47 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 30384196..ea806dc1 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -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++; } -- 2.30.2