From: linhuang <linhu...@ruijie.com.cn> Userspace tunnel doesn't have a valid device in the kernel. So get_ifindex() function (ioctl) always get error during adding a port, deleting a port or updating a port status.
The info log is "2021-08-29T09:17:39.830Z|00059|netdev_linux|INFO|ioctl(SIOCGIFINDEX) on vxlan_sys_4789 device failed: No such device" If there are a lot of userspace tunnel ports on a bridge, the iface_refresh_netdev_status() function will spend a lot of time. So ignore userspace tunnel port ioctl(SIOCGIFINDEX) operation, just return -ENODEV. Signed-off-by: Lin Huang <linhu...@ruijie.com.cn> Test-by: Mike Pattrick <m...@redhat.com> Reviewed-by: Aaron Conole <acon...@redhat.com> Reviewed-by: Ilya Maximets <i.maxim...@ovn.org> --- lib/netdev-vport.c | 4 +++- vswitchd/bridge.c | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 499c029..f0ff02b 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -1151,8 +1151,10 @@ netdev_vport_get_ifindex(const struct netdev *netdev_) { char buf[NETDEV_VPORT_NAME_BUFSIZE]; const char *name = netdev_vport_get_dpif_port(netdev_, buf, sizeof(buf)); + const char *dpif_type = netdev_get_dpif_type(netdev_); - return linux_get_ifindex(name); + return (dpif_type && !strcmp(dpif_type, "system") + ? linux_get_ifindex(name) : -ENODEV); } #define NETDEV_VPORT_GET_IFINDEX netdev_vport_get_ifindex diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 5223aa8..513ef7e 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -2052,6 +2052,8 @@ iface_do_create(const struct bridge *br, goto error; } + netdev_set_dpif_type(netdev, br->ofproto->type); + error = iface_set_netdev_config(iface_cfg, netdev, errp); if (error) { goto error; -- 1.8.3.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev