I think you neglected to publish the patch[s] before this one that add sset.

Ethan

On Fri, Mar 25, 2011 at 3:40 PM, Ben Pfaff <b...@nicira.com> wrote:
> In each of the cases converted here, an shash was used simply to maintain
> a set of strings, with the shash_nodes' 'data' values set to NULL.  This
> commit converts them to use sset instead.
> ---
>  lib/dpif-linux.c      |   18 +++++-----
>  lib/fatal-signal.c    |   24 ++++++--------
>  lib/netdev.c          |   21 +++++-------
>  ofproto/ofproto.c     |   17 +++++-----
>  ovsdb/ovsdb-server.c  |   34 ++++++++++-----------
>  utilities/ovs-vsctl.c |   31 ++++++++++---------
>  vswitchd/bridge.c     |   80 ++++++++++++++++++++++++------------------------
>  7 files changed, 109 insertions(+), 116 deletions(-)
>
> diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
> index 509174c..3c22b55 100644
> --- a/lib/dpif-linux.c
> +++ b/lib/dpif-linux.c
> @@ -45,6 +45,7 @@
>  #include "rtnetlink.h"
>  #include "rtnetlink-link.h"
>  #include "shash.h"
> +#include "sset.h"
>  #include "svec.h"
>  #include "unaligned.h"
>  #include "util.h"
> @@ -125,7 +126,7 @@ struct dpif_linux {
>     unsigned int listen_mask;
>
>     /* Change notification. */
> -    struct shash changed_ports;  /* Ports that have changed. */
> +    struct sset changed_ports;  /* Ports that have changed. */
>     struct rtnetlink_notifier port_notifier;
>     bool change_error;
>  };
> @@ -231,7 +232,7 @@ open_dpif(const struct dpif_linux_dp *dp, struct dpif 
> **dpifp)
>     }
>     dpif->listen_mask = 0;
>     dpif->dp_ifindex = dp->dp_ifindex;
> -    shash_init(&dpif->changed_ports);
> +    sset_init(&dpif->changed_ports);
>     dpif->change_error = false;
>     *dpifp = &dpif->dpif;
>
> @@ -247,7 +248,7 @@ dpif_linux_close(struct dpif *dpif_)
>  {
>     struct dpif_linux *dpif = dpif_linux_cast(dpif_);
>     rtnetlink_link_notifier_unregister(&dpif->port_notifier);
> -    shash_destroy(&dpif->changed_ports);
> +    sset_destroy(&dpif->changed_ports);
>     free(dpif);
>  }
>
> @@ -483,11 +484,10 @@ dpif_linux_port_poll(const struct dpif *dpif_, char 
> **devnamep)
>
>     if (dpif->change_error) {
>         dpif->change_error = false;
> -        shash_clear(&dpif->changed_ports);
> +        sset_clear(&dpif->changed_ports);
>         return ENOBUFS;
> -    } else if (!shash_is_empty(&dpif->changed_ports)) {
> -        struct shash_node *node = shash_first(&dpif->changed_ports);
> -        *devnamep = shash_steal(&dpif->changed_ports, node);
> +    } else if (!sset_is_empty(&dpif->changed_ports)) {
> +        *devnamep = sset_pop(&dpif->changed_ports);
>         return 0;
>     } else {
>         return EAGAIN;
> @@ -498,7 +498,7 @@ static void
>  dpif_linux_port_poll_wait(const struct dpif *dpif_)
>  {
>     struct dpif_linux *dpif = dpif_linux_cast(dpif_);
> -    if (!shash_is_empty(&dpif->changed_ports) || dpif->change_error) {
> +    if (!sset_is_empty(&dpif->changed_ports) || dpif->change_error) {
>         poll_immediate_wake();
>     } else {
>         rtnetlink_link_notifier_wait();
> @@ -1041,7 +1041,7 @@ dpif_linux_port_changed(const struct 
> rtnetlink_link_change *change,
>         {
>             /* Our datapath changed, either adding a new port or deleting an
>              * existing one. */
> -            shash_add_once(&dpif->changed_ports, change->ifname, NULL);
> +            sset_add(&dpif->changed_ports, change->ifname);
>         }
>     } else {
>         dpif->change_error = true;
> diff --git a/lib/fatal-signal.c b/lib/fatal-signal.c
> index 81f8f28..ed82173 100644
> --- a/lib/fatal-signal.c
> +++ b/lib/fatal-signal.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2008, 2009, 2010 Nicira Networks.
> + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -26,6 +26,7 @@
>  #include <unistd.h>
>  #include "poll-loop.h"
>  #include "shash.h"
> +#include "sset.h"
>  #include "socket-util.h"
>  #include "util.h"
>  #include "vlog.h"
> @@ -194,8 +195,8 @@ call_hooks(int sig_nr)
>     }
>  }
>
> -/* Files to delete on exit.  (The 'data' member of each node is unused.) */
> -static struct shash files = SHASH_INITIALIZER(&files);
> +/* Files to delete on exit. */
> +static struct sset files = SSET_INITIALIZER(&files);
>
>  /* Has a hook function been registered with fatal_signal_add_hook() (and not
>  * cleared by fatal_signal_fork())? */
> @@ -215,7 +216,7 @@ fatal_signal_add_file_to_unlink(const char *file)
>         fatal_signal_add_hook(unlink_files, cancel_files, NULL, true);
>     }
>
> -    shash_add_once(&files, file, NULL);
> +    sset_add(&files, file);
>  }
>
>  /* Unregisters 'file' from being unlinked when the program terminates via
> @@ -223,12 +224,7 @@ fatal_signal_add_file_to_unlink(const char *file)
>  void
>  fatal_signal_remove_file_to_unlink(const char *file)
>  {
> -    struct shash_node *node;
> -
> -    node = shash_find(&files, file);
> -    if (node) {
> -        shash_delete(&files, node);
> -    }
> +    sset_find_and_delete(&files, file);
>  }
>
>  /* Like fatal_signal_remove_file_to_unlink(), but also unlinks 'file'.
> @@ -255,17 +251,17 @@ unlink_files(void *aux OVS_UNUSED)
>  static void
>  cancel_files(void *aux OVS_UNUSED)
>  {
> -    shash_clear(&files);
> +    sset_clear(&files);
>     added_hook = false;
>  }
>
>  static void
>  do_unlink_files(void)
>  {
> -    struct shash_node *node;
> +    const char *file;
>
> -    SHASH_FOR_EACH (node, &files) {
> -        unlink(node->name);
> +    SSET_FOR_EACH (file, &files) {
> +        unlink(file);
>     }
>  }
>
> diff --git a/lib/netdev.c b/lib/netdev.c
> index f06742a..4254c1a 100644
> --- a/lib/netdev.c
> +++ b/lib/netdev.c
> @@ -37,6 +37,7 @@
>  #include "packets.h"
>  #include "poll-loop.h"
>  #include "shash.h"
> +#include "sset.h"
>  #include "svec.h"
>  #include "vlog.h"
>
> @@ -1444,7 +1445,7 @@ netdev_notifier_init(struct netdev_notifier *notifier, 
> struct netdev *netdev,
>  /* Tracks changes in the status of a set of network devices. */
>  struct netdev_monitor {
>     struct shash polled_netdevs;
> -    struct shash changed_netdevs;
> +    struct sset changed_netdevs;
>  };
>
>  /* Creates and returns a new structure for monitor changes in the status of
> @@ -1454,7 +1455,7 @@ netdev_monitor_create(void)
>  {
>     struct netdev_monitor *monitor = xmalloc(sizeof *monitor);
>     shash_init(&monitor->polled_netdevs);
> -    shash_init(&monitor->changed_netdevs);
> +    sset_init(&monitor->changed_netdevs);
>     return monitor;
>  }
>
> @@ -1472,7 +1473,7 @@ netdev_monitor_destroy(struct netdev_monitor *monitor)
>         }
>
>         shash_destroy(&monitor->polled_netdevs);
> -        shash_destroy(&monitor->changed_netdevs);
> +        sset_destroy(&monitor->changed_netdevs);
>         free(monitor);
>     }
>  }
> @@ -1482,7 +1483,7 @@ netdev_monitor_cb(struct netdev_notifier *notifier)
>  {
>     struct netdev_monitor *monitor = notifier->aux;
>     const char *name = netdev_get_name(notifier->netdev);
> -    shash_add_once(&monitor->changed_netdevs, name, NULL);
> +    sset_add(&monitor->changed_netdevs, name);
>  }
>
>  /* Attempts to add 'netdev' as a netdev monitored by 'monitor'.  Returns 0 if
> @@ -1526,10 +1527,7 @@ netdev_monitor_remove(struct netdev_monitor *monitor, 
> struct netdev *netdev)
>         shash_delete(&monitor->polled_netdevs, node);
>
>         /* Drop any pending notification. */
> -        node = shash_find(&monitor->changed_netdevs, netdev_name);
> -        if (node) {
> -            shash_delete(&monitor->changed_netdevs, node);
> -        }
> +        sset_find_and_delete(&monitor->changed_netdevs, netdev_name);
>     }
>  }
>
> @@ -1543,12 +1541,11 @@ netdev_monitor_remove(struct netdev_monitor *monitor, 
> struct netdev *netdev)
>  int
>  netdev_monitor_poll(struct netdev_monitor *monitor, char **devnamep)
>  {
> -    struct shash_node *node = shash_first(&monitor->changed_netdevs);
> -    if (!node) {
> +    if (sset_is_empty(&monitor->changed_netdevs)) {
>         *devnamep = NULL;
>         return EAGAIN;
>     } else {
> -        *devnamep = shash_steal(&monitor->changed_netdevs, node);
> +        *devnamep = sset_pop(&monitor->changed_netdevs);
>         return 0;
>     }
>  }
> @@ -1559,7 +1556,7 @@ netdev_monitor_poll(struct netdev_monitor *monitor, 
> char **devnamep)
>  void
>  netdev_monitor_poll_wait(const struct netdev_monitor *monitor)
>  {
> -    if (!shash_is_empty(&monitor->changed_netdevs)) {
> +    if (!sset_is_empty(&monitor->changed_netdevs)) {
>         poll_immediate_wake();
>     } else {
>         /* XXX Nothing needed here for netdev_linux, but maybe other netdev
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index e0715b9..5412f8e 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -54,6 +54,7 @@
>  #include "poll-loop.h"
>  #include "rconn.h"
>  #include "shash.h"
> +#include "sset.h"
>  #include "stream-ssl.h"
>  #include "svec.h"
>  #include "tag.h"
> @@ -1578,25 +1579,25 @@ static void
>  reinit_ports(struct ofproto *p)
>  {
>     struct dpif_port_dump dump;
> -    struct shash_node *node;
> -    struct shash devnames;
> +    struct sset devnames;
>     struct ofport *ofport;
>     struct dpif_port dpif_port;
> +    const char *devname;
>
>     COVERAGE_INC(ofproto_reinit_ports);
>
> -    shash_init(&devnames);
> +    sset_init(&devnames);
>     HMAP_FOR_EACH (ofport, hmap_node, &p->ports) {
> -        shash_add_once (&devnames, ofport->opp.name, NULL);
> +        sset_add(&devnames, ofport->opp.name);
>     }
>     DPIF_PORT_FOR_EACH (&dpif_port, &dump, p->dpif) {
> -        shash_add_once (&devnames, dpif_port.name, NULL);
> +        sset_add(&devnames, dpif_port.name);
>     }
>
> -    SHASH_FOR_EACH (node, &devnames) {
> -        update_port(p, node->name);
> +    SSET_FOR_EACH (devname, &devnames) {
> +        update_port(p, devname);
>     }
> -    shash_destroy(&devnames);
> +    sset_destroy(&devnames);
>  }
>
>  static struct ofport *
> diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c
> index 8d44d84..df0bc95 100644
> --- a/ovsdb/ovsdb-server.c
> +++ b/ovsdb/ovsdb-server.c
> @@ -40,7 +40,7 @@
>  #include "stream-ssl.h"
>  #include "stream.h"
>  #include "stress.h"
> -#include "svec.h"
> +#include "sset.h"
>  #include "table.h"
>  #include "timeval.h"
>  #include "transaction.h"
> @@ -64,15 +64,15 @@ static unixctl_cb_func ovsdb_server_compact;
>  static unixctl_cb_func ovsdb_server_reconnect;
>
>  static void parse_options(int argc, char *argv[], char **file_namep,
> -                          struct shash *remotes, char **unixctl_pathp,
> +                          struct sset *remotes, char **unixctl_pathp,
>                           char **run_command);
>  static void usage(void) NO_RETURN;
>
>  static void reconfigure_from_db(struct ovsdb_jsonrpc_server *jsonrpc,
> -                                const struct ovsdb *db, struct shash 
> *remotes);
> +                                const struct ovsdb *db, struct sset 
> *remotes);
>
>  static void update_remote_status(const struct ovsdb_jsonrpc_server *jsonrpc,
> -                                 const struct shash *remotes,
> +                                 const struct sset *remotes,
>                                  struct ovsdb *db);
>
>  int
> @@ -82,7 +82,7 @@ main(int argc, char *argv[])
>     char *run_command = NULL;
>     struct unixctl_server *unixctl;
>     struct ovsdb_jsonrpc_server *jsonrpc;
> -    struct shash remotes;
> +    struct sset remotes;
>     struct ovsdb_error *error;
>     struct ovsdb_file *file;
>     struct ovsdb *db;
> @@ -171,7 +171,7 @@ main(int argc, char *argv[])
>     }
>     ovsdb_jsonrpc_server_destroy(jsonrpc);
>     ovsdb_destroy(db);
> -    shash_destroy_free_data(&remotes);
> +    sset_destroy(&remotes);
>     unixctl_server_destroy(unixctl);
>
>     if (run_process && process_exited(run_process)) {
> @@ -551,14 +551,14 @@ update_remote_rows(const struct ovsdb *db, struct 
> ovsdb_txn *txn,
>
>  static void
>  update_remote_status(const struct ovsdb_jsonrpc_server *jsonrpc,
> -                     const struct shash *remotes, struct ovsdb *db)
> +                     const struct sset *remotes, struct ovsdb *db)
>  {
>     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
> -    struct shash_node *remote;
>     struct shash statuses;
>     struct ovsdb_txn *txn;
>     const bool durable_txn = false;
>     struct ovsdb_error *error;
> +    const char *remote;
>
>     /* Get status of current connections. */
>     ovsdb_jsonrpc_server_get_remote_status(jsonrpc, &statuses);
> @@ -566,8 +566,8 @@ update_remote_status(const struct ovsdb_jsonrpc_server 
> *jsonrpc,
>     txn = ovsdb_txn_create(db);
>
>     /* Iterate over --remote arguments given on command line. */
> -    SHASH_FOR_EACH (remote, remotes) {
> -        update_remote_rows(db, txn, remote->name, &statuses);
> +    SSET_FOR_EACH (remote, remotes) {
> +        update_remote_rows(db, txn, remote, &statuses);
>     }
>
>     error = ovsdb_txn_commit(txn, durable_txn);
> @@ -582,16 +582,14 @@ update_remote_status(const struct ovsdb_jsonrpc_server 
> *jsonrpc,
>  /* Reconfigures ovsdb-server based on information in the database. */
>  static void
>  reconfigure_from_db(struct ovsdb_jsonrpc_server *jsonrpc,
> -                    const struct ovsdb *db, struct shash *remotes)
> +                    const struct ovsdb *db, struct sset *remotes)
>  {
>     struct shash resolved_remotes;
> -    struct shash_node *node;
> +    const char *name;
>
>     /* Configure remotes. */
>     shash_init(&resolved_remotes);
> -    SHASH_FOR_EACH (node, remotes) {
> -        const char *name = node->name;
> -
> +    SSET_FOR_EACH (name, remotes) {
>         if (!strncmp(name, "db:", 3)) {
>             query_db_remotes(name, db, &resolved_remotes);
>         } else {
> @@ -652,7 +650,7 @@ ovsdb_server_reconnect(struct unixctl_conn *conn, const 
> char *args OVS_UNUSED,
>
>  static void
>  parse_options(int argc, char *argv[], char **file_namep,
> -              struct shash *remotes, char **unixctl_pathp,
> +              struct sset *remotes, char **unixctl_pathp,
>               char **run_command)
>  {
>     enum {
> @@ -684,7 +682,7 @@ parse_options(int argc, char *argv[], char **file_namep,
>     };
>     char *short_options = long_options_to_short_options(long_options);
>
> -    shash_init(remotes);
> +    sset_init(remotes);
>     for (;;) {
>         int c;
>
> @@ -695,7 +693,7 @@ parse_options(int argc, char *argv[], char **file_namep,
>
>         switch (c) {
>         case OPT_REMOTE:
> -            shash_add_once(remotes, optarg, NULL);
> +            sset_add(remotes, optarg);
>             break;
>
>         case OPT_UNIXCTL:
> diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c
> index 2baab00..fc410f8 100644
> --- a/utilities/ovs-vsctl.c
> +++ b/utilities/ovs-vsctl.c
> @@ -38,6 +38,7 @@
>  #include "process.h"
>  #include "stream.h"
>  #include "stream-ssl.h"
> +#include "sset.h"
>  #include "svec.h"
>  #include "vswitchd/vswitch-idl.h"
>  #include "table.h"
> @@ -757,7 +758,7 @@ static void
>  get_info(struct vsctl_context *ctx, struct vsctl_info *info)
>  {
>     const struct ovsrec_open_vswitch *ovs = ctx->ovs;
> -    struct shash bridges, ports;
> +    struct sset bridges, ports;
>     size_t i;
>
>     info->ctx = ctx;
> @@ -765,14 +766,14 @@ get_info(struct vsctl_context *ctx, struct vsctl_info 
> *info)
>     shash_init(&info->ports);
>     shash_init(&info->ifaces);
>
> -    shash_init(&bridges);
> -    shash_init(&ports);
> +    sset_init(&bridges);
> +    sset_init(&ports);
>     for (i = 0; i < ovs->n_bridges; i++) {
>         struct ovsrec_bridge *br_cfg = ovs->bridges[i];
>         struct vsctl_bridge *br;
>         size_t j;
>
> -        if (!shash_add_once(&bridges, br_cfg->name, NULL)) {
> +        if (!sset_add(&bridges, br_cfg->name)) {
>             VLOG_WARN("%s: database contains duplicate bridge name",
>                       br_cfg->name);
>             continue;
> @@ -785,29 +786,29 @@ get_info(struct vsctl_context *ctx, struct vsctl_info 
> *info)
>         for (j = 0; j < br_cfg->n_ports; j++) {
>             struct ovsrec_port *port_cfg = br_cfg->ports[j];
>
> -            if (!shash_add_once(&ports, port_cfg->name, NULL)) {
> +            if (!sset_add(&ports, port_cfg->name)) {
>                 VLOG_WARN("%s: database contains duplicate port name",
>                           port_cfg->name);
>                 continue;
>             }
>
>             if (port_is_fake_bridge(port_cfg)
> -                && shash_add_once(&bridges, port_cfg->name, NULL)) {
> +                && sset_add(&bridges, port_cfg->name)) {
>                 add_bridge(info, NULL, port_cfg->name, br, *port_cfg->tag);
>             }
>         }
>     }
> -    shash_destroy(&bridges);
> -    shash_destroy(&ports);
> +    sset_destroy(&bridges);
> +    sset_destroy(&ports);
>
> -    shash_init(&bridges);
> -    shash_init(&ports);
> +    sset_init(&bridges);
> +    sset_init(&ports);
>     for (i = 0; i < ovs->n_bridges; i++) {
>         struct ovsrec_bridge *br_cfg = ovs->bridges[i];
>         struct vsctl_bridge *br;
>         size_t j;
>
> -        if (!shash_add_once(&bridges, br_cfg->name, NULL)) {
> +        if (!sset_add(&bridges, br_cfg->name)) {
>             continue;
>         }
>         br = shash_find_data(&info->bridges, br_cfg->name);
> @@ -816,12 +817,12 @@ get_info(struct vsctl_context *ctx, struct vsctl_info 
> *info)
>             struct vsctl_port *port;
>             size_t k;
>
> -            if (!shash_add_once(&ports, port_cfg->name, NULL)) {
> +            if (!sset_add(&ports, port_cfg->name)) {
>                 continue;
>             }
>
>             if (port_is_fake_bridge(port_cfg)
> -                && !shash_add_once(&bridges, port_cfg->name, NULL)) {
> +                && !sset_add(&bridges, port_cfg->name)) {
>                 continue;
>             }
>
> @@ -855,8 +856,8 @@ get_info(struct vsctl_context *ctx, struct vsctl_info 
> *info)
>             }
>         }
>     }
> -    shash_destroy(&bridges);
> -    shash_destroy(&ports);
> +    sset_destroy(&bridges);
> +    sset_destroy(&ports);
>  }
>
>  static void
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index b57860f..b071ec7 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -61,6 +61,7 @@
>  #include "shash.h"
>  #include "socket-util.h"
>  #include "stream-ssl.h"
> +#include "sset.h"
>  #include "svec.h"
>  #include "system-stats.h"
>  #include "timeval.h"
> @@ -142,8 +143,8 @@ struct mirror {
>     struct uuid uuid;           /* UUID of this "mirror" record in database. 
> */
>
>     /* Selection criteria. */
> -    struct shash src_ports;     /* Name is port name; data is always NULL. */
> -    struct shash dst_ports;     /* Name is port name; data is always NULL. */
> +    struct sset src_ports;      /* Source port names. */
> +    struct sset dst_ports;      /* Destination port names. */
>     int *vlans;
>     size_t n_vlans;
>
> @@ -499,30 +500,29 @@ collect_in_band_managers(const struct 
> ovsrec_open_vswitch *ovs_cfg,
>  {
>     struct sockaddr_in *managers = NULL;
>     size_t n_managers = 0;
> -    struct shash targets;
> +    struct sset targets;
>     size_t i;
>
>     /* Collect all of the potential targets from the "targets" columns of the
>      * rows pointed to by "manager_options", excluding any that are
>      * out-of-band. */
> -    shash_init(&targets);
> +    sset_init(&targets);
>     for (i = 0; i < ovs_cfg->n_manager_options; i++) {
>         struct ovsrec_manager *m = ovs_cfg->manager_options[i];
>
>         if (m->connection_mode && !strcmp(m->connection_mode, "out-of-band")) 
> {
> -            shash_find_and_delete(&targets, m->target);
> +            sset_find_and_delete(&targets, m->target);
>         } else {
> -            shash_add_once(&targets, m->target, NULL);
> +            sset_add(&targets, m->target);
>         }
>     }
>
>     /* Now extract the targets' IP addresses. */
> -    if (!shash_is_empty(&targets)) {
> -        struct shash_node *node;
> +    if (!sset_is_empty(&targets)) {
> +        const char *target;
>
> -        managers = xmalloc(shash_count(&targets) * sizeof *managers);
> -        SHASH_FOR_EACH (node, &targets) {
> -            const char *target = node->name;
> +        managers = xmalloc(sset_count(&targets) * sizeof *managers);
> +        SSET_FOR_EACH (target, &targets) {
>             struct sockaddr_in *sin = &managers[n_managers];
>
>             if ((!strncmp(target, "tcp:", 4)
> @@ -533,7 +533,7 @@ collect_in_band_managers(const struct ovsrec_open_vswitch 
> *ovs_cfg,
>             }
>         }
>     }
> -    shash_destroy(&targets);
> +    sset_destroy(&targets);
>
>     *managersp = managers;
>     *n_managersp = n_managers;
> @@ -3928,24 +3928,24 @@ static void
>  port_del_ifaces(struct port *port, const struct ovsrec_port *cfg)
>  {
>     struct iface *iface, *next;
> -    struct shash new_ifaces;
> +    struct sset new_ifaces;
>     size_t i;
>
>     /* Collect list of new interfaces. */
> -    shash_init(&new_ifaces);
> +    sset_init(&new_ifaces);
>     for (i = 0; i < cfg->n_interfaces; i++) {
>         const char *name = cfg->interfaces[i]->name;
> -        shash_add_once(&new_ifaces, name, NULL);
> +        sset_add(&new_ifaces, name);
>     }
>
>     /* Get rid of deleted interfaces. */
>     LIST_FOR_EACH_SAFE (iface, next, port_elem, &port->ifaces) {
> -        if (!shash_find(&new_ifaces, iface->name)) {
> +        if (!sset_contains(&new_ifaces, iface->name)) {
>             iface_destroy(iface);
>         }
>     }
>
> -    shash_destroy(&new_ifaces);
> +    sset_destroy(&new_ifaces);
>  }
>
>  /* Expires all MAC learning entries associated with 'port' and forces ofproto
> @@ -3969,7 +3969,7 @@ static void
>  port_reconfigure(struct port *port, const struct ovsrec_port *cfg)
>  {
>     const char *detect_mode;
> -    struct shash new_ifaces;
> +    struct sset new_ifaces;
>     long long int next_rebalance, miimon_next_update, lacp_priority;
>     bool need_flush = false;
>     unsigned long *trunks;
> @@ -4037,12 +4037,12 @@ port_reconfigure(struct port *port, const struct 
> ovsrec_port *cfg)
>     }
>
>     /* Add new interfaces and update 'cfg' member of existing ones. */
> -    shash_init(&new_ifaces);
> +    sset_init(&new_ifaces);
>     for (i = 0; i < cfg->n_interfaces; i++) {
>         const struct ovsrec_interface *if_cfg = cfg->interfaces[i];
>         struct iface *iface;
>
> -        if (!shash_add_once(&new_ifaces, if_cfg->name, NULL)) {
> +        if (!sset_add(&new_ifaces, if_cfg->name)) {
>             VLOG_WARN("port %s: %s specified twice as port interface",
>                       port->name, if_cfg->name);
>             iface_set_ofport(if_cfg, -1);
> @@ -4079,7 +4079,7 @@ port_reconfigure(struct port *port, const struct 
> ovsrec_port *cfg)
>             iface->lacp_priority = lacp_priority;
>         }
>     }
> -    shash_destroy(&new_ifaces);
> +    sset_destroy(&new_ifaces);
>
>     port->lacp_fast = !strcmp(get_port_other_config(cfg, "lacp-time", "slow"),
>                              "fast");
> @@ -4734,8 +4734,8 @@ mirror_create(struct bridge *br, struct ovsrec_mirror 
> *cfg)
>     m->bridge = br;
>     m->idx = i;
>     m->name = xstrdup(cfg->name);
> -    shash_init(&m->src_ports);
> -    shash_init(&m->dst_ports);
> +    sset_init(&m->src_ports);
> +    sset_init(&m->dst_ports);
>     m->vlans = NULL;
>     m->n_vlans = 0;
>     m->out_vlan = -1;
> @@ -4756,8 +4756,8 @@ mirror_destroy(struct mirror *m)
>             port->dst_mirrors &= ~(MIRROR_MASK_C(1) << m->idx);
>         }
>
> -        shash_destroy(&m->src_ports);
> -        shash_destroy(&m->dst_ports);
> +        sset_destroy(&m->src_ports);
> +        sset_destroy(&m->dst_ports);
>         free(m->vlans);
>
>         m->bridge->mirrors[m->idx] = NULL;
> @@ -4771,14 +4771,14 @@ mirror_destroy(struct mirror *m)
>
>  static void
>  mirror_collect_ports(struct mirror *m, struct ovsrec_port **ports, int 
> n_ports,
> -                     struct shash *names)
> +                     struct sset *names)
>  {
>     size_t i;
>
>     for (i = 0; i < n_ports; i++) {
>         const char *name = ports[i]->name;
>         if (port_lookup(m->bridge, name)) {
> -            shash_add_once(names, name, NULL);
> +            sset_add(names, name);
>         } else {
>             VLOG_WARN("bridge %s: mirror %s cannot match on nonexistent "
>                       "port %s", m->bridge->name, m->name, name);
> @@ -4836,7 +4836,7 @@ port_trunks_any_mirrored_vlan(const struct mirror *m, 
> const struct port *p)
>  static void
>  mirror_reconfigure_one(struct mirror *m, struct ovsrec_mirror *cfg)
>  {
> -    struct shash src_ports, dst_ports;
> +    struct sset src_ports, dst_ports;
>     mirror_mask_t mirror_bit;
>     struct port *out_port;
>     struct port *port;
> @@ -4876,12 +4876,12 @@ mirror_reconfigure_one(struct mirror *m, struct 
> ovsrec_mirror *cfg)
>         return;
>     }
>
> -    shash_init(&src_ports);
> -    shash_init(&dst_ports);
> +    sset_init(&src_ports);
> +    sset_init(&dst_ports);
>     if (cfg->select_all) {
>         HMAP_FOR_EACH (port, hmap_node, &m->bridge->ports) {
> -            shash_add_once(&src_ports, port->name, NULL);
> -            shash_add_once(&dst_ports, port->name, NULL);
> +            sset_add(&src_ports, port->name);
> +            sset_add(&dst_ports, port->name);
>         }
>         vlans = NULL;
>         n_vlans = 0;
> @@ -4897,8 +4897,8 @@ mirror_reconfigure_one(struct mirror *m, struct 
> ovsrec_mirror *cfg)
>     }
>
>     /* Update mirror data. */
> -    if (!shash_equal_keys(&m->src_ports, &src_ports)
> -        || !shash_equal_keys(&m->dst_ports, &dst_ports)
> +    if (!sset_equals(&m->src_ports, &src_ports)
> +        || !sset_equals(&m->dst_ports, &dst_ports)
>         || m->n_vlans != n_vlans
>         || memcmp(m->vlans, vlans, sizeof *vlans * n_vlans)
>         || m->out_port != out_port
> @@ -4906,8 +4906,8 @@ mirror_reconfigure_one(struct mirror *m, struct 
> ovsrec_mirror *cfg)
>         bridge_flush(m->bridge);
>         mac_learning_flush(m->bridge->ml);
>     }
> -    shash_swap(&m->src_ports, &src_ports);
> -    shash_swap(&m->dst_ports, &dst_ports);
> +    sset_swap(&m->src_ports, &src_ports);
> +    sset_swap(&m->dst_ports, &dst_ports);
>     free(m->vlans);
>     m->vlans = vlans;
>     m->n_vlans = n_vlans;
> @@ -4917,7 +4917,7 @@ mirror_reconfigure_one(struct mirror *m, struct 
> ovsrec_mirror *cfg)
>     /* Update ports. */
>     mirror_bit = MIRROR_MASK_C(1) << m->idx;
>     HMAP_FOR_EACH (port, hmap_node, &m->bridge->ports) {
> -        if (shash_find(&m->src_ports, port->name)
> +        if (sset_contains(&m->src_ports, port->name)
>             || (m->n_vlans
>                 && (!port->vlan
>                     ? port_trunks_any_mirrored_vlan(m, port)
> @@ -4927,7 +4927,7 @@ mirror_reconfigure_one(struct mirror *m, struct 
> ovsrec_mirror *cfg)
>             port->src_mirrors &= ~mirror_bit;
>         }
>
> -        if (shash_find(&m->dst_ports, port->name)) {
> +        if (sset_contains(&m->dst_ports, port->name)) {
>             port->dst_mirrors |= mirror_bit;
>         } else {
>             port->dst_mirrors &= ~mirror_bit;
> @@ -4935,6 +4935,6 @@ mirror_reconfigure_one(struct mirror *m, struct 
> ovsrec_mirror *cfg)
>     }
>
>     /* Clean up. */
> -    shash_destroy(&src_ports);
> -    shash_destroy(&dst_ports);
> +    sset_destroy(&src_ports);
> +    sset_destroy(&dst_ports);
>  }
> --
> 1.7.1
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to