From: Tom Gundersen Date: Fri, 5 Dec 2014 14:56:10 +0000 (+0100) Subject: net_setup/networkd: warn if matching is done on possibly unstable ifname X-Git-Tag: v218~91 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=32bc8adcd836baff68e4d0f53b9a382f358cccf8;hp=2a441c8afe7c81f74cc2ceccdf9a71301cd39d4d;p=elogind.git net_setup/networkd: warn if matching is done on possibly unstable ifname --- diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index b90fd1ccc..90f830a35 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -96,8 +96,7 @@ 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, - bool ignore_name_match) { + const char *dev_name) { if (match_host && !condition_test(match_host)) return false; @@ -127,14 +126,8 @@ bool net_match_config(const struct ether_addr *match_mac, if (match_type && !streq_ptr(match_type, dev_type)) return false; - if (match_name) { - if (!dev_name || fnmatch(match_name, dev_name, 0)) + if (match_name && (!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 true; } diff --git a/src/libsystemd-network/network-internal.h b/src/libsystemd-network/network-internal.h index 981c4e0e2..c64db2e79 100644 --- a/src/libsystemd-network/network-internal.h +++ b/src/libsystemd-network/network-internal.h @@ -42,8 +42,7 @@ 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, - bool ignore_name_match); + const char *dev_name); int config_parse_net_condition(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c index a277576a7..b75eab9cd 100644 --- a/src/network/networkd-netdev.c +++ b/src/network/networkd-netdev.c @@ -654,7 +654,7 @@ static int netdev_load_one(Manager *manager, const char *filename) { if (net_match_config(NULL, NULL, NULL, NULL, NULL, netdev_raw->match_host, netdev_raw->match_virt, netdev_raw->match_kernel, netdev_raw->match_arch, - NULL, NULL, NULL, NULL, NULL, NULL, false) <= 0) + NULL, NULL, NULL, NULL, NULL, NULL) <= 0) return 0; if (!NETDEV_VTABLE(netdev_raw)) { diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index b014a6b64..bbc6475df 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -225,9 +225,22 @@ int network_get(Manager *manager, struct udev_device *device, udev_device_get_driver(udev_device_get_parent(device)), udev_device_get_property_value(device, "ID_NET_DRIVER"), udev_device_get_devtype(device), - ifname, false)) { - log_debug("%-*s: found matching network '%s'", IFNAMSIZ, ifname, - network->filename); + ifname)) { + const char *attr; + uint8_t name_assign_type = NET_NAME_UNKNOWN; + + if (network->match_name) { + attr = udev_device_get_sysattr_value(device, "name_assign_type"); + (void)safe_atou8(attr, &name_assign_type); + + if (name_assign_type == NET_NAME_ENUM) + log_warning("%-*s: found matching network '%s', based on potentially unstable ifname", + IFNAMSIZ, ifname, network->filename); + else + log_debug("%-*s: found matching network '%s'", IFNAMSIZ, ifname, network->filename); + } else + log_debug("%-*s: found matching network '%s'", IFNAMSIZ, ifname, network->filename); + *ret = network; return 0; } diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index dc218eb79..812325000 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -226,11 +226,6 @@ int link_config_get(link_config_ctx *ctx, struct udev_device *device, LIST_FOREACH(links, link, ctx->links) { const char* attr_value; - unsigned char name_assign_type = NET_NAME_UNKNOWN; - - attr_value = udev_device_get_sysattr_value(device, "name_assign_type"); - if (attr_value) - (void)safe_atou8(attr_value, &name_assign_type); attr_value = udev_device_get_sysattr_value(device, "address"); @@ -242,13 +237,39 @@ int link_config_get(link_config_ctx *ctx, struct udev_device *device, udev_device_get_driver(udev_device_get_parent(device)), udev_device_get_property_value(device, "ID_NET_DRIVER"), udev_device_get_devtype(device), - udev_device_get_sysname(device), - name_assign_type == NET_NAME_RENAMED)) { - log_debug("Config file %s applies to device %s", - link->filename, - udev_device_get_sysname(device)); - *ret = link; - return 0; + udev_device_get_sysname(device))) { + if (link->match_name) { + unsigned char name_assign_type = NET_NAME_UNKNOWN; + + attr_value = udev_device_get_sysattr_value(device, "name_assign_type"); + if (attr_value) + (void)safe_atou8(attr_value, &name_assign_type); + + if (name_assign_type == NET_NAME_ENUM) { + log_warning("Config file %s applies to device based on potentially unstable interface name '%s'", + link->filename, udev_device_get_sysname(device)); + *ret = link; + + return 0; + } else if (name_assign_type == NET_NAME_RENAMED) { + log_warning("Config file %s matches device based on renamed interface name '%s', ignoring", + link->filename, udev_device_get_sysname(device)); + } else { + log_debug("Config file %s applies to device %s", + link->filename, udev_device_get_sysname(device)); + + *ret = link; + + return 0; + } + } else { + log_debug("Config file %s applies to device %s", + link->filename, udev_device_get_sysname(device)); + + *ret = link; + + return 0; + } } }