systemd.net-naming-scheme(7) — Linux manual page

NAME | DESCRIPTION | POLICIES | HISTORY | LIMITING THE USE OF SPECIFIC SYSFS ATTRIBUTES | EXAMPLES | SEE ALSO | NOTES | COLOPHON

SYSTEMD....NG-SCHEME(7) systemd.net-naming-scheme SYSTEMD....NG-SCHEME(7)

NAME top

 systemd.net-naming-scheme - Network device naming schemes

DESCRIPTION top

 Network interfaces names and MAC addresses may be generated based
 on certain stable interface attributes. This is possible when
 there is enough information about the device to generate those
 attributes and the use of this information is configured. This
 page describes interface naming, i.e. what possible names may be
 generated. Those names are generated by the
 systemd-udevd.service(8) builtin net_id and exported as udev(7)
 properties (ID_NET_NAME_ONBOARD=, ID_NET_LABEL_ONBOARD=,
 ID_NET_NAME_PATH=, ID_NET_NAME_SLOT=).
 Names and MAC addresses are derived from various stable device
 metadata attributes. Newer versions of systemd-udevd take more of
 these attributes into account, improving (and thus possibly
 changing) the names and addresses used for the same devices.
 Different versions of those generation rules are called "naming
 schemes". The default naming scheme is chosen at compilation time.
 Usually this will be the latest implemented version, but it is
 also possible to set one of the older versions to preserve
 compatibility. This may be useful for example for distributions,
 which may introduce new versions of systemd in stable releases
 without changing the naming scheme. The naming scheme may also be
 overridden using the net.naming_scheme= kernel command line
 switch, see systemd-udevd.service(8). Available naming schemes are
 described below.
 After the udev properties have been generated, appropriate udev
 rules may be used to actually rename devices based on those
 properties. See the description of NamePolicy= and
 MACAddressPolicy= in systemd.link(5).
 Note that while the concept of network interface naming schemes is
 primarily relevant in the context of systemd-udevd.service, the
 systemd-nspawn(1) container manager also takes it into account
 when naming network interfaces, see below.

