Predictable network interface names broken in 4.13.13-6-pve (4.13.13-41)

Denis Kulikov

Member
Feb 28, 2018
26
2
23
42
Hi guys !

I had a 2 node cluster with 4.13.13-6-pve (4.13.13-41) and 4.13.13-5-pve (4.13.13-36).
Hardware is - HP DL360G7 with Broadcom NetXtreme II 4 ports integrated network card.
After upgrade one node from 4.13.13-36 to 4.13.13-41 all ethernet interfaces names changed from enp3s0f0 to eth0, enp3s0f1 to eth1, etc.

Packages recently updated:
Code:
Upgrade: libpve-access-control:amd64 (5.0-7, 5.0-8), linux-libc-dev:amd64 (4.9.65-3+deb9u2, 4.9.82-1+deb9u2), cpp-6:amd64 (6.3.0-18, 6.3.0-18+deb9u1), pve-qemu-kvm:amd64 (2.9.1-6, 2.9.1-9), pve-ha-manager:amd64 (2.0-4, 2.0-5), zfs-initramfs:amd64 (0.7.4-pve2~bpo9, 0.7.6-pve1~bpo9), pve-container:amd64 (2.0-18, 2.0-19), libquadmath0:amd64 (6.3.0-18, 6.3.0-18+deb9u1), gcc-6-base:amd64 (6.3.0-18, 6.3.0-18+deb9u1), pve-cluster:amd64 (5.0-19, 5.0-20), libgcc1:amd64 (1:6.3.0-18, 1:6.3.0-18+deb9u1), zfsutils-linux:amd64 (0.7.4-pve2~bpo9, 0.7.6-pve1~bpo9), lib32gcc1:amd64 (1:6.3.0-18, 1:6.3.0-18+deb9u1), spl:amd64 (0.7.3-pve1~bpo9, 0.7.6-pve1~bpo9), libgfortran3:amd64 (6.3.0-18, 6.3.0-18+deb9u1), libzfs2linux:amd64 (0.7.4-pve2~bpo9, 0.7.6-pve1~bpo9), libpve-common-perl:amd64 (5.0-25, 5.0-28), qemu-server:amd64 (5.0-20, 5.0-22), libzpool2linux:amd64 (0.7.4-pve2~bpo9, 0.7.6-pve1~bpo9), libnvpair1linux:amd64 (0.7.4-pve2~bpo9, 0.7.6-pve1~bpo9), libuutil1linux:amd64 (0.7.4-pve2~bpo9, 0.7.6-pve1~bpo9), libstdc++6:amd64 (6.3.0-18, 6.3.0-18+deb9u1), lxcfs:amd64 (2.0.8-1, 2.0.8-2)

Install: proxmox-widget-toolkit:amd64 (1.0-11, automatic), pve-kernel-4.13.13-6-pve:amd64 (4.13.13-41, automatic), pve-i18n:amd64 (1.0-4, automatic)
Upgrade: pve-manager:amd64 (5.1-43, 5.1-46), proxmox-ve:amd64 (5.1-38, 5.1-41)

Version

Code:
Linux pve2 4.13.13-6-pve #1 SMP PVE 4.13.13-41 (Wed, 21 Feb 2018 10:07:54 +0100) x86_64 GNU/Linux

# pveversion
pve-manager/5.1-46/ae8241d4 (running kernel: 4.13.13-6-pve)

Dmesg

Code:
# dmesg | grep Broad
[    1.222632] bnx2 0000:03:00.0 eth0: Broadcom NetXtreme II BCM5709 1000Base-T (C0) PCI Express found at mem f4000000, IRQ 24, node addr 68:b5:99:b7:c3:84
[    1.223229] bnx2 0000:03:00.1 eth1: Broadcom NetXtreme II BCM5709 1000Base-T (C0) PCI Express found at mem f2000000, IRQ 25, node addr 68:b5:99:b7:c3:86
[    1.223811] bnx2 0000:04:00.0 eth2: Broadcom NetXtreme II BCM5709 1000Base-T (C0) PCI Express found at mem f8000000, IRQ 26, node addr 68:b5:99:b7:04:88
[    1.224496] bnx2 0000:04:00.1 eth3: Broadcom NetXtreme II BCM5709 1000Base-T (C0) PCI Express found at mem f6000000, IRQ 27, node addr 68:b5:99:b7:04:8a
 
Last edited:
Did you do any bios update or changes to udev rules?

Code:
udevadm info /sys/class/net/enp5s0
The above command gives you info on how udev sees the device and what naming it knows.
 
  • Like
Reactions: Denis Kulikov
Thanks for answer.

BIOS was not updated for more than 1 year and udev rules was not edited by hand.

