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:192.168.0.114 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::e2cb:4eff:fe1a:f6d5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 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) Interrupt:44
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 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
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: 18.104.22.168-NAPI 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 version: 22.214.171.124-NAPI 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.