POLICIES top

 All names start with a two-character prefix that signifies the
 interface type.
 Table 1. Two character prefixes based on the type of interface
 ┌────────┬───────────────────────┐
 │ Prefix Description │
 ├────────┼───────────────────────┤
 │ en │ Ethernet │
 ├────────┼───────────────────────┤
 │ ib │ InfiniBand │
 ├────────┼───────────────────────┤
 │ sl │ Serial line IP (slip) │
 ├────────┼───────────────────────┤
 │ wl │ Wireless local area │
 │ │ network (WLAN) │
 ├────────┼───────────────────────┤
 │ ww │ Wireless wide area │
 │ │ network (WWAN) │
 └────────┴───────────────────────┘
 The udev net_id builtin exports the following udev device
 properties:
 ID_NET_NAME_ONBOARD=prefixonumber,
 ID_NET_NAME_ONBOARD=prefixdnumber
 This name is set based on the numeric ordering information
 given by the firmware for on-board devices. Different schemes
 are used depending on the firmware type, as described in the
 table below.
 Table 2. On-board naming schemes
 ┌───────────────┬────────────────────────┐
 │ Format Description │
 ├───────────────┼────────────────────────┤
 │ prefixonumber │ PCI on-board index │
 ├───────────────┼────────────────────────┤
 │ prefixdnumber │ DeviceTree alias index │
 └───────────────┴────────────────────────┘
 Added in version 243.
 ID_NET_LABEL_ONBOARD=label
 This property is set based on textual label given by the
 firmware for on-board devices. This is only available for PCI
 devices.
 Added in version 243.
 ID_NET_NAME_MAC=prefixxAABBCCDDEEFF
 This name consists of the prefix, letter x, and 12 hexadecimal
 digits of the MAC address. It is available if the device has a
 fixed MAC address. Because this name is based on an attribute
 of the card itself, it remains "stable" when the device is
 moved (even between machines), but will change when the
 hardware is replaced.
 Added in version 243.
 ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port],
 ID_NET_NAME_SLOT=prefixvslot, ID_NET_NAME_SLOT=prefixxslot,
 ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port]bnumber,
 ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port]uport...[cconfig][iinterface],
 ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port]vslot,
 ID_NET_NAME_SLOT=prefix[Pdomain]sslot[ffunction][nport_name|ddev_port]rslot
 This property describes the slot position. Different schemes
 are used depending on the bus type, as described in the table
 below. In case of USB, BCMA, and SR-VIO devices, the full name
 consists of the prefix, PCI slot identifier, and USB or BCMA
 or SR-VIO slot identifier. The first two parts are denoted as
 "..." in the table below.
 Table 3. Slot naming schemes
 ┌─────────────────────────────────────────────────────────────┬──────────────────────────┐
 │ Format Description │
 ├─────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ prefix [Pdomain] sslot [ffunction] [nport_name | ddev_port] │ PCI slot number │
 ├─────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ prefix vslot │ VIO slot number (IBM │
 │ │ PowerVM) │
 ├─────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ prefix Xnumber │ VIF interface number │
 │ │ (Xen) │
 ├─────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ ... bnumber │ Broadcom bus (BCMA) core │
 │ │ number │
 ├─────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ ... uport... [cconfig] [iinterface] │ USB port number chain │
 ├─────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ ... vslot │ SR-VIO slot number │
 ├─────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ ... rslot │ SR-IOV slot number │
 └─────────────────────────────────────────────────────────────┴──────────────────────────┘
 The PCI domain is only prepended when it is not 0. All
 multi-function PCI devices will carry the ffunction number in
 the device name, including the function 0 device. For
 non-multi-function devices, the number is suppressed if 0. The
 port name port_name is used, or the port number ddev_port if
 the name is not known.
 For BCMA devices, the core number is suppressed when 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 number 1 and interface number 0 values are
 suppressed.
 SR-IOV virtual devices are named based on the name of the
 parent interface, with a suffix of v and the virtual device
 number, with any leading zeros removed. The bus number is
 ignored.
 SR-IOV virtual device representors are named based on the name
 of the physical device interface, with a suffix of r and the
 number of the virtual device that is linked to the particular
 representor, with any leading zeros removed. The physical port
 name and the bus number are ignored.
 In some configurations a parent PCI bridge of a given network
 controller may be associated with a slot. In such case we do
 not generate this device property to avoid possible naming
 conflicts.
 Added in version 243.
 ID_NET_NAME_PATH=prefixcbus_id,
 ID_NET_NAME_PATH=prefixavendormodeliinstance,
 ID_NET_NAME_PATH=prefixiaddressnport_name,
 ID_NET_NAME_PATH=prefixuport...,
 ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port],
 ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port]bnumber,
 ID_NET_NAME_PATH=prefix[Pdomain]pbussslot[ffunction][nphys_port_name|ddev_port]uport...[cconfig][iinterface]
 This property describes the device installation location.
 Different schemes are used depending on the bus type, as
 described in the table below. For BCMA and USB devices, PCI
 path information must known, and the full name consists of the
 prefix, PCI slot identifier, and USB or BCMA location. The
 first two parts are denoted as "..." in the table below.
 Table 4. Path naming schemes
 ┌───────────────────────────────────────────────────────────────────────┬──────────────────────────┐
 │ Format Description │
 ├───────────────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ prefix cbus_id │ CCW or grouped CCW │
 │ │ device identifier │
 ├───────────────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ prefix avendor model iinstance │ ACPI path names for │
 │ │ ARM64 platform devices │
 ├───────────────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ prefix iaddress nport_name │ Netdevsim (simulated │
 │ │ networking device) │
 │ │ device number and port │
 │ │ name │
 ├───────────────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ prefix [Pdomain] pbus sslot [ffunction] [nphys_port_name | ddev_port] │ PCI geographical │
 │ │ location │
 ├───────────────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ ... bnumber │ Broadcom bus (BCMA) core │
 │ │ number │
 ├───────────────────────────────────────────────────────────────────────┼──────────────────────────┤
 │ ... uport... [cconfig] [iinterface] │ USB port number chain │
 └───────────────────────────────────────────────────────────────────────┴──────────────────────────┘
 CCW and grouped CCW devices are found in IBM System Z
 mainframes. Any leading zeros and dots are suppressed.
 For PCI, BCMA, and USB devices, the same rules as described
 above for slot naming are used.
 Added in version 243.

