From 58576937bc44bd957831f2245f75b0d9d56d2678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 8 Apr 2019 08:59:45 +0200 Subject: [PATCH 1/2] man: say that .link NamePolicy= should be empty for Name= to take effect The description of NamePolicy= implied this, but didn't spell it out. It's a very common use case, so let's add a bit of explanation and ehance the example a bit. Inspired by https://bugzilla.redhat.com/show_bug.cgi?id=1695894. --- man/systemd.link.xml | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/man/systemd.link.xml b/man/systemd.link.xml index 7594c4996e..41e62ca053 100644 --- a/man/systemd.link.xml +++ b/man/systemd.link.xml @@ -242,9 +242,11 @@ An ordered, space-separated list of policies by which the interface name should be set. NamePolicy= may be disabled by specifying on the - kernel command line. Each of the policies may fail, and the first successful one is used. The name + kernel command line. Each of the policies may fail, and the first successful one is used. The name is not set directly, but is exported to udev as the property , which - is, by default, used by a udev rule to set NAME. The available policies are: + is, by default, used by a + udev7, + rule to set NAME. The available policies are: @@ -312,11 +314,10 @@ Name= - The interface name to use in case all the - policies specified in - NamePolicy= fail, or in case - NamePolicy= is missing or - disabled. + The interface name to use. This option has lower precedence than + NamePolicy=, so for this setting to take effect, NamePolicy= + must either be unset, empty, disabled, or all policies configured there must fail. Also see the + example below with Name=dmz0. Note that specifying a name that the kernel might use for another interface (for example eth0) is dangerous because the @@ -618,8 +619,7 @@ MACAddressPolicy=persistent /etc/systemd/network/10-dmz.link - This example assigns the fixed name - dmz0 to the interface with the MAC address + This example assigns the fixed name dmz0 to the interface with the MAC address 00:a0:de:63:7a:e6: [Match] @@ -627,6 +627,11 @@ MACAddress=00:a0:de:63:7a:e6 [Link] Name=dmz0 + + NamePolicy= is not set, so Name= takes effect. + We use the 10- prefix to order this file early in the list. Note that it + needs to before 10-, i.e. it needs a numerical prefix, to have any effect + at all. From 7a447d21074c3b85b287d6f0fb5cfc4c57a31c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 8 Apr 2019 09:20:16 +0200 Subject: [PATCH 2/2] man: add a lengthy example for NamePolicy= debugging This is still rather opaque, and test-builtin is quite useful in this case, let's advertise it a bit more. --- man/systemd.link.xml | 59 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/man/systemd.link.xml b/man/systemd.link.xml index 41e62ca053..af9799e8c0 100644 --- a/man/systemd.link.xml +++ b/man/systemd.link.xml @@ -628,10 +628,61 @@ MACAddress=00:a0:de:63:7a:e6 [Link] Name=dmz0 - NamePolicy= is not set, so Name= takes effect. - We use the 10- prefix to order this file early in the list. Note that it - needs to before 10-, i.e. it needs a numerical prefix, to have any effect - at all. + NamePolicy= is not set, so Name= takes effect. We use the + 10- prefix to order this file early in the list. Note that it needs to before + 99-link, i.e. it needs a numerical prefix, to have any effect at all. + + + + Debugging <varname>NamePolicy=</varname> assignments + + $ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_setup_link /sys/class/net/hub0 +… +Parsed configuration file /usr/lib/systemd/network/99-default.link +Parsed configuration file /etc/systemd/network/10-eth0.link +ID_NET_DRIVER=cdc_ether +Config file /etc/systemd/network/10-eth0.link applies to device hub0 +link_config: autonegotiation is unset or enabled, the speed and duplex are not writable. +hub0: Device has name_assign_type=4 +Using default interface naming scheme 'v240'. +hub0: Policies didn't yield a name, using specified Name=hub0. +ID_NET_LINK_FILE=/etc/systemd/network/10-eth0.link +ID_NET_NAME=hub0 +… + + Explicit Name= configuration wins in this case. + + sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_setup_link /sys/class/net/enp0s31f6 +… +Parsed configuration file /usr/lib/systemd/network/99-default.link +Parsed configuration file /etc/systemd/network/10-eth0.link +Created link configuration context. +ID_NET_DRIVER=e1000e +Config file /usr/lib/systemd/network/99-default.link applies to device enp0s31f6 +link_config: autonegotiation is unset or enabled, the speed and duplex are not writable. +enp0s31f6: Device has name_assign_type=4 +Using default interface naming scheme 'v240'. +enp0s31f6: Policy *keep*: keeping existing userspace name +enp0s31f6: Device has addr_assign_type=0 +enp0s31f6: MAC on the device already matches policy *persistent* +ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link +… + + + In this case, the interface was already renamed, so the policy specified as + the first option in 99-default.link means that the existing name is + preserved. If was removed, or if were in boot before the renaming has happened, + we might get the following instead: + + enp0s31f6: Policy *path* yields "enp0s31f6". +enp0s31f6: Device has addr_assign_type=0 +enp0s31f6: MAC on the device already matches policy *persistent* +ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link +ID_NET_NAME=enp0s31f6 +… + + + Please note that the details of output are subject to change.