X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-vport.c;h=3558f43a92ca6af2a5a3df1cadf6470e52dbb398;hb=3efb60637b9a6741e7e5b7f04e4daa4d2464d8b3;hp=699ed71e37238bf31e236dec18451916036042ed;hpb=b5d57fc87925cb3c029de19d0a94de5ca07ae28e;p=sliver-openvswitch.git diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 699ed71e3..3558f43a9 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -114,6 +114,12 @@ netdev_vport_needs_dst_port(const struct netdev *dev) (!strcmp("vxlan", type) || !strcmp("lisp", type))); } +const char * +netdev_vport_class_get_dpif_port(const struct netdev_class *class) +{ + return is_vport_class(class) ? vport_class_cast(class)->dpif_port : NULL; +} + const char * netdev_vport_get_dpif_port(const struct netdev *netdev) { @@ -136,9 +142,7 @@ netdev_vport_get_dpif_port(const struct netdev *netdev) return dpif_port_combined; } else { const struct netdev_class *class = netdev_get_class(netdev); - dpif_port = (is_vport_class(class) - ? vport_class_cast(class)->dpif_port - : NULL); + dpif_port = netdev_vport_class_get_dpif_port(class); } return dpif_port ? dpif_port : netdev_get_name(netdev); @@ -192,7 +196,7 @@ netdev_vport_get_etheraddr(const struct netdev *netdev, static int tunnel_get_status(const struct netdev *netdev, struct smap *smap) { - static char iface[IFNAMSIZ]; + char iface[IFNAMSIZ]; ovs_be32 route; route = netdev_vport_cast(netdev)->tnl_cfg.ip_dst; @@ -681,11 +685,15 @@ netdev_vport_tunnel_register(void) TUNNEL_CLASS("vxlan", "vxlan_system"), TUNNEL_CLASS("lisp", "lisp_system") }; + static bool inited; int i; - for (i = 0; i < ARRAY_SIZE(vport_classes); i++) { - netdev_register_provider(&vport_classes[i].netdev_class); + if (!inited) { + inited = true; + for (i = 0; i < ARRAY_SIZE(vport_classes); i++) { + netdev_register_provider(&vport_classes[i].netdev_class); + } } }