Discussion:
[systemd-devel] udev failing to assign consistent biosdevnames to my ethernet interfaces
David Anderson
2014-01-27 04:18:20 UTC
Permalink
This is a continuation of a discussion I had on #systemd. I have a server
that has two onboard ethernet chipsets, and a fresh Arch linux install
(systemd/udevd v208). On this system, consistent interface naming fails,
and I end up with eno1 and eth1 after bootup.

The full boot log is at http://pastebin.com/raw.php?i=KR1YqHYp , but the
apparently relevant part is:


Jan 26 19:10:38 ironman kernel: e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000
Network Connection
...
Jan 26 19:10:38 ironman kernel: e1000e 0000:02:00.0 eth1: Intel(R) PRO/1000
Network Connection
...
*Jan 26 19:10:38 ironman systemd-udevd[153]: error changing net interface
name eth1 to eno1: File exists*
Jan 26 19:10:38 ironman systemd[1]: Found device 82574L Gigabit Network
Connection.
*Jan 26 19:10:38 ironman systemd-udevd[149]: renamed network interface eth0
to eno1*
Andrey Borzenkov
2014-01-27 05:18:25 UTC
Permalink
В Mon, 27 Jan 2014 04:18:20 +0000
Post by David Anderson
This is a continuation of a discussion I had on #systemd. I have a server
that has two onboard ethernet chipsets, and a fresh Arch linux install
(systemd/udevd v208). On this system, consistent interface naming fails,
and I end up with eno1 and eth1 after bootup.
The full boot log is at http://pastebin.com/raw.php?i=KR1YqHYp , but the
Jan 26 19:10:38 ironman kernel: e1000e 0000:00:19.0 eth0: Intel(R) PRO/1000
Network Connection
...
Jan 26 19:10:38 ironman kernel: e1000e 0000:02:00.0 eth1: Intel(R) PRO/1000
Network Connection
...
*Jan 26 19:10:38 ironman systemd-udevd[153]: error changing net interface
name eth1 to eno1: File exists*
Jan 26 19:10:38 ironman systemd[1]: Found device 82574L Gigabit Network
Connection.
*Jan 26 19:10:38 ironman systemd-udevd[149]: renamed network interface eth0
to eno1*
David Anderson
2014-01-27 05:39:58 UTC
Permalink
В Mon, 27 Jan 2014 04:18:20 +0000
Post by David Anderson
This is a continuation of a discussion I had on #systemd. I have a server
that has two onboard ethernet chipsets, and a fresh Arch linux install
(systemd/udevd v208). On this system, consistent interface naming fails,
and I end up with eno1 and eth1 after bootup.
The full boot log is at http://pastebin.com/raw.php?i=KR1YqHYp , but the
Jan 26 19:10:38 ironman kernel: e1000e 0000:00:19.0 eth0: Intel(R)
PRO/1000
Post by David Anderson
Network Connection
...
Jan 26 19:10:38 ironman kernel: e1000e 0000:02:00.0 eth1: Intel(R)
PRO/1000
Post by David Anderson
Network Connection
...
*Jan 26 19:10:38 ironman systemd-udevd[153]: error changing net interface
name eth1 to eno1: File exists*
Jan 26 19:10:38 ironman systemd[1]: Found device 82574L Gigabit Network
Connection.
*Jan 26 19:10:38 ironman systemd-udevd[149]: renamed network interface
eth0
Post by David Anderson
to eno1*
Andrey Borzenkov
2014-01-27 12:15:27 UTC
Permalink
В Mon, 27 Jan 2014 05:39:58 +0000
Post by Andrey Borzenkov
В Mon, 27 Jan 2014 04:18:20 +0000
Post by David Anderson
This is a continuation of a discussion I had on #systemd. I have a server
that has two onboard ethernet chipsets, and a fresh Arch linux install
(systemd/udevd v208). On this system, consistent interface naming fails,
and I end up with eno1 and eth1 after bootup.
The full boot log is at http://pastebin.com/raw.php?i=KR1YqHYp , but the
Jan 26 19:10:38 ironman kernel: e1000e 0000:00:19.0 eth0: Intel(R)
PRO/1000
Post by David Anderson
Network Connection
...
Jan 26 19:10:38 ironman kernel: e1000e 0000:02:00.0 eth1: Intel(R)
PRO/1000
Post by David Anderson
Network Connection
...
*Jan 26 19:10:38 ironman systemd-udevd[153]: error changing net interface
name eth1 to eno1: File exists*
Jan 26 19:10:38 ironman systemd[1]: Found device 82574L Gigabit Network
Connection.
*Jan 26 19:10:38 ironman systemd-udevd[149]: renamed network interface
eth0
Post by David Anderson
to eno1*
Kay Sievers
2014-01-27 12:26:26 UTC
Permalink
You have two devices of type Ethernet with the same Instance values.
Regardless, should udev be capable of handling this gracefully?
If it is indeed a firmware bug, there's nothing obvious for udev to do. A
suggestion on IRC was to disambiguate by bus/device ID in such cases (lowest
bus:device gets eno1, next gets eno2, etc.).
Udev should not operate in the firmware namespace, and just allocate
the eno1 name here. It's the firmware that "owns" these names, not
userspace.
I don't know if this is
desirable, or even if udev can do this since it would require a second pass
over the affected devices with a global view of all such devices.
Devices are independent and should not depend on each other, we cannot
really depend on the state of another, otherwise unrelated, device.
In any case, I ended up writing my own rules that correctly set up eno1/eno2
based on the port #s on the board. Slightly annoying, but short of bugging
Intel for a firmware update, not much else to do.
Yeah, that's the only real option for now.

