[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