From: Yu Watanabe Date: Wed, 23 Jun 2021 07:10:26 +0000 (+0900) Subject: udev: introduce new netif naming scheme flag to strictly replace ifname X-Git-Tag: v249-rc2~11^2~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b4d885f0e861b2d1bb5a62311c61a96f5222b026;p=thirdparty%2Fsystemd.git udev: introduce new netif naming scheme flag to strictly replace ifname --- diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h index c0f94d0407c..119b80178f1 100644 --- a/src/shared/netif-naming-scheme.h +++ b/src/shared/netif-naming-scheme.h @@ -34,6 +34,7 @@ typedef enum NamingSchemeFlags { NAMING_BRIDGE_NO_SLOT = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */ NAMING_SLOT_FUNCTION_ID = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */ NAMING_16BIT_INDEX = 1 << 11, /* Allow full 16-bit for the onboard index */ + NAMING_REPLACE_STRICTLY = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */ /* And now the masks that combine the features above */ NAMING_V238 = 0, @@ -43,7 +44,7 @@ typedef enum NamingSchemeFlags { NAMING_V243 = NAMING_V241 | NAMING_NETDEVSIM | NAMING_LABEL_NOPREFIX, NAMING_V245 = NAMING_V243 | NAMING_NSPAWN_LONG_HASH, NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT, - NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX, + NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY, _NAMING_SCHEME_FLAGS_INVALID = -EINVAL, } NamingSchemeFlags; diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index d2fc1fcced4..8e5b0436589 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -17,6 +17,7 @@ #include "glob-util.h" #include "list.h" #include "mkdir.h" +#include "netif-naming-scheme.h" #include "nulstr-util.h" #include "parse-util.h" #include "path-util.h" @@ -2062,7 +2063,10 @@ static int udev_rule_apply_token_to_event( (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false); if (IN_SET(event->esc, ESCAPE_UNSET, ESCAPE_REPLACE)) { - count = udev_replace_chars(buf, "/"); + if (naming_scheme_has(NAMING_REPLACE_STRICTLY)) + count = udev_replace_ifname(buf); + else + count = udev_replace_chars(buf, "/"); if (count > 0) log_rule_debug(dev, rules, "Replaced %zu character(s) from result of NAME=\"%s\"", count, token->value);