[ovs-dev] [sset 2/8] dpif: Use sset instead of svec in dpif interface.

Ethan Jackson ethan at nicira.com
Wed Mar 30 20:56:35 UTC 2011


Looks good to me.  I don't look at it super closely as it's so straight forward.

Ethan

On Fri, Mar 25, 2011 at 3:40 PM, Ben Pfaff <blp at nicira.com> wrote:
> ---
>  lib/dpif-linux.c      |    5 ++---
>  lib/dpif-provider.h   |    2 +-
>  lib/dpif.c            |   16 ++++++++--------
>  lib/dpif.h            |    6 +++---
>  utilities/ovs-dpctl.c |   42 ++++++++++++++++++++----------------------
>  vswitchd/bridge.c     |   24 ++++++++++++------------
>  6 files changed, 46 insertions(+), 49 deletions(-)
>
> diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
> index 3c22b55..bdc7703 100644
> --- a/lib/dpif-linux.c
> +++ b/lib/dpif-linux.c
> @@ -46,7 +46,6 @@
>  #include "rtnetlink-link.h"
>  #include "shash.h"
>  #include "sset.h"
> -#include "svec.h"
>  #include "unaligned.h"
>  #include "util.h"
>  #include "vlog.h"
> @@ -160,7 +159,7 @@ dpif_linux_cast(const struct dpif *dpif)
>  }
>
>  static int
> -dpif_linux_enumerate(struct svec *all_dps)
> +dpif_linux_enumerate(struct sset *all_dps)
>  {
>     struct nl_dump dump;
>     struct ofpbuf msg;
> @@ -176,7 +175,7 @@ dpif_linux_enumerate(struct svec *all_dps)
>         struct dpif_linux_dp dp;
>
>         if (!dpif_linux_dp_from_ofpbuf(&dp, &msg)) {
> -            svec_add(all_dps, dp.name);
> +            sset_add(all_dps, dp.name);
>         }
>     }
>     return nl_dump_done(&dump);
> diff --git a/lib/dpif-provider.h b/lib/dpif-provider.h
> index 91074d5..4d36753 100644
> --- a/lib/dpif-provider.h
> +++ b/lib/dpif-provider.h
> @@ -86,7 +86,7 @@ struct dpif_class {
>      *
>      * Some kinds of datapaths might not be practically enumerable, in which
>      * case this function may be a null pointer. */
> -    int (*enumerate)(struct svec *all_dps);
> +    int (*enumerate)(struct sset *all_dps);
>
>     /* 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.
> diff --git a/lib/dpif.c b/lib/dpif.c
> index a754613..81e180f 100644
> --- a/lib/dpif.c
> +++ b/lib/dpif.c
> @@ -36,7 +36,7 @@
>  #include "packets.h"
>  #include "poll-loop.h"
>  #include "shash.h"
> -#include "svec.h"
> +#include "sset.h"
>  #include "timeval.h"
>  #include "util.h"
>  #include "valgrind.h"
> @@ -184,36 +184,36 @@ dp_unregister_provider(const char *type)
>  }
>
>  /* Clears 'types' and enumerates the types of all currently registered datapath
> - * providers into it.  The caller must first initialize the svec. */
> + * providers into it.  The caller must first initialize the sset. */
>  void
> -dp_enumerate_types(struct svec *types)
> +dp_enumerate_types(struct sset *types)
>  {
>     struct shash_node *node;
>
>     dp_initialize();
> -    svec_clear(types);
> +    sset_clear(types);
>
>     SHASH_FOR_EACH(node, &dpif_classes) {
>         const struct registered_dpif_class *registered_class = node->data;
> -        svec_add(types, registered_class->dpif_class->type);
> +        sset_add(types, registered_class->dpif_class->type);
>     }
>  }
>
>  /* Clears 'names' and enumerates the names of all known created datapaths with
> - * the given 'type'.  The caller must first initialize the svec. Returns 0 if
> + * the given 'type'.  The caller must first initialize the sset.  Returns 0 if
>  * successful, otherwise a positive errno value.
>  *
>  * Some kinds of datapaths might not be practically enumerable.  This is not
>  * considered an error. */
>  int
> -dp_enumerate_names(const char *type, struct svec *names)
> +dp_enumerate_names(const char *type, struct sset *names)
>  {
>     const struct registered_dpif_class *registered_class;
>     const struct dpif_class *dpif_class;
>     int error;
>
>     dp_initialize();
> -    svec_clear(names);
> +    sset_clear(names);
>
>     registered_class = shash_find_data(&dpif_classes, type);
>     if (!registered_class) {
> diff --git a/lib/dpif.h b/lib/dpif.h
> index 8872a2e..0e0f407 100644
> --- a/lib/dpif.h
> +++ b/lib/dpif.h
> @@ -34,7 +34,7 @@ struct ds;
>  struct netdev;
>  struct nlattr;
>  struct ofpbuf;
> -struct svec;
> +struct sset;
>  struct dpif_class;
>
>  void dp_run(void);
> @@ -42,9 +42,9 @@ void dp_wait(void);
>
>  int dp_register_provider(const struct dpif_class *);
>  int dp_unregister_provider(const char *type);
> -void dp_enumerate_types(struct svec *types);
> +void dp_enumerate_types(struct sset *types);
>
> -int dp_enumerate_names(const char *type, struct svec *names);
> +int dp_enumerate_names(const char *type, struct sset *names);
>  void dp_parse_name(const char *datapath_name, char **name, char **type);
>
>  int dpif_open(const char *name, const char *type, struct dpif **);
> diff --git a/utilities/ovs-dpctl.c b/utilities/ovs-dpctl.c
> index 658f6ba..f3e13a7 100644
> --- a/utilities/ovs-dpctl.c
> +++ b/utilities/ovs-dpctl.c
> @@ -38,7 +38,7 @@
>  #include "netdev.h"
>  #include "odp-util.h"
>  #include "shash.h"
> -#include "svec.h"
> +#include "sset.h"
>  #include "timeval.h"
>  #include "util.h"
>  #include "vlog.h"
> @@ -404,23 +404,21 @@ do_show(int argc, char *argv[])
>             }
>         }
>     } else {
> -        struct svec types;
> +        struct sset types;
>         const char *type;
> -        size_t i;
>
> -        svec_init(&types);
> +        sset_init(&types);
>         dp_enumerate_types(&types);
> -        SVEC_FOR_EACH (i, type, &types) {
> -            struct svec names;
> +        SSET_FOR_EACH (type, &types) {
> +            struct sset names;
>             const char *name;
> -            size_t j;
>
> -            svec_init(&names);
> +            sset_init(&names);
>             if (dp_enumerate_names(type, &names)) {
>                 failure = true;
>                 continue;
>             }
> -            SVEC_FOR_EACH (j, name, &names) {
> +            SSET_FOR_EACH (name, &names) {
>                 struct dpif *dpif;
>                 int error;
>
> @@ -432,9 +430,9 @@ do_show(int argc, char *argv[])
>                     failure = true;
>                 }
>             }
> -            svec_destroy(&names);
> +            sset_destroy(&names);
>         }
> -        svec_destroy(&types);
> +        sset_destroy(&types);
>     }
>     if (failure) {
>         exit(EXIT_FAILURE);
> @@ -444,34 +442,34 @@ do_show(int argc, char *argv[])
>  static void
>  do_dump_dps(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
>  {
> -    struct svec dpif_names, dpif_types;
> -    unsigned int i;
> +    struct sset dpif_names, dpif_types;
> +    const char *type;
>     int error = 0;
>
> -    svec_init(&dpif_names);
> -    svec_init(&dpif_types);
> +    sset_init(&dpif_names);
> +    sset_init(&dpif_types);
>     dp_enumerate_types(&dpif_types);
>
> -    for (i = 0; i < dpif_types.n; i++) {
> -        unsigned int j;
> +    SSET_FOR_EACH (type, &dpif_types) {
> +        const char *name;
>         int retval;
>
> -        retval = dp_enumerate_names(dpif_types.names[i], &dpif_names);
> +        retval = dp_enumerate_names(type, &dpif_names);
>         if (retval) {
>             error = retval;
>         }
>
> -        for (j = 0; j < dpif_names.n; j++) {
> +        SSET_FOR_EACH (name, &dpif_names) {
>             struct dpif *dpif;
> -            if (!dpif_open(dpif_names.names[j], dpif_types.names[i], &dpif)) {
> +            if (!dpif_open(name, type, &dpif)) {
>                 printf("%s\n", dpif_name(dpif));
>                 dpif_close(dpif);
>             }
>         }
>     }
>
> -    svec_destroy(&dpif_names);
> -    svec_destroy(&dpif_types);
> +    sset_destroy(&dpif_names);
> +    sset_destroy(&dpif_types);
>     if (error) {
>         exit(EXIT_FAILURE);
>     }
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index b071ec7..4d06e0c 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -368,7 +368,8 @@ bridge_configure_once(const struct ovsrec_open_vswitch *cfg)
>  {
>     static bool already_configured_once;
>     struct svec bridge_names;
> -    struct svec dpif_names, dpif_types;
> +    struct sset dpif_names, dpif_types;
> +    const char *type;
>     size_t i;
>
>     /* Only do this once per ovs-vswitchd run. */
> @@ -388,22 +389,21 @@ bridge_configure_once(const struct ovsrec_open_vswitch *cfg)
>
>     /* Iterate over all system dpifs and delete any of them that do not appear
>      * in 'cfg'. */
> -    svec_init(&dpif_names);
> -    svec_init(&dpif_types);
> +    sset_init(&dpif_names);
> +    sset_init(&dpif_types);
>     dp_enumerate_types(&dpif_types);
> -    for (i = 0; i < dpif_types.n; i++) {
> -        size_t j;
> +    SSET_FOR_EACH (type, &dpif_types) {
> +        const char *name;
>
> -        dp_enumerate_names(dpif_types.names[i], &dpif_names);
> +        dp_enumerate_names(type, &dpif_names);
>
>         /* Delete each dpif whose name is not in 'bridge_names'. */
> -        for (j = 0; j < dpif_names.n; j++) {
> -            if (!svec_contains(&bridge_names, dpif_names.names[j])) {
> +        SSET_FOR_EACH (name, &dpif_names) {
> +            if (!svec_contains(&bridge_names, name)) {
>                 struct dpif *dpif;
>                 int retval;
>
> -                retval = dpif_open(dpif_names.names[j], dpif_types.names[i],
> -                                   &dpif);
> +                retval = dpif_open(name, type, &dpif);
>                 if (!retval) {
>                     dpif_delete(dpif);
>                     dpif_close(dpif);
> @@ -412,8 +412,8 @@ bridge_configure_once(const struct ovsrec_open_vswitch *cfg)
>         }
>     }
>     svec_destroy(&bridge_names);
> -    svec_destroy(&dpif_names);
> -    svec_destroy(&dpif_types);
> +    sset_destroy(&dpif_names);
> +    sset_destroy(&dpif_types);
>  }
>
>  /* Callback for iterate_and_prune_ifaces(). */
> --
> 1.7.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>



More information about the dev mailing list