Skip to content

Instantly share code, notes, and snippets.

@vookimedlo
Last active June 12, 2023 05:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vookimedlo/7455104ba9cbf211b2f6b8e4af2c4053 to your computer and use it in GitHub Desktop.
Save vookimedlo/7455104ba9cbf211b2f6b8e4af2c4053 to your computer and use it in GitHub Desktop.
Predictable network interface device names @ Linux

Predictable network interface device names @ Linux

Predictable network interface device names 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

http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames

Two character prefixes based on the type of interface:
  en — Ethernet
  sl — serial line IP (slip)
  wl — wlan
  ww — wwan

Type of names:
  b<number>                             — BCMA bus core number
  c<bus_id>                             — bus id of a grouped CCW or CCW device,
                                          with all leading zeros stripped [s390]
  o<index>[n<phys_port_name>|d<dev_port>]
                                        — on-board device index number
  s<slot>[f<function>][n<phys_port_name>|d<dev_port>]
                                        — hotplug slot index number
  x<MAC>                                — MAC address
  [P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>]
                                        — PCI geographical location
  [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
                                        — USB port number chain
  v<slot>                               - VIO slot number (IBM PowerVM)
  a<vendor><model>i<instance>           — Platform bus ACPI instance id

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

SR-IOV virtual devices are named based on the name of the parent interface,
with a suffix of "v<N>", where <N> is the virtual device number.

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":
  ID_NET_NAME_ONBOARD=eno1
  ID_NET_NAME_ONBOARD_LABEL=Ethernet Port 1

PCI Ethernet card in hotplug slot with firmware index number:
  /sys/devices/pci0000:00/0000:00:1c.3/0000:05:00.0/net/ens1
  ID_NET_NAME_MAC=enx000000000466
  ID_NET_NAME_PATH=enp5s0
  ID_NET_NAME_SLOT=ens1

PCI Ethernet multi-function card with 2 ports:
  /sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/net/enp2s0f0
  ID_NET_NAME_MAC=enx78e7d1ea46da
  ID_NET_NAME_PATH=enp2s0f0
  /sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.1/net/enp2s0f1
  ID_NET_NAME_MAC=enx78e7d1ea46dc
  ID_NET_NAME_PATH=enp2s0f1

PCI wlan card:
  /sys/devices/pci0000:00/0000:00:1c.1/0000:03:00.0/net/wlp3s0
  ID_NET_NAME_MAC=wlx0024d7e31130
  ID_NET_NAME_PATH=wlp3s0

USB built-in 3G modem:
  /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.6/net/wwp0s29u1u4i6
  ID_NET_NAME_MAC=wwx028037ec0200
  ID_NET_NAME_PATH=wwp0s29u1u4i6

USB Android phone:
  /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/net/enp0s29u1u2
  ID_NET_NAME_MAC=enxd626b3450fb5
  ID_NET_NAME_PATH=enp0s29u1u2

s390 grouped CCW interface:
 /sys/devices/css0/0.0.0007/0.0.f5f0/group_device/net/encf5f0
 ID_NET_NAME_MAC=enx026d3c00000a
 ID_NET_NAME_PATH=encf5f0

Taken from https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-net_id.c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment