(!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)
{
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);
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);
+ }
}
}