git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
netdev: Globally track port status changes
[sliver-openvswitch.git]
/
lib
/
netdev-bsd.c
diff --git
a/lib/netdev-bsd.c
b/lib/netdev-bsd.c
index
7c19483
..
442c384
100644
(file)
--- a/
lib/netdev-bsd.c
+++ b/
lib/netdev-bsd.c
@@
-47,6
+47,7
@@
#endif
#include "rtbsd.h"
#endif
#include "rtbsd.h"
+#include "connectivity.h"
#include "coverage.h"
#include "dynamic-string.h"
#include "fatal-signal.h"
#include "coverage.h"
#include "dynamic-string.h"
#include "fatal-signal.h"
@@
-55,8
+56,9
@@
#include "ovs-thread.h"
#include "packets.h"
#include "poll-loop.h"
#include "ovs-thread.h"
#include "packets.h"
#include "poll-loop.h"
-#include "s
ocket-util
.h"
+#include "s
eq
.h"
#include "shash.h"
#include "shash.h"
+#include "socket-util.h"
#include "svec.h"
#include "util.h"
#include "vlog.h"
#include "svec.h"
#include "util.h"
#include "vlog.h"
@@
-86,7
+88,6
@@
struct netdev_bsd {
struct ovs_mutex mutex;
unsigned int cache_valid;
struct ovs_mutex mutex;
unsigned int cache_valid;
- unsigned int change_seq;
int ifindex;
uint8_t etheraddr[ETH_ADDR_LEN];
int ifindex;
uint8_t etheraddr[ETH_ADDR_LEN];
@@
-197,15
+198,6
@@
netdev_bsd_wait(void)
rtbsd_notifier_wait();
}
rtbsd_notifier_wait();
}
-static void
-netdev_bsd_changed(struct netdev_bsd *dev)
-{
- dev->change_seq++;
- if (!dev->change_seq) {
- dev->change_seq++;
- }
-}
-
/* Invalidate cache in case of interface status change. */
static void
netdev_bsd_cache_cb(const struct rtbsd_change *change,
/* Invalidate cache in case of interface status change. */
static void
netdev_bsd_cache_cb(const struct rtbsd_change *change,
@@
-223,7
+215,7
@@
netdev_bsd_cache_cb(const struct rtbsd_change *change,
if (is_netdev_bsd_class(netdev_class)) {
dev = netdev_bsd_cast(base_dev);
dev->cache_valid = 0;
if (is_netdev_bsd_class(netdev_class)) {
dev = netdev_bsd_cast(base_dev);
dev->cache_valid = 0;
-
netdev_bsd_changed(dev
);
+
seq_change(connectivity_seq_get()
);
}
netdev_close(base_dev);
}
}
netdev_close(base_dev);
}
@@
-241,7
+233,7
@@
netdev_bsd_cache_cb(const struct rtbsd_change *change,
struct netdev *netdev = node->data;
dev = netdev_bsd_cast(netdev);
dev->cache_valid = 0;
struct netdev *netdev = node->data;
dev = netdev_bsd_cast(netdev);
dev->cache_valid = 0;
-
netdev_bsd_changed(dev
);
+
seq_change(connectivity_seq_get()
);
netdev_close(netdev);
}
shash_destroy(&device_shash);
netdev_close(netdev);
}
shash_destroy(&device_shash);
@@
-294,7
+286,6
@@
netdev_bsd_construct_system(struct netdev *netdev_)
}
ovs_mutex_init(&netdev->mutex);
}
ovs_mutex_init(&netdev->mutex);
- netdev->change_seq = 1;
netdev->tap_fd = -1;
netdev->kernel_name = xstrdup(netdev_->name);
netdev->tap_fd = -1;
netdev->kernel_name = xstrdup(netdev_->name);
@@
-329,7
+320,6
@@
netdev_bsd_construct_tap(struct netdev *netdev_)
* to retrieve the name of the tap device. */
ovs_mutex_init(&netdev->mutex);
netdev->tap_fd = open("/dev/tap", O_RDWR);
* to retrieve the name of the tap device. */
ovs_mutex_init(&netdev->mutex);
netdev->tap_fd = open("/dev/tap", O_RDWR);
- netdev->change_seq = 1;
if (netdev->tap_fd < 0) {
error = errno;
VLOG_WARN("opening \"/dev/tap\" failed: %s", ovs_strerror(error));
if (netdev->tap_fd < 0) {
error = errno;
VLOG_WARN("opening \"/dev/tap\" failed: %s", ovs_strerror(error));
@@
-506,9
+496,6
@@
netdev_bsd_rx_construct(struct netdev_rx *rx_)
ovs_mutex_lock(&netdev->mutex);
error = netdev_bsd_open_pcap(netdev_get_kernel_name(netdev_),
&rx->pcap_handle, &rx->fd);
ovs_mutex_lock(&netdev->mutex);
error = netdev_bsd_open_pcap(netdev_get_kernel_name(netdev_),
&rx->pcap_handle, &rx->fd);
- if (!error) {
- netdev_bsd_changed(netdev);
- }
ovs_mutex_unlock(&netdev->mutex);
}
ovs_mutex_unlock(&netdev->mutex);
}
@@
-702,8
+689,8
@@
netdev_bsd_send(struct netdev *netdev_, const void *data, size_t size)
}
}
} else if (retval != size) {
}
}
} else if (retval != size) {
- VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%
z
d bytes of "
- "%
zu
) on %s", retval, size, name);
+ VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%
"PRIuSIZE"
d bytes of "
+ "%
"PRIuSIZE"
) on %s", retval, size, name);
error = EMSGSIZE;
} else {
break;
error = EMSGSIZE;
} else {
break;
@@
-756,7
+743,7
@@
netdev_bsd_set_etheraddr(struct netdev *netdev_,
if (!error) {
netdev->cache_valid |= VALID_ETHERADDR;
memcpy(netdev->etheraddr, mac, ETH_ADDR_LEN);
if (!error) {
netdev->cache_valid |= VALID_ETHERADDR;
memcpy(netdev->etheraddr, mac, ETH_ADDR_LEN);
-
netdev_bsd_changed(netdev
);
+
seq_change(connectivity_seq_get()
);
}
}
ovs_mutex_unlock(&netdev->mutex);
}
}
ovs_mutex_unlock(&netdev->mutex);
@@
-1165,7
+1152,7
@@
netdev_bsd_set_in4(struct netdev *netdev_, struct in_addr addr,
netdev->netmask = mask;
}
}
netdev->netmask = mask;
}
}
-
netdev_bsd_changed(netdev
);
+
seq_change(connectivity_seq_get()
);
}
ovs_mutex_unlock(&netdev->mutex);
}
ovs_mutex_unlock(&netdev->mutex);
@@
-1428,6
+1415,9
@@
nd_to_iff_flags(enum netdev_flags nd)
iff |= IFF_PPROMISC;
#endif
}
iff |= IFF_PPROMISC;
#endif
}
+ if (nd & NETDEV_LOOPBACK) {
+ iff |= IFF_LOOPBACK;
+ }
return iff;
}
return iff;
}
@@
-1441,6
+1431,9
@@
iff_to_nd_flags(int iff)
if (iff & IFF_PROMISC) {
nd |= NETDEV_PROMISC;
}
if (iff & IFF_PROMISC) {
nd |= NETDEV_PROMISC;
}
+ if (iff & IFF_LOOPBACK) {
+ nd |= NETDEV_LOOPBACK;
+ }
return nd;
}
return nd;
}
@@
-1458,18
+1451,12
@@
netdev_bsd_update_flags(struct netdev *netdev_, enum netdev_flags off,
new_flags = (old_flags & ~nd_to_iff_flags(off)) | nd_to_iff_flags(on);
if (new_flags != old_flags) {
error = set_flags(netdev_get_kernel_name(netdev_), new_flags);
new_flags = (old_flags & ~nd_to_iff_flags(off)) | nd_to_iff_flags(on);
if (new_flags != old_flags) {
error = set_flags(netdev_get_kernel_name(netdev_), new_flags);
-
netdev_bsd_changed(netdev
);
+
seq_change(connectivity_seq_get()
);
}
}
return error;
}
}
}
return error;
}
-static unsigned int
-netdev_bsd_change_seq(const struct netdev *netdev)
-{
- return netdev_bsd_cast(netdev)->change_seq;
-}
-
const struct netdev_class netdev_bsd_class = {
"system",
const struct netdev_class netdev_bsd_class = {
"system",
@@
-1510,7
+1497,9
@@
const struct netdev_class netdev_bsd_class = {
NULL, /* set_queue */
NULL, /* delete_queue */
NULL, /* get_queue_stats */
NULL, /* set_queue */
NULL, /* delete_queue */
NULL, /* get_queue_stats */
- NULL, /* dump_queue */
+ NULL, /* queue_dump_start */
+ NULL, /* queue_dump_next */
+ NULL, /* queue_dump_done */
NULL, /* dump_queue_stats */
netdev_bsd_get_in4,
NULL, /* dump_queue_stats */
netdev_bsd_get_in4,
@@
-1523,8
+1512,6
@@
const struct netdev_class netdev_bsd_class = {
netdev_bsd_update_flags,
netdev_bsd_update_flags,
- netdev_bsd_change_seq,
-
netdev_bsd_rx_alloc,
netdev_bsd_rx_construct,
netdev_bsd_rx_destruct,
netdev_bsd_rx_alloc,
netdev_bsd_rx_construct,
netdev_bsd_rx_destruct,
@@
-1573,7
+1560,9
@@
const struct netdev_class netdev_tap_class = {
NULL, /* set_queue */
NULL, /* delete_queue */
NULL, /* get_queue_stats */
NULL, /* set_queue */
NULL, /* delete_queue */
NULL, /* get_queue_stats */
- NULL, /* dump_queue */
+ NULL, /* queue_dump_start */
+ NULL, /* queue_dump_next */
+ NULL, /* queue_dump_done */
NULL, /* dump_queue_stats */
netdev_bsd_get_in4,
NULL, /* dump_queue_stats */
netdev_bsd_get_in4,
@@
-1586,8
+1575,6
@@
const struct netdev_class netdev_tap_class = {
netdev_bsd_update_flags,
netdev_bsd_update_flags,
- netdev_bsd_change_seq,
-
netdev_bsd_rx_alloc,
netdev_bsd_rx_construct,
netdev_bsd_rx_destruct,
netdev_bsd_rx_alloc,
netdev_bsd_rx_construct,
netdev_bsd_rx_destruct,