diff --git a/man/systemd.link.xml b/man/systemd.link.xml index 504977c862d..24271ea65a0 100644 --- a/man/systemd.link.xml +++ b/man/systemd.link.xml @@ -273,18 +273,21 @@ - Keeps the MAC address assigned by the kernel. + Keeps the MAC address assigned by the kernel. Or use the MAC address specified in + MACAddress=. + + An empty string assignment is equivalent to setting none. MACAddress= - The MAC address to use, if no - MACAddressPolicy= - is specified. + The interface MAC address to use. For this setting to take effect, + MACAddressPolicy= must either be unset, empty, or none. + diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index afb2cd4d1c9..d12fd0e2991 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -181,6 +181,13 @@ int link_load_one(link_config_ctx *ctx, const char *filename) { return 0; } + if (IN_SET(link->mac_address_policy, MAC_ADDRESS_POLICY_PERSISTENT, MAC_ADDRESS_POLICY_RANDOM) && link->mac) { + log_warning("%s: MACAddress= in [Link] section will be ignored when MACAddressPolicy= " + "is set to \"persistent\" or \"random\".", + filename); + link->mac = mfree(link->mac); + } + log_debug("Parsed configuration file %s", filename); LIST_PREPEND(links, ctx->links, TAKE_PTR(link)); @@ -668,8 +675,12 @@ static const char* const mac_address_policy_table[_MAC_ADDRESS_POLICY_MAX] = { }; DEFINE_STRING_TABLE_LOOKUP(mac_address_policy, MACAddressPolicy); -DEFINE_CONFIG_PARSE_ENUM(config_parse_mac_address_policy, mac_address_policy, MACAddressPolicy, - "Failed to parse MAC address policy"); +DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT( + config_parse_mac_address_policy, + mac_address_policy, + MACAddressPolicy, + MAC_ADDRESS_POLICY_NONE, + "Failed to parse MAC address policy"); static const char* const name_policy_table[_NAMEPOLICY_MAX] = { [NAMEPOLICY_KERNEL] = "kernel",