HISTORY top

 The following "naming schemes" have been defined (which may be
 chosen at system boot-up time via the net.naming_scheme= kernel
 command line switch, see above):
 v238
 This is the naming scheme that was implemented in systemd 238.
 Added in version 243.
 v239
 Naming was changed for virtual network interfaces created with
 SR-IOV and NPAR and for devices where the PCI network
 controller device does not have a slot number associated.
 SR-IOV virtual devices are named based on the name of the
 parent interface, with a suffix of "vport", where port is the
 virtual device number. Previously those virtual devices were
 named as if completely independent.
 The ninth and later NPAR virtual devices are named following
 the scheme used for the first eight NPAR partitions.
 Previously those devices were not renamed and the kernel
 default ("ethN") was used.
 Names are also generated for PCI devices where the PCI network
 controller device does not have an associated slot number
 itself, but one of its parents does. Previously those devices
 were not renamed and the kernel default was used.
 Added in version 243.
 v240
 The "ib" prefix and stable names for infiniband devices are
 introduced. Previously those devices were not renamed.
 The ACPI index field (used in ID_NET_NAME_ONBOARD=) is now
 also used when 0.
 A new naming policy NamePolicy=keep was introduced. With this
 policy, if the network device name was already set by
 userspace, the device will not be renamed again. Previously,
 this naming policy applied implicitly, and now it must be
 explicitly requested. Effectively, this means that network
 devices will be renamed according to the configuration, even
 if they have been renamed already, if keep is not specified as
 the naming policy in the .link file. See systemd.link(5) for a
 description of NamePolicy=.
 Added in version 243.
 v241
 MACAddressPolicy=persistent was extended to set MAC addresses
 based on the device name. Previously addresses were only based
 on the ID_NET_NAME_* attributes, which meant that interface
 names would never be generated for virtual devices. Now a
 persistent address will be generated for most devices,
 including in particular bridges.
 Note: when userspace does not set a MAC address for a bridge
 device, the kernel will initially assign a random address, and
 then change it when the first device is enslaved to the
 bridge. With this naming policy change, bridges get a
 persistent MAC address based on the bridge name instead of the
 first enslaved device.
 Added in version 243.
 v243
 Support for renaming netdevsim (simulated networking) devices
 was added. Previously those devices were not renamed.
 Previously two-letter interface type prefix was prepended to
 ID_NET_LABEL_ONBOARD=. This is not done anymore.
 Added in version 243.
 v245
 When systemd-nspawn(1) derives the name for the host side of
 the network interface created with --network-veth from the
 container name it previously simply truncated the result at 15
 characters if longer (since that's the maximum length for
 network interface names). From now on, for any interface name
 that would be longer than 15 characters the last 4 characters
 are set to a 24bit hash value of the full interface name. This
 way network interface name collisions between multiple
 similarly named containers (who only differ in container name
 suffix) should be less likely (but still possible, since the
 24bit hash value is very small).
 Added in version 245.
 v247
 When a PCI slot is associated with a PCI bridge that has
 multiple child network controllers, the same value of the
 ID_NET_NAME_SLOT property might be derived for those
 controllers. This would cause a naming conflict if the
 property is selected as the device name. Now, we detect this
 situation and do not produce the ID_NET_NAME_SLOT property.
 Added in version 247.
 v249
 PCI hotplug slot names for the s390 PCI driver are a
 hexadecimal representation of the function_id device
 attribute. This attribute is now used to build the
 ID_NET_NAME_SLOT. Before that, all slot names were parsed as
 decimal numbers, which could either result in an incorrect
 value of the ID_NET_NAME_SLOT property or none at all.
 Some firmware and hypervisor implementations report
 unreasonably high numbers for the on-board index. To prevent
 the generation of bogus on-board interface names, index
 numbers greater than 16381 (214-1) were ignored. For s390 PCI
 devices index values up to 65535 (216-1) are valid. To account
 for that, the limit was increased to 65535.
 The udev rule NAME= replaces ":", "/", and "%" with an
 underscore ("_"), and refuses strings which contain only
 numerics.
 Added in version 249.
 v250
 Added naming scheme for Xen netfront "vif" interfaces based on
 the guest side VIF number set from the Xen config (or the
 interface index in AWS EC2).
 Added in version 250.
 v251
 Since version v247 we no longer set ID_NET_NAME_SLOT if we
 detect that a PCI device associated with a slot is a PCI
 bridge as that would create naming conflict when there are
 more child devices on that bridge. Now, this is relaxed and we
 will use slot information to generate the name based on it but
 only if the PCI device has multiple functions. This is safe
 because distinct function number is a part of the device name
 for multifunction devices. Note, this is reverted in v255. See
 below.
 Added in version 251.
 v252
 Added naming scheme for platform devices with devicetree
 aliases.
 Added in version 252.
 v253
 Set ID_NET_NAME_PATH for usb devices not connected via a PCI
 bus.
 Added in version 253.
 v254
 Naming was changed for SR-IOV virtual device representors,
 optionally settable at compilation time. The "rslot" suffix
 was added to differentiate SR-IOV virtual device representors
 attached to a single physical device interface. Because of a
 mistake, this scheme was not the default scheme for systemd
 version 254.
 Added in version 255.
 v255
 Naming was changed for SR-IOV virtual device representors to
 enable the change introduced in v254 by default.
 If we detect that a PCI device associated with a slot is a PCI
 bridge, we no longer set ID_NET_NAME_SLOT, reverting a change
 that was introduced in v251.
 Added in version 255.
 v257
 PCI slot number is now read from firmware_node/sun sysfs file.
 The naming scheme based on devicetree aliases was extended to
 support aliases for individual interfaces of controllers with
 multiple ports.
 Added in version 257.
 Note that latest may be used to denote the latest scheme known (to
 this particular version of systemd).

