diff options
author | Tom Gundersen <teg@jklm.no> | 2014-12-04 18:12:55 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-12-04 18:53:47 +0100 |
commit | 7eb08da4b388b920c8a894b1500c9cc7dc1f31ef (patch) | |
tree | 04e8739827b83b3a4e1bbc50697b58f157afe90d /src/libsystemd-network | |
parent | 03e8fdb34610c498e8c7fbe0ae18b53fe28cfbd1 (diff) |
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.
Diffstat (limited to 'src/libsystemd-network')
-rw-r--r-- | src/libsystemd-network/network-internal.c | 35 | ||||
-rw-r--r-- | src/libsystemd-network/network-internal.h | 3 |
2 files changed, 23 insertions, 15 deletions
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, diff --git a/src/libsystemd-network/network-internal.h b/src/libsystemd-network/network-internal.h index c64db2e79d..981c4e0e21 100644 --- a/src/libsystemd-network/network-internal.h +++ b/src/libsystemd-network/network-internal.h @@ -42,7 +42,8 @@ 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); int config_parse_net_condition(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, |