
On Tue, Nov 17, 2020 at 02:29:27PM +0100, Michal Privoznik wrote:
On 11/17/20 1:51 PM, Daniel P. Berrangé wrote:
On Tue, Nov 17, 2020 at 01:29:47PM +0100, Michal Privoznik wrote:
In v6.3.0-rc1~67 I've made a switch: instead of listening on udev events the nodedev driver started listening for kernel events. This was because when a device changes its name (e.g. NICs) we will get "move" event with DEVPATH_OLD property set, which we can then use to remove the old device and thus keep our internal list up to date. The switch to "kernel" source was made because if the old NICs naming (eth0, eth1, ...) is enabled (e.g. via net.ifnames=0 on the kernel cmd line) then udev overwrites the property with the new name making our internal list go out of sync. Interestingly, when the od NICs naming is not enabled then the DEVPATH_OLD contains the correct value.
I don't see any difference in properties regardless of net.ifnames is 0 or 1. In both cases, there is DEVPATH + DEVPAT_OLD, and INTERFACE has the new NIC name. Can you actually reproduce the original problem with net.ifnames=0 ? If so, which distro ?
Have you tried renaming back and forth? for instance:
# ip link set tunl0 name tunl1 # ip link set tunl1 name tunl0
The "kernel" source yields:
KERNEL[778387.296879] move /devices/virtual/net/tunl1 (net) ACTION=move DEVPATH=/devices/virtual/net/tunl1 DEVPATH_OLD=/devices/virtual/net/tunl0 IFINDEX=5 INTERFACE=tunl1 SEQNUM=20701 SUBSYSTEM=net
KERNEL[778400.944769] move /devices/virtual/net/tunl0 (net) ACTION=move DEVPATH=/devices/virtual/net/tunl0 DEVPATH_OLD=/devices/virtual/net/tunl1 IFINDEX=5 INTERFACE=tunl0 SEQNUM=20702 SUBSYSTEM=net
But "udev" gets:
UDEV [778387.297247] move /devices/virtual/net/tunl1 (net) ACTION=move DEVPATH=/devices/virtual/net/tunl1 DEVPATH_OLD=/devices/virtual/net/tunl0 IFINDEX=5 INTERFACE=tunl1 SEQNUM=20701 SUBSYSTEM=net USEC_INITIALIZED=5901449841 net.ifnames=0
UDEV [778400.945195] move /devices/virtual/net/tunl1 (net) ACTION=move DEVPATH=/devices/virtual/net/tunl1 DEVPATH_OLD=/devices/virtual/net/tunl1 IFINDEX=5 INTERFACE=tunl1 SEQNUM=20702 SUBSYSTEM=net USEC_INITIALIZED=5901449841 net.ifnames=0
In both cases the first rename (tunl0 -> tunl1) gets correct DEVPATH_OLD, but the second rename is problematic (tunl1 -> tunl0) and only "kernel" gets it right.
Hmm, this simply smells like a bug we should report to udev. It makes no sense that the event is correct for the first rename, and then wrong for the subsequent rename. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|