LIMITING THE USE OF SPECIFIC SYSFS ATTRIBUTES top

 When creating names for network cards, some naming schemes use
 data from sysfs populated by the kernel. This means that although
 a specific naming scheme in udev is picked, the network card's
 name can still change when a new kernel version adds a new sysfs
 attribute. For example if kernel starts setting the
 phys_port_name, udev will append the "nphys_port_name" suffix to
 the device name.
 ID_NET_NAME_ALLOW=BOOL
 This udev property sets a fallback policy for reading a sysfs
 attribute. If set to 0 udev will not read any sysfs attribute
 by default, unless it is explicitly allowlisted, see below. If
 set to 1 udev can use any sysfs attribute unless it is
 explicitly forbidden. The default value is 1.
 Added in version 256.
 ID_NET_NAME_ALLOW_sysfsattr=BOOL
 This udev property explicitly states if udev shall use the
 specified sysfsattr, when composing the device name.
 Added in version 256.
 With these options, users can set an allowlist or denylist for
 sysfs attributes. To create an allowlist, the user needs to set
 ID_NET_NAME_ALLOW=0 for the device and then list the allowed
 attributes with the ID_NET_NAME_ALLOW_sysfsattr=1 options. In case
 of a denylist, the user needs to provide the list of denied
 attributes with the ID_NET_NAME_ALLOW_sysfsattr=0 options.

