SystemD: Understanding Predictable Network Interface Names

Here is an explanation of how SystemD predictable network interface names are determined.

Predictable network interface device names are based on:
– firmware/bios-provided index numbers for on-board devices
– firmware-provided pci-express hotplug slot index number
– physical/geographical location of the hardware
– the interface’s MAC address

Two character prefixes based on the type of interface:

Type of names:

All multi-function PCI devices will carry the [f] number in the device name including the function 0 device.

When using PCI geography the PCI domain is only prepended when it is not 0.

For USB devices the full chain of port numbers of hubs is composed. If the name gets longer than the maximum number of 15 characters the name is not exported.
The usual USB configuration == 1 and interface == 0 values are suppressed.

PCI ethernet card with firmware index “1”:

PCI ethernet card in hotplug slot with firmware index number:

PCI ethernet multi-function card with 2 ports:

PCI wlan card:

USB built-in 3G modem:

USB Android phone:

How to turn it off

There are 4 ways to turn it off and get back your old trusted network interface names (like ethX etc.):

Boot the kernel with net.ifnames=0 (might also need biosdevname=0)

Disable the assignment of fixed names so that the unpredictable kernel names are used again by masking udev’s rule file for the default policy:
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
(since v209: this file was called 80-net-name-slot.rules in release v197 through v208)

Use your own manual naming scheme (e.g. “internet0”, “dmz0” or “lan0”) by creating your own udev rules file and set the NAME property for the devices. Make sure to order it before the default policy file, for example by naming it

Alter the default policy file for picking a different naming scheme for example for naming all interface names after their MAC address by default:
cp /usr/lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules
Then edit the file there and change the lines as necessary.

More information here.