diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index 60227cf2864..1f02a1e984f 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -106,12 +106,24 @@ bool net_match_config(Set *match_mac, char * const *match_drivers, char * const *match_types, char * const *match_names, + sd_device *device, const struct ether_addr *dev_mac, - const char *dev_path, - const char *dev_driver, - const char *dev_type, const char *dev_name) { + const char *dev_path = NULL, *dev_driver = NULL, *dev_type = NULL, *mac_str; + + if (device) { + (void) sd_device_get_property_value(device, "ID_PATH", &dev_path); + (void) sd_device_get_property_value(device, "ID_NET_DRIVER", &dev_driver); + (void) sd_device_get_devtype(device, &dev_type); + + if (!dev_name) + (void) sd_device_get_sysname(device, &dev_name); + if (!dev_mac && + sd_device_get_sysattr_value(device, "address", &mac_str) >= 0) + dev_mac = ether_aton(mac_str); + } + if (match_mac && (!dev_mac || !set_contains(match_mac, dev_mac))) return false; diff --git a/src/libsystemd-network/network-internal.h b/src/libsystemd-network/network-internal.h index 958938d3fe2..f6e69078fa8 100644 --- a/src/libsystemd-network/network-internal.h +++ b/src/libsystemd-network/network-internal.h @@ -19,10 +19,8 @@ bool net_match_config(Set *match_mac, char * const *match_driver, char * const *match_type, char * const *match_name, + sd_device *device, const struct ether_addr *dev_mac, - const char *dev_path, - const char *dev_driver, - const char *dev_type, const char *dev_name); CONFIG_PARSER_PROTOTYPE(config_parse_net_condition); diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 0741dfe646d..c58263aeeb0 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -607,26 +607,17 @@ int network_get_by_name(Manager *manager, const char *name, Network **ret) { int network_get(Manager *manager, sd_device *device, const char *ifname, const struct ether_addr *address, Network **ret) { - const char *path = NULL, *driver = NULL, *devtype = NULL; Network *network; Iterator i; assert(manager); assert(ret); - if (device) { - (void) sd_device_get_property_value(device, "ID_PATH", &path); - - (void) sd_device_get_property_value(device, "ID_NET_DRIVER", &driver); - - (void) sd_device_get_devtype(device, &devtype); - } - ORDERED_HASHMAP_FOREACH(network, manager->networks, i) if (net_match_config(network->match_mac, network->match_path, network->match_driver, network->match_type, network->match_name, - address, path, driver, devtype, ifname)) { + device, address, ifname)) { if (network->match_name && device) { const char *attr; uint8_t name_assign_type = NET_NAME_UNKNOWN; diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 611add9ae0d..9dc861fc87e 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -240,42 +240,29 @@ int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret) assert(ret); LIST_FOREACH(links, link, ctx->links) { - const char *address = NULL, *id_path = NULL, *id_net_driver = NULL, *devtype = NULL, *sysname = NULL; - - (void) sd_device_get_sysattr_value(device, "address", &address); - (void) sd_device_get_property_value(device, "ID_PATH", &id_path); - (void) sd_device_get_property_value(device, "ID_NET_DRIVER", &id_net_driver); - (void) sd_device_get_devtype(device, &devtype); - (void) sd_device_get_sysname(device, &sysname); - if (net_match_config(link->match_mac, link->match_path, link->match_driver, link->match_type, link->match_name, - address ? ether_aton(address) : NULL, - id_path, - id_net_driver, - devtype, - sysname)) { + device, NULL, NULL)) { if (link->match_name) { unsigned name_assign_type = NET_NAME_UNKNOWN; (void) link_unsigned_attribute(device, "name_assign_type", &name_assign_type); if (name_assign_type == NET_NAME_ENUM && !strv_contains(link->match_name, "*")) { - log_warning("Config file %s applies to device based on potentially unpredictable interface name '%s'", - link->filename, sysname); + log_device_warning(device, "Config file %s applies to device based on potentially unpredictable interface name", + link->filename); *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, sysname); + log_device_warning(device, "Config file %s matches device based on renamed interface name, ignoring", + link->filename); continue; } } - log_debug("Config file %s applies to device %s", - link->filename, sysname); + log_device_debug(device, "Config file %s is applied", link->filename); *ret = link; return 0;