X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev.c;h=b8592c19f9e3e1760734a593d26f933b441be380;hb=6da1e8091eb2e19de7ba5e0c73ac3e7dd437743d;hp=1f0b764f99caa66927a503b3d3d8c39ec4125d20;hpb=943e5afe0b450fc665a4a162fe1bacafd34d18e8;p=sliver-openvswitch.git diff --git a/lib/netdev.c b/lib/netdev.c index 1f0b764f9..b8592c19f 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -243,7 +243,7 @@ netdev_open(struct netdev_options *options, struct netdev **netdevp) assert(netdev_dev->netdev_class == class); } else if (!shash_is_empty(options->args) && - !smap_equal(&netdev_dev->args, options->args)) { + !netdev_dev_args_equal(netdev_dev, options->args)) { VLOG_WARN("%s: attempted to open already open netdev with " "different arguments", options->name); @@ -289,7 +289,7 @@ netdev_set_config(struct netdev *netdev, const struct shash *args) } if (netdev_dev->netdev_class->set_config) { - if (!smap_equal(&netdev_dev->args, args)) { + if (!netdev_dev_args_equal(netdev_dev, args)) { update_device_args(netdev_dev, args); return netdev_dev->netdev_class->set_config(netdev_dev, args); } @@ -1382,6 +1382,19 @@ netdev_dev_get_devices(const struct netdev_class *netdev_class, } } +/* Returns true if 'args' is equivalent to the "args" field in + * 'netdev_dev', otherwise false. */ +bool +netdev_dev_args_equal(const struct netdev_dev *netdev_dev, + const struct shash *args) +{ + if (netdev_dev->netdev_class->config_equal) { + return netdev_dev->netdev_class->config_equal(netdev_dev, args); + } else { + return smap_equal(&netdev_dev->args, args); + } +} + /* Initializes 'netdev' as a instance of the netdev_dev. * * This function adds 'netdev' to a netdev-owned linked list, so it is very