[ovs-dev] [next 13/35] bridge: Change 'iface_by_name' from shash to hmap.
Ethan Jackson
ethan at nicira.com
Mon May 2 18:52:58 UTC 2011
This seems fine to me. I'm not completely convinced of it's value, as
a bit of extra memory stored in the shash is not a big deal. That
said, I think it's fine.
Ethan
On Tue, Apr 26, 2011 at 09:24, Ben Pfaff <blp at nicira.com> wrote:
> This avoids having duplicate copies of interface names (inside the shash)
> and it isn't any harder to work with.
> ---
> vswitchd/bridge.c | 23 ++++++++++++++++-------
> 1 files changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index f6b7289..3f6a137 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -99,6 +99,7 @@ static void dst_set_free(struct dst_set *);
> struct iface {
> /* These members are always valid. */
> struct list port_elem; /* Element in struct port's "ifaces" list. */
> + struct hmap_node name_node; /* In struct bridge's "iface_by_name" hmap. */
> struct port *port; /* Containing port. */
> char *name; /* Host network device name. */
> tag_type tag; /* Tag associated with this interface. */
> @@ -176,7 +177,7 @@ struct bridge {
>
> /* Bridge ports. */
> struct hmap ports; /* "struct port"s indexed by name. */
> - struct shash iface_by_name; /* "struct iface"s indexed by name. */
> + struct hmap iface_by_name; /* "struct iface"s indexed by name. */
>
> /* Bonding. */
> bool has_bonded_ports;
> @@ -1665,7 +1666,7 @@ bridge_create(const struct ovsrec_bridge *br_cfg)
>
> hmap_init(&br->ports);
> hmap_init(&br->ifaces);
> - shash_init(&br->iface_by_name);
> + hmap_init(&br->iface_by_name);
>
> br->flush = false;
>
> @@ -1701,7 +1702,7 @@ bridge_destroy(struct bridge *br)
> mac_learning_destroy(br->ml);
> hmap_destroy(&br->ifaces);
> hmap_destroy(&br->ports);
> - shash_destroy(&br->iface_by_name);
> + hmap_destroy(&br->iface_by_name);
> free(br->synth_local_iface.type);
> free(br->name);
> free(br);
> @@ -3238,7 +3239,7 @@ iface_create(struct port *port, const struct ovsrec_interface *if_cfg)
> iface->netdev = NULL;
> iface->cfg = if_cfg;
>
> - shash_add_assert(&br->iface_by_name, iface->name, iface);
> + hmap_insert(&br->iface_by_name, &iface->name_node, hash_string(name, 0));
>
> list_push_back(&port->ifaces, &iface->port_elem);
>
> @@ -3264,13 +3265,12 @@ iface_destroy(struct iface *iface)
> lacp_slave_unregister(port->lacp, iface);
> }
>
> - shash_find_and_delete_assert(&br->iface_by_name, iface->name);
> -
> if (iface->dp_ifidx >= 0) {
> hmap_remove(&br->ifaces, &iface->dp_ifidx_node);
> }
>
> list_remove(&iface->port_elem);
> + hmap_remove(&br->iface_by_name, &iface->name_node);
>
> netdev_close(iface->netdev);
>
> @@ -3284,7 +3284,16 @@ iface_destroy(struct iface *iface)
> static struct iface *
> iface_lookup(const struct bridge *br, const char *name)
> {
> - return shash_find_data(&br->iface_by_name, name);
> + struct iface *iface;
> +
> + HMAP_FOR_EACH_WITH_HASH (iface, name_node, hash_string(name, 0),
> + &br->iface_by_name) {
> + if (!strcmp(iface->name, name)) {
> + return iface;
> + }
> + }
> +
> + return NULL;
> }
>
> static struct iface *
> --
> 1.7.4.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list