Fedora 15 or 16: New NIC Names

Recently I installed Fedora 15 on a standalone system to do some testing. This system has ASUS motherboard with a single integrated Atheros 8131 Gigabit Ethernet NIC.

Here is the relevant output from ipconfig -a:

p33p1     Link encap:Ethernet  HWaddr E0:CB:4E:1A:F6:D5
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::e2cb:4eff:fe1a:f6d5/64 Scope:Link
          RX packets:62680 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37533 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000
          RX bytes:94004479 (89.6 MiB)  TX bytes:2446588 (2.3 MiB)

I expected to see eth0; instead the NIC was named p33p1.

The lsmod utility showed that the correct kernel module, i.e. atl1c.ko, was loaded. Using lspci -n showed the PCI vendor and device numbers to be 1969:1063.

The change in device naming occured as a result of Matt Domsch’s Fedora 15 Consistent Network Device Naming project. The goal of this project was to change the network device naming scheme from ethX to a physical location-based name for easy identification and use. Ethernet NICs embedded on the motherboard will be named em[1234] rather than ethX. PCI add-in card NICs will be named p<slot>p<port>. Linux guests running under virtualization platforms such as KVM, Xen, VMware Workstation or ESX, or Microsoft Hyper-V will not have their devices renamed.

The mechanism for doing the device name remapping is a combination of udev rules and biosdevname which is a udev helper utility developed by Dell and released under GPL. It is intended to provide a consistent naming mechanism for network devices based on their physical location as suggested by the system BIOS. Specifically, the system BIOS indicates the order of onboard network devices to the OS via SMBIOS type 41 records. The system BIOS also provides biosdevname utility makes use of the SMBIOS type 41 records to suggest names for the onboard network devices and the type 9 records to suggest new names for PCI add-in adapters. Biosdevname falls back on the PCI IRQ Routing Table in the absence of the above mentioned information.

Note that existing installations upgraded to Fedora 15 or Fedora 16 will not see a change in device names unless /etc/udev/rules.d/70-persistent-net.rules is deleted and the HWADDR lines are removed from all /etc/sysconfig/network-scripts/ifcfg-* files, and those files are renamed to use the new device names.

So how did the NIC end up being named p33p1? According to biosdevname, this means that the NIC is located at PCI slot 33, port 1.

# biosdevname -d
BIOS device: p33p1
Kernel name: p33p1
Permanent MAC: E0:CB:4E:1A:F6:D5
Assigned MAC : E0:CB:4E:1A:F6:D5
Driver: atl1c
Driver version:
Firmware version: N/A
Bus Info: 0000:01:00.0
PCI name      : 0000:01:00.0
PCI Slot      : 33
Index in slot: 1

# ethtool -i p33p1
driver: atl1c
firmware-version: N/A
bus-info: 0000:01:00.0

It turns out that this particular motherboard implements SMBIOS 2.5 which supports type 9 tables but not type 41 tables (SMBIOS 2.6 supports both tables) so I am not sure how bioddevname is coming up with a slot number of 33. I plan to investigate further if time permits.

By the way, this behaviour can be turned off by adding biosdevname=0 to the kernel command line.

Comments are closed.