EXAMPLES top

 Example 1. Using udevadm test-builtin to display device properties
 $ udevadm test-builtin net_id /sys/class/net/enp0s31f6
 ...
 Using default interface naming scheme 'v243'.
 ID_NET_NAMING_SCHEME=v243
 ID_NET_NAME_MAC=enx54ee75cb1dc0
 ID_OUI_FROM_DATABASE=Wistron InfoComm(Kunshan)Co.,Ltd.
 ID_NET_NAME_PATH=enp0s31f6
 ...
 Example 2. PCI Ethernet card with firmware index "1"
 ID_NET_NAME_ONBOARD=eno1
 ID_NET_NAME_ONBOARD_LABEL=Ethernet Port 1
 Example 3. PCI Ethernet card in 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
 Example 4. 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
 Example 5. 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
 Example 6. PCI IB host adapter with 2 ports
 # /sys/devices/pci0000:00/0000:00:03.0/0000:15:00.0/net/ibp21s0f0
 ID_NET_NAME_PATH=ibp21s0f0
 # /sys/devices/pci0000:00/0000:00:03.0/0000:15:00.1/net/ibp21s0f1
 ID_NET_NAME_PATH=ibp21s0f1
 Example 7. 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
 Example 8. 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
 Example 9. 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
 Example 10. Set an allowlist for reading sysfs attributes for
 network card naming
 /etc/udev/hwdb.d/50-net-naming-allowlist.hwdb
 net:naming:drvirtio_net:*
 ID_NET_NAME_ALLOW=0
 ID_NET_NAME_ALLOW_ACPI_INDEX=1
 ID_NET_NAME_ALLOW_ADDR_ASSIGN_TYPE=1
 ID_NET_NAME_ALLOW_ADDRESS=1
 ID_NET_NAME_ALLOW_ARI_ENABLED=1
 ID_NET_NAME_ALLOW_DEV_PORT=1
 ID_NET_NAME_ALLOW_FUNCTION_ID=1
 ID_NET_NAME_ALLOW_IFLINK=1
 ID_NET_NAME_ALLOW_INDEX=1
 ID_NET_NAME_ALLOW_LABEL=1
 ID_NET_NAME_ALLOW_PHYS_PORT_NAME=1
 ID_NET_NAME_ALLOW_TYPE=1
 Example 11. Set a denylist so that specified sysfs attribute are
 ignored
 /etc/udev/hwdb.d/50-net-naming-denylist.hwdb
 net:naming:drvirtio_net:*
 ID_NET_NAME_ALLOW=1
 ID_NET_NAME_ALLOW_DEV_PORT=0
 ID_NET_NAME_ALLOW_PHYS_PORT_NAME=0

SEE ALSO top

 udev(7), udevadm(8), systemd-udevd.service(8), Predictable Network
 Interface Names[1], systemd-nspawn(1)

NOTES top

 1. Predictable Network Interface Names
 https://systemd.io/PREDICTABLE_INTERFACE_NAMES

COLOPHON top

 This page is part of the systemd (systemd system and service
 manager) project. Information about the project can be found at
 ⟨http://www.freedesktop.org/wiki/Software/systemd⟩. If you have a
 bug report for this manual page, see
 ⟨http://www.freedesktop.org/wiki/Software/systemd/#bugreports⟩.
 This page was obtained from the project's upstream Git repository
 ⟨https://github.com/systemd/systemd.git⟩ on 2025年02月02日. (At that
 time, the date of the most recent commit that was found in the
 repository was 2025年02月02日.) If you discover any rendering
 problems in this HTML version of the page, or you believe there is
 a better or more up-to-date source for the page, or you have
 corrections or improvements to the information in this COLOPHON
 (which is not part of the original manual page), send a mail to
 man-pages@man7.org
systemd 258~devel SYSTEMD....NG-SCHEME(7)

Pages that refer to this page: systemd-nspawn(1), systemd.link(5), systemd.directives(7), systemd.index(7), systemd-udevd.service(8)



HTML rendering created 2025年02月02日 by Michael Kerrisk, author of The Linux Programming Interface.

For details of in-depth Linux/UNIX system programming training courses that I teach, look here.

Hosting by jambit GmbH.

Cover of TLPI

Web Analytics Made Easy - StatCounter

AltStyle によって変換されたページ (->オリジナル) /