The only thing we could do is falling back to the default PCI
geography name on error; but even then, it would not be predictable
which of the devices with the conflicting firmware names will win at
bootup.

Kay
Thomas Bächler
2014-01-27 12:25:00 UTC
Permalink
Post by David Anderson
Jan 26 19:10:38 ironman kernel: e1000e 0000:00:19.0 eth0: Intel(R)
PRO/1000 Network Connection
...
Jan 26 19:10:38 ironman kernel: e1000e 0000:02:00.0 eth1: Intel(R)
PRO/1000 Network Connection
...
*Jan 26 19:10:38 ironman systemd-udevd[153]: error changing net
interface name eth1 to eno1: File exists*
Jan 26 19:10:38 ironman systemd[1]: Found device 82574L Gigabit Network
Connection.
*Jan 26 19:10:38 ironman systemd-udevd[149]: renamed network interface
eth0 to eno1*
FWIW, you can copy /usr/lib/udev/rules.d/80-net-name-slot.rules to
/etc/udev/rules.d/ and comment out line 10:

# NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
Tom Gundersen
2014-01-27 12:27:44 UTC
Permalink
Post by Thomas Bächler
Post by David Anderson
Jan 26 19:10:38 ironman kernel: e1000e 0000:00:19.0 eth0: Intel(R)
PRO/1000 Network Connection
...
Jan 26 19:10:38 ironman kernel: e1000e 0000:02:00.0 eth1: Intel(R)
PRO/1000 Network Connection
...
*Jan 26 19:10:38 ironman systemd-udevd[153]: error changing net
interface name eth1 to eno1: File exists*
Jan 26 19:10:38 ironman systemd[1]: Found device 82574L Gigabit Network
Connection.
*Jan 26 19:10:38 ironman systemd-udevd[149]: renamed network interface
eth0 to eno1*
FWIW, you can copy /usr/lib/udev/rules.d/80-net-name-slot.rules to
# NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}"
This is probably the best thing to do (at least until we can figure
out something better), it will name your nics according to
ID_NET_NAME_PATH instead, which is not as pretty, but won't suffer
from the same issue.

-t

Loading...