[ovs-dev] [ofproto tests 08/29] dpif: Make dpif_class 'open' function take class instead of type name.
Justin Pettit
jpettit at nicira.com
Thu Nov 18 01:46:17 UTC 2010
I didn't notice that in the previous commit that you changed the arguments to the dpif "open" method in a way that required this commit. To prevent that commit from breaking the build, you'd need to combine these two commits or refactor them.
Otherwise, this change looks good.
--Justin
On Nov 16, 2010, at 11:20 AM, Ben Pfaff wrote:
> 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
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
More information about the dev
mailing list