- if (detect_container(NULL) <= 0) {
- /* not in a container, udev will be around */
- _cleanup_udev_unref_ struct udev *udev;
- char ifindex_str[2 + DECIMAL_STR_MAX(int)];
-
- udev = udev_new();
- if (!udev)
- return -ENOMEM;
-
- sprintf(ifindex_str, "n%d", client->index);
- device = udev_device_new_from_device_id(udev, ifindex_str);
- if (!device)
- return -errno;
-
- if (udev_device_get_is_initialized(device) <= 0)
- /* not yet ready */
- return -EBUSY;
-
- name = net_get_name(device);
- }
-
- if (name)
- siphash24((uint8_t*)&id, name, strlen(name), HASH_KEY.bytes);
- else
- /* fall back to mac address if no predictable name available */
- siphash24((uint8_t*)&id, &client->mac_addr,
- client->mac_addr_len, HASH_KEY.bytes);
-
- /* fold into 32 bits */
- client->ia_na.id = (id & 0xffffffff) ^ (id >> 32);
+ r = dhcp_identifier_set_iaid(client->index, client->mac_addr, client->mac_addr_len, &client->ia_na.id);
+ if (r < 0)
+ return r;