From 7eb08da4b388b920c8a894b1500c9cc7dc1f31ef Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Thu, 4 Dec 2014 18:12:55 +0100 Subject: udev: net_setup - allow matching on OriginalName= This has been requested repeatedly, so let's give it a go. We explicitly do not allow matching on names that have already been changed (from a previous udev run, or otherwise), and matching on unpredictable names (ethX) is discouraged (but not currently disallowed). We also currently allow: [Match] Name=veth0 [Link] Name=my-name0 SomeOtherSetting=true Which means that the link file will be applied the first time it is invoked, but not on subsequent invocations, which may be surprising. --- src/libsystemd-network/network-internal.c | 35 ++++++++++++++++++------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'src/libsystemd-network/network-internal.c') diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index 6f16050cdc..b90fd1ccc8 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -96,40 +96,47 @@ bool net_match_config(const struct ether_addr *match_mac, const char *dev_parent_driver, const char *dev_driver, const char *dev_type, - const char *dev_name) { + const char *dev_name, + bool ignore_name_match) { if (match_host && !condition_test(match_host)) - return 0; + return false; if (match_virt && !condition_test(match_virt)) - return 0; + return false; if (match_kernel && !condition_test(match_kernel)) - return 0; + return false; if (match_arch && !condition_test(match_arch)) - return 0; + return false; if (match_mac && (!dev_mac || memcmp(match_mac, dev_mac, ETH_ALEN))) - return 0; + return false; if (match_path && (!dev_path || fnmatch(match_path, dev_path, 0))) - return 0; + return false; if (match_driver) { if (dev_parent_driver && !streq(match_driver, dev_parent_driver)) - return 0; + return false; else if (!streq_ptr(match_driver, dev_driver)) - return 0; + return false; } if (match_type && !streq_ptr(match_type, dev_type)) - return 0; - - if (match_name && (!dev_name || fnmatch(match_name, dev_name, 0))) - return 0; + return false; + + if (match_name) { + if (!dev_name || fnmatch(match_name, dev_name, 0)) + return false; + else if (ignore_name_match) { + log_warning("ifname (%s) matched config, but is ignored as it is not the original name", dev_name); + return false; + } + } - return 1; + return true; } int config_parse_net_condition(const char *unit, -- cgit v1.2.3-54-g00ecf