From: Ben Pfaff Date: Fri, 25 Mar 2011 22:26:30 +0000 (-0700) Subject: Convert shash users that don't use the 'data' value to sset instead. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3c01ed3308e7899e98e981bf465f74be86f5f12;p=openvswitch Convert shash users that don't use the 'data' value to sset instead. 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. --- diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c index 509174c8..3c22b556 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 81f8f284..ed82173a 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 #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 f06742ae..4254c1ad 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 78a5005b..8b8b28dd 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -55,6 +55,7 @@ #include "poll-loop.h" #include "rconn.h" #include "shash.h" +#include "sset.h" #include "stream-ssl.h" #include "svec.h" #include "tag.h" @@ -1026,25 +1027,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 8d44d848..df0bc953 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 e6715c9c..2c1ba6df 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 72091a29..951ce74e 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; @@ -506,30 +507,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) @@ -540,7 +540,7 @@ collect_in_band_managers(const struct ovsrec_open_vswitch *ovs_cfg, } } } - shash_destroy(&targets); + sset_destroy(&targets); *managersp = managers; *n_managersp = n_managers; @@ -3947,24 +3947,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 @@ -3988,7 +3988,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; @@ -4056,12 +4056,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); @@ -4098,7 +4098,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"); @@ -4753,8 +4753,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; @@ -4775,8 +4775,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; @@ -4790,14 +4790,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); @@ -4855,7 +4855,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; @@ -4895,12 +4895,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; @@ -4916,8 +4916,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 @@ -4925,8 +4925,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; @@ -4936,7 +4936,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) @@ -4946,7 +4946,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; @@ -4954,6 +4954,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); }