X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fnet%2Flink-config.c;h=c2881d6b41d0f08c692263684f7946d787762b58;hb=ad6e5b348fa88f44d6cbfe7aabda7612a1d0463f;hp=5b94e48825bc803fe6ad78f221a586c6863c660e;hpb=464cf22f17e0cf2d8bfa6d72b5e7a662d634f149;p=elogind.git diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 5b94e4882..c2881d6b4 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -251,11 +251,12 @@ int link_config_get(link_config_ctx *ctx, struct udev_device *device, link_config *link; LIST_FOREACH(links, link, ctx->links) { + const char* attr_value = udev_device_get_sysattr_value(device, "address"); if (net_match_config(link->match_mac, link->match_path, link->match_driver, link->match_type, NULL, link->match_host, link->match_virt, link->match_kernel, link->match_arch, - ether_aton(udev_device_get_sysattr_value(device, "address")), + attr_value ? ether_aton(attr_value) : NULL, udev_device_get_property_value(device, "ID_PATH"), udev_device_get_driver(udev_device_get_parent(device)), udev_device_get_property_value(device, "ID_NET_DRIVER"), @@ -279,9 +280,11 @@ static bool mac_is_random(struct udev_device *device) { unsigned type; int r; + /* if we can't get the assign type, assume it is not random */ s = udev_device_get_sysattr_value(device, "addr_assign_type"); if (!s) - return false; /* if we don't know, assume it is not random */ + return false; + r = safe_atou(s, &type); if (r < 0) return false; @@ -294,9 +297,11 @@ static bool should_rename(struct udev_device *device, bool respect_predictable) unsigned type; int r; + /* if we can't get the assgin type, assume we should rename */ s = udev_device_get_sysattr_value(device, "name_assign_type"); if (!s) - return true; /* if we don't know, assume we should rename */ + return true; + r = safe_atou(s, &type); if (r < 0) return true; @@ -304,14 +309,17 @@ static bool should_rename(struct udev_device *device, bool respect_predictable) switch (type) { case NET_NAME_USER: case NET_NAME_RENAMED: - return false; /* these were already named by userspace, do not touch again */ + /* these were already named by userspace, do not touch again */ + return false; case NET_NAME_PREDICTABLE: + /* the kernel claims to have given a predictable name */ if (respect_predictable) - return false; /* the kernel claims to have given a predictable name */ + return false; /* fall through */ case NET_NAME_ENUM: default: - return true; /* the name is known to be bad, or of an unknown type */ + /* the name is known to be bad, or of an unknown type */ + return true; } } @@ -333,8 +341,8 @@ static int get_mac(struct udev_device *device, bool want_random, } /* see eth_random_addr in the kernel */ - mac->ether_addr_octet[0] &= 0xfe; /* clear multicast bit */ - mac->ether_addr_octet[0] |= 0x02; /* set local assignment bit (IEEE802) */ + mac->ether_addr_octet[0] &= 0xfe; /* clear multicast bit */ + mac->ether_addr_octet[0] |= 0x02; /* set local assignment bit (IEEE802) */ return 0; } @@ -382,8 +390,8 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, if (ctx->enable_name_policy && config->name_policy) { NamePolicy *policy; - for (policy = config->name_policy; !respect_predictable && !new_name && - *policy != _NAMEPOLICY_INVALID; policy++) { + for (policy = config->name_policy; + !new_name && *policy != _NAMEPOLICY_INVALID; policy++) { switch (*policy) { case NAMEPOLICY_KERNEL: respect_predictable = true; @@ -410,8 +418,8 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, } if (should_rename(device, respect_predictable)) { + /* if not set by policy, fall back manually set name */ if (!new_name) - /* if not set by policy, fall back manually set name */ new_name = config->name; } else new_name = NULL;