[Bug 1820929] Re: netplan should consider adding more udev attribute for exact matching of failover 3-netdev interfaces
Guilherme G. Piccoli
1820929 at bugs.launchpad.net
Wed Aug 12 18:33:07 UTC 2020
Although the debdiff is hereby attached, 3 bugs have fixes carried on
such patch - the main work is done on LP ##1879980 (and the other LP
handled in this SRU is #1879987) .
** Tags added: sts
** Description changed:
- This bug is a follow-up to
+ [Impact]
- https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1815268
+ * At present, virtual machines utilizing net_failover network interface
+ configurations are incorrectly configured due to the reliance on the MAC
+ address to identify specific network interfaces. When net_failover is
+ utilized, multiple interfaces will bear the same MAC address (the
+ net_failover master itself, as well as the interfaces subordinate to
+ it), rendering the MAC address ineffective for unique identification of
+ the interface. This results in incorrect naming of network interfaces
+ from the "set-name" directive in the netplan configuration.
- after applying the 0001-net_failover-delay-taking-over-primary-device-
- to-acc.patch attached in that bug, the VF interface "eth0" is renamed to
- "rename4" instead of "ens4". Log is showing that attempt to rename
- "eth0" to "ens3" failed because of conflict with existing name, so
- that's why it ends up with rename4.
+ * The solution here is to use the interface name instead of the MAC
+ address when the interface is a net_failover master device. Logic is
+ added on initramfs-tools to check the device type and virtio flags to
+ apply this change only to net_failover master devices.
- vsbalakr at ubuntu-18:~$ uname -a
- Linux ubuntu-18 4.15.0-1009-oracle #11+lp1815268 SMP Tue Mar 12 15:20:15 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
- vsbalakr at ubuntu-18:~$ ip l
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ba:fb:9f:12:2f:02 brd ff:ff:ff:ff:ff:ff
- 3: ens3nsby: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ens3 state UP mode DEFAULT group default qlen 1000 link/ether ba:fb:9f:12:2f:02 brd ff:ff:ff:ff:ff:ff
- 4: rename4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master ens3 state UP mode DEFAULT group default qlen 1000 link/ether ba:fb:9f:12:2f:02 brd ff:ff:ff:ff:ff:ff
+ [Test Case]
- vsbalakr at ubuntu-18:~$ egrep -i '(rename4|busy)' /var/log/syslog
- ...
- Mar 18 11:01:52 ubuntu-18 NetworkManager[1294]: <info> [1552932112.9591] device (rename4): carrier: link connected
- Mar 18 11:01:52 ubuntu-18 NetworkManager[1294]: <info> [1552932112.9591] device (rename4): enslaved to non-master-type device ens3; ignoring
- Mar 18 11:01:53 ubuntu-18 systemd-udevd[2463]: error changing net interface name 'eth0' to 'ens3': Device or resource busy
- Mar 18 11:01:53 ubuntu-18 systemd-udevd[2463]: could not rename interface '4' from 'eth0' to 'ens3': Device or resource busy
+ * The change can be tested by configuring a virtual machine with a
+ virtio_net network device with the "failover=on" option to the "-device"
+ option to qemu, e.g.,
- Within VM there's netplan config as below:
+ -device virtio-net-
+ pci,netdev=hostnet0,id=net0,bus=pci.0,addr=0x3,mac=00:00:17:00:18:04,failover=on
- vsbalakr at ubuntu-18:~$ cat /etc/netplan/01-netcfg.yaml
- # This file describes the network interfaces available on your system
- # For more information, see netplan(5).
- network:
- version: 2
- renderer: networkd
- ethernets:
- ens3:
- dhcp4: yes
- gateway4: 10.211.8.1
- nameservers:
- addresses: [10.211.11.1,10.209.76.197]
+ * This will set the virtio device "standby" feature bit (bit 62,
+ counting from 0). This requires a version of qemu with support for this
+ feature.
- By running udevadm test, we can see the conflicting ens3 name comes from
- netplan's /run/udev/rules.d/99-netplan-ens3.rules
+ * When so configured, the netplan configuration generated by initramfs
+ will not contain a "macaddress:" match directive for the network
+ interface in question.
- vsbalakr at ubuntu-18:~$ cat /run/udev/rules.d/99-netplan-ens3.rules
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="ba:fb:9f:12:2f:02", NAME="ens3"
+ [Regression Potential]
- vsbalakr at ubuntu-18:/lib/udev/rules.d$ udevadm test --action="add" /sys/class/net/eth0
- calling: test
- version 237
- This program is for debugging only, it does not run any program
- specified by a RUN key. It may show incorrect results, because
- some values may be different, or not available at a simulation run.
-
- Load module index
- Parsed configuration file /lib/systemd/network/99-default.link
- Parsed configuration file /run/systemd/network/10-netplan-ens3.link
- Created link configuration context.
- Reading rules file: /lib/udev/rules.d/01-md-raid-creating.rules
- ..
- Reading rules file: /lib/udev/rules.d/99-vmware-scsi-udev.rules
- rules contain 393216 bytes tokens (32768 * 12 bytes), 38638 bytes strings
- 25317 strings (216160 bytes), 21957 de-duplicated (180883 bytes), 3361 trie nodes used
- RUN '/lib/open-iscsi/net-interface-handler start' /lib/udev/rules.d/70-iscsi-network-interface.rules:2
- IMPORT builtin 'net_id' /lib/udev/rules.d/75-net-description.rules:6
- IMPORT builtin 'hwdb' /lib/udev/rules.d/75-net-description.rules:12
- RUN 'ifupdown-hotplug' /lib/udev/rules.d/80-ifupdown.rules:5
- IMPORT builtin 'path_id' /lib/udev/rules.d/80-net-setup-link.rules:5
- IMPORT builtin 'net_setup_link' /lib/udev/rules.d/80-net-setup-link.rules:9
- Config file /lib/systemd/network/99-default.link applies to device eth0
- link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
- link_config: could not set ethtool features for eth0
- Could not set offload features of eth0: Operation not permitted
- NAME 'ens4' /lib/udev/rules.d/80-net-setup-link.rules:11
- NAME 'ens3' /run/udev/rules.d/99-netplan-ens3.rules:1
- RUN '/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/$name --prefix=/net/ipv4/neigh/$name --prefix=/net/ipv6/conf/$name --prefix=/net/ipv6/neigh/$name' /lib/udev/rules.d/99-systemd.rules:60
- error changing net interface name 'eth0' to 'ens3': Operation not permitted
- could not rename interface '4' from 'eth0' to 'ens3': Operation not permitted
- ACTION=add
- DEVPATH=/devices/pci0000:00/0000:00:04.0/net/eth0
- ID_BUS=pci
- ID_MM_CANDIDATE=1
- ID_MODEL_FROM_DATABASE=Ethernet Connection X552 Virtual Function
- ID_MODEL_ID=0x15a8
- ID_NET_DRIVER=ixgbevf
- ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
- ID_NET_NAME=ens4
- ID_NET_NAME_MAC=enxbafb9f122f02
- ID_NET_NAME_PATH=enp0s4
- ID_NET_NAME_SLOT=ens4
- ID_PATH=pci-0000:00:04.0
- ID_PATH_TAG=pci-0000_00_04_0
- ID_PCI_CLASS_FROM_DATABASE=Network controller
- ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
- ID_VENDOR_FROM_DATABASE=Intel Corporation
- ID_VENDOR_ID=0x8086
- IFINDEX=4
- INTERFACE=eth0
- SUBSYSTEM=net
- SYSTEMD_ALIAS=/sys/subsystem/net/devices/ens3
- TAGS=:systemd:
- USEC_INITIALIZED=202183958
- run: '/lib/open-iscsi/net-interface-handler start'
- run: 'ifupdown-hotplug'
- run: '/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/ens3 --prefix=/net/ipv4/neigh/ens3 --prefix=/net/ipv6/conf/ens3 --prefix=/net/ipv6/neigh/ens3'
- Unload module index
- Unloaded link configuration context.
-
- So with regard to failover 3-netdev model, MAC address is not sufficient
- to serve as the key to identify individual interface. Unfortunately
- driver attribute is not sufficient either, the failover master and
- standy slave share the same driver under virtio_net. There should be
- other new attribute to introduce in order to correctly identify the
- interface belonging to 3-netdev.
+ * Erroneous identification of a network interface as a net_failover
+ master device could lead to omission of a macaddress directive, causing
+ interfaces to be incorrectly named.
** Patch added: "bionic_initramfs_lp1879980_V2.debdiff"
https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/1820929/+attachment/5401088/+files/bionic_initramfs_lp1879980_V2.debdiff
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to initramfs-tools in Ubuntu.
https://bugs.launchpad.net/bugs/1820929
Title:
netplan should consider adding more udev attribute for exact matching
of failover 3-netdev interfaces
Status in netplan:
Triaged
Status in initramfs-tools package in Ubuntu:
New
Status in netplan.io package in Ubuntu:
Triaged
Status in systemd package in Ubuntu:
Incomplete
Status in initramfs-tools source package in Bionic:
In Progress
Status in netplan.io source package in Bionic:
New
Status in systemd source package in Bionic:
New
Bug description:
[Impact]
* At present, virtual machines utilizing net_failover network
interface configurations are incorrectly configured due to the
reliance on the MAC address to identify specific network interfaces.
When net_failover is utilized, multiple interfaces will bear the same
MAC address (the net_failover master itself, as well as the interfaces
subordinate to it), rendering the MAC address ineffective for unique
identification of the interface. This results in incorrect naming of
network interfaces from the "set-name" directive in the netplan
configuration.
* The solution here is to use the interface name instead of the MAC
address when the interface is a net_failover master device. Logic is
added on initramfs-tools to check the device type and virtio flags to
apply this change only to net_failover master devices.
[Test Case]
* The change can be tested by configuring a virtual machine with a
virtio_net network device with the "failover=on" option to the
"-device" option to qemu, e.g.,
-device virtio-net-
pci,netdev=hostnet0,id=net0,bus=pci.0,addr=0x3,mac=00:00:17:00:18:04,failover=on
* This will set the virtio device "standby" feature bit (bit 62,
counting from 0). This requires a version of qemu with support for
this feature.
* When so configured, the netplan configuration generated by initramfs
will not contain a "macaddress:" match directive for the network
interface in question.
[Regression Potential]
* Erroneous identification of a network interface as a net_failover
master device could lead to omission of a macaddress directive,
causing interfaces to be incorrectly named.
To manage notifications about this bug go to:
https://bugs.launchpad.net/netplan/+bug/1820929/+subscriptions
More information about the foundations-bugs
mailing list