On node with new kernel:
Code:
# udevadm info /sys/class/net/eth0
P: /devices/pci0000:00/0000:00:07.0/0000:03:00.0/net/eth0
E: DEVPATH=/devices/pci0000:00/0000:00:07.0/0000:03:00.0/net/eth0
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=NetXtreme II BCM5709 Gigabit Ethernet (NC382i Integrated Multi-port PCI Express Gigabit Server Adapter)
E: ID_MODEL_ID=0x1639
E: ID_NET_DRIVER=bnx2
E: ID_NET_LINK_FILE=/etc/systemd/network/99-default.link
E: ID_NET_NAME_MAC=enx68b599b7c384
E: ID_NET_NAME_PATH=enp3s0f0
E: ID_OUI_FROM_DATABASE=Hewlett Packard
E: ID_PATH=pci-0000:03:00.0
E: ID_PATH_TAG=pci-0000_03_00_0
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Broadcom Limited
E: ID_VENDOR_ID=0x14e4
E: IFINDEX=2
E: INTERFACE=eth0
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/eth0
E: TAGS=:systemd:
E: USEC_INITIALIZED=1245666

# udevadm info /sys/class/net/enp3s0f0
Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.

On node with old kernel:

Code:
# udevadm info /sys/class/net/eth0
Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.
# udevadm info /sys/class/net/enp3s0f0
P: /devices/pci0000:00/0000:00:07.0/0000:03:00.0/net/enp3s0f0
E: DEVPATH=/devices/pci0000:00/0000:00:07.0/0000:03:00.0/net/enp3s0f0
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=NetXtreme II BCM5709 Gigabit Ethernet (NC382i Integrated Multi-port PCI Express Gigabit Server Adapter)
E: ID_MODEL_ID=0x1639
E: ID_NET_DRIVER=bnx2
E: ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
E: ID_NET_NAME_MAC=enx78e3b51402dc
E: ID_NET_NAME_PATH=enp3s0f0
E: ID_OUI_FROM_DATABASE=Hewlett Packard
E: ID_PATH=pci-0000:03:00.0
E: ID_PATH_TAG=pci-0000_03_00_0
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Broadcom Limited
E: ID_VENDOR_ID=0x14e4
E: IFINDEX=2
E: INTERFACE=enp3s0f0
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp3s0f0
E: TAGS=:systemd:
E: USEC_INITIALIZED=1388254

/etc/systemd/network/ is empty on all systems (except):
# more 99-default.link
[Link]
MACAddressPolicy=none

/etc/udev/rules.d is empty on all systems
 
  • Like
Reactions: Denis Kulikov
as far as i know, the predictable network interfaces can only be enabled / disabled with kernel boot options. either with
GRUB_CMDLINE_LINUX_DEFAULT or GRUB_CMDLINE_LINUX option in the grub config

can you share the content of /etc/default/grub file?
 
Alwin - many thanks, i will read docs about changes in udev (and systemd) and reload-rules after that.

engin - you are right , content of /etc/default/grub here:

#cat grub

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Proxmox Virtual Environment"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="root=ZFS=rpool/ROOT/pve-1 boot=zfs"

# Disable os-prober, it might add menu entries for each guest
GRUB_DISABLE_OS_PROBER=true

and no options net.ifnames=0 biosdevname=0 is defined on both nodes.
and no significant changes in /boot/config... :
Code:
# diff config-4.13.13-5-pve config-4.13.13-6-pve
3c3
< # Linux/x86 4.13.13-5-pve Kernel Configuration
---
> # Linux/x86 4.13.13-6-pve Kernel Configuration
453a454
> CONFIG_RETPOLINE=y
1942a1944
> CONFIG_GENERIC_CPU_VULNERABILITIES=y

Also i`m was find an interesting thing:

Code:
# udevadm info -a /sys/class/net/eth0 | grep name_assign_type

On old kernel node:
# udevadm info -a /sys/class/net/enp3s0f0 | grep name_assign_type
    ATTR{name_assign_type}=="4"

This attribute (per https://lkml.org/lkml/2014/7/10/88):

+#define NET_NAME_RENAMED 4 /* renamed by user-space */

And therefore it is necessary (for me) to get a grasp of the udev and systemd.
 
Last edited:
Alwin, engin - Many thanks for answers and for point me to right direction (udevadm test).

Problem was not in kernel, problem was in udevd configuration (that applied by systemd).

Someone (package or user - i will investigate) create /etc/systemd/network/more 99-default.link:
Code:
[Link]
MACAddressPolicy=none

That overrides system wide /lib/systemd/network/99-default.link
Code:
[Link]
NamePolicy=kernel database onboard slot path
MACAddressPolicy=persistent

That renames ethX to enp...
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!