When I run ifconfig -a, I only get lo and enp0s10 interfaces, not the classical eth0

What does enp0s10 mean? Why is there no eth0?

  • 5
    ifconfig is deprecated. Think about moving to ip from iproute2 soon. – solsTiCe Jun 13 '15 at 8:21
  • 1
    As the answer says it's a change in systemd. To get your eth0 back use the kernel option net.ifnames=0 biosdevname=0 (see this thread). Using ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rule in below answer didn't work in Debian 10 (Buster) – MrCalvin Jun 2 '19 at 10:22

That's a change in how now udevd assigns names to ethernet devices. Now your devices use the "Predictable Interface Names", which are based on (and quoting the sources):

  1. Names incorporating Firmware/BIOS provided index numbers for on-board devices (example: eno1)
  2. Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example: ens1)
  3. Names incorporating physical/geographical location of the connector of the hardware (example: enp2s0)
  4. Names incorporating the interfaces's MAC address (example: enx78e7d1ea46da)
  5. Classic, unpredictable kernel-native ethX naming (example: eth0)

The why's this changed is documented in the systemd freedesktop.org page, along with the method to disable this:

ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

or if you use older versions:

ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules
|improve this answer|||||
  • 7
    Following the freedesktop,org link, the main point is: The classic naming scheme for network interfaces applied by the kernel is to simply assign names beginning with "eth" to all interfaces as they are probed by the drivers. As the driver probing is generally not predictable for modern technology this means that as soon as multiple network interfaces are available the assignment of the names is generally not fixed anymore and it might very well happen that "eth0" on one boot ends up being "eth1" on the next. This can have serious security implications... – lepe Oct 17 '16 at 2:43

Answer on "What does enp0s10 means?" question:

| | |
v | |
en| |   --> ethernet
  v |
  p0|   --> bus number (0)
    s10 --> slot number (10)

Source: udev-builtin-net_id.c on GitHub

|improve this answer|||||
  • 9
    Came looking for this. – ffledgling Mar 7 '17 at 8:38
  • 6
    Since there is no ...fN part at the end of the NIC name, we can deduce that the function number is 0. After translating the numbers to hexadecimal (10 = "a" in hex), we know that enp0s10 means PCI device ID 00:0a.0. – telcoM Apr 13 '19 at 6:13

As mentioned above, enp0s10 refers to ethernet (en), prefix 0 (p0), slot 10 (s10). The bus number, device number, and function number are pulled from Bus Device Function (BDF) for PCI devices to create the prefix, slot, and function portions of the Predictable Network Interface Name.

Since function is 0, the f0 portion is omitted. I changed the prefix from p0 to p4 for clarity in this example.

Expanding on the other answer posted by 'DIG mbl':

enp4s10f0                        pci 0000:04:0a.0
| | |  |                                |  |  | |
| | |  |                   domain <- 0000  |  | |
| | |  |                                   |  | |
en| |  |  --> ethernet                     |  | |
  | |  |                                   |  | |
  p4|  |  --> prefix/bus number (4)  <--  04  | |
    |  |                                      | |
    s10|  --> slot/device number (10)<--     10 |
       |                                        |
       f0 --> function number (0)    <--        0

https://wiki.xen.org/wiki/Bus:Device.Function_(BDF)_Notation https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.