X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-vport.c;h=165c1c66164c0440d7af2257c28b602cc15c548d;hb=5d386c0613024993566fb3bef13a1e33fa93e91c;hp=76aa148ccb597c7f63f652a0435f85541ef98311;hpb=863838160e892f625a050e0234ed638af26f106d;p=sliver-openvswitch.git diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 76aa148cc..165c1c661 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -25,6 +25,7 @@ #include #include "byte-order.h" +#include "connectivity.h" #include "daemon.h" #include "dirs.h" #include "dpif.h" @@ -35,6 +36,7 @@ #include "ofpbuf.h" #include "packets.h" #include "route-table.h" +#include "seq.h" #include "shash.h" #include "socket-util.h" #include "vlog.h" @@ -52,7 +54,6 @@ struct netdev_vport { /* Protects all members below. */ struct ovs_mutex mutex; - unsigned int change_seq; uint8_t etheraddr[ETH_ADDR_LEN]; struct netdev_stats stats; @@ -71,8 +72,6 @@ struct vport_class { static int netdev_vport_construct(struct netdev *); static int get_patch_config(const struct netdev *netdev, struct smap *args); static int get_tunnel_config(const struct netdev *, struct smap *args); -static void netdev_vport_poll_notify(struct netdev_vport *netdev) - OVS_REQUIRES(netdev->mutex); static bool is_vport_class(const struct netdev_class *class) @@ -108,6 +107,14 @@ netdev_vport_is_patch(const struct netdev *netdev) return class->get_config == get_patch_config; } +bool +netdev_vport_is_layer3(const struct netdev *dev) +{ + const char *type = netdev_get_type(dev); + + return (!strcmp("lisp", type)); +} + static bool netdev_vport_needs_dst_port(const struct netdev *dev) { @@ -171,8 +178,7 @@ netdev_vport_construct(struct netdev *netdev_) { struct netdev_vport *netdev = netdev_vport_cast(netdev_); - ovs_mutex_init(&netdev->mutex, PTHREAD_MUTEX_NORMAL); - netdev->change_seq = 1; + ovs_mutex_init(&netdev->mutex); eth_addr_random(netdev->etheraddr); route_table_register(); @@ -205,8 +211,8 @@ netdev_vport_set_etheraddr(struct netdev *netdev_, ovs_mutex_lock(&netdev->mutex); memcpy(netdev->etheraddr, mac, ETH_ADDR_LEN); - netdev_vport_poll_notify(netdev); ovs_mutex_unlock(&netdev->mutex); + seq_change(connectivity_seq_get()); return 0; } @@ -264,12 +270,6 @@ netdev_vport_update_flags(struct netdev *netdev OVS_UNUSED, return 0; } -static unsigned int -netdev_vport_change_seq(const struct netdev *netdev) -{ - return netdev_vport_cast(netdev)->change_seq; -} - static void netdev_vport_run(void) { @@ -282,17 +282,6 @@ netdev_vport_wait(void) route_table_wait(); } -/* Helper functions. */ - -static void -netdev_vport_poll_notify(struct netdev_vport *ndv) -{ - ndv->change_seq++; - if (!ndv->change_seq) { - ndv->change_seq++; - } -} - /* Code specific to tunnel types. */ static ovs_be64 @@ -495,7 +484,7 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args) ovs_mutex_lock(&dev->mutex); dev->tnl_cfg = tnl_cfg; - netdev_vport_poll_notify(dev); + seq_change(connectivity_seq_get()); ovs_mutex_unlock(&dev->mutex); return 0; @@ -603,7 +592,7 @@ netdev_vport_patch_peer(const struct netdev *netdev_) void netdev_vport_inc_rx(const struct netdev *netdev, - const struct dpif_flow_stats *stats) + const struct dpif_flow_stats *stats) { if (is_vport_class(netdev_get_class(netdev))) { struct netdev_vport *dev = netdev_vport_cast(netdev); @@ -669,7 +658,7 @@ set_patch_config(struct netdev *dev_, const struct smap *args) ovs_mutex_lock(&dev->mutex); free(dev->peer); dev->peer = xstrdup(peer); - netdev_vport_poll_notify(dev); + seq_change(connectivity_seq_get()); ovs_mutex_unlock(&dev->mutex); return 0; @@ -727,7 +716,9 @@ get_stats(const struct netdev *netdev, struct netdev_stats *stats) NULL, /* set_queue */ \ NULL, /* delete_queue */ \ NULL, /* get_queue_stats */ \ - NULL, /* dump_queues */ \ + NULL, /* queue_dump_start */ \ + NULL, /* queue_dump_next */ \ + NULL, /* queue_dump_done */ \ NULL, /* dump_queue_stats */ \ \ NULL, /* get_in4 */ \ @@ -740,8 +731,6 @@ get_stats(const struct netdev *netdev, struct netdev_stats *stats) \ netdev_vport_update_flags, \ \ - netdev_vport_change_seq, \ - \ NULL, /* rx_alloc */ \ NULL, /* rx_construct */ \ NULL, /* rx_destruct */ \