#include <string.h>
#include <unistd.h>
+#include "connectivity.h"
#include "coverage.h"
#include "dpif.h"
#include "dynamic-string.h"
#include "openflow/openflow.h"
#include "packets.h"
#include "poll-loop.h"
+#include "seq.h"
#include "shash.h"
#include "smap.h"
#include "sset.h"
atomic_read(&rc->ref_cnt, &ref_cnt);
if (!ref_cnt) {
hmap_remove(&netdev_classes, &rc->hmap_node);
+ atomic_destroy(&rc->ref_cnt);
free(rc);
error = 0;
} else {
int old_ref_cnt;
atomic_add(&rc->ref_cnt, 1, &old_ref_cnt);
+ seq_change(connectivity_seq_get());
} else {
free(netdev->name);
ovs_assert(list_is_empty(&netdev->saved_flags_list));
{
if (netdev->netdev_class->set_config) {
const struct smap no_args = SMAP_INITIALIZER(&no_args);
- return netdev->netdev_class->set_config(netdev,
- args ? args : &no_args);
+ int error;
+
+ error = netdev->netdev_class->set_config(netdev,
+ args ? args : &no_args);
+ if (error) {
+ VLOG_WARN("%s: could not set configuration (%s)",
+ netdev_get_name(netdev), ovs_strerror(error));
+ }
+ return error;
} else if (args && !smap_is_empty(args)) {
VLOG_WARN("%s: arguments provided to device that is not configurable",
netdev_get_name(netdev));
}
-
return 0;
}
: EOPNOTSUPP);
}
-/* Returns a sequence number which indicates changes in one of 'netdev''s
- * properties. The returned sequence will be nonzero so that callers have a
- * value which they may use as a reset when tracking 'netdev'.
- *
- * The returned sequence number will change whenever 'netdev''s flags,
- * features, ethernet address, or carrier changes. It may change for other
- * reasons as well, or no reason at all. */
-unsigned int
-netdev_change_seq(const struct netdev *netdev)
-{
- return netdev->netdev_class->change_seq(netdev);
-}
\f
/* Returns the class type of 'netdev'.
*