diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-08-07 13:35:58 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-08-08 10:15:00 +0900 |
commit | 335f80a612a82a9a44631483a40107f91e2bee2b (patch) | |
tree | 58eae3677025a1f33c32c189cb3b447586887367 /src/libsystemd-network/sd-dhcp6-client.c | |
parent | f7708f3ffdfaab85b4aa486d009df77621bd7a85 (diff) | |
download | systemd-335f80a612a82a9a44631483a40107f91e2bee2b.tar.gz |
sd-dhcp: use MAC address when DUIDType=link-layer-time or link-layer but DUIDRawData= is not set
Diffstat (limited to 'src/libsystemd-network/sd-dhcp6-client.c')
-rw-r--r-- | src/libsystemd-network/sd-dhcp6-client.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 31382b5431..d4831361bf 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -203,18 +203,34 @@ int sd_dhcp6_client_set_duid( client->duid_len = sizeof(client->duid.type) + duid_len; } else switch (duid_type) { + case DUID_TYPE_LLT: + if (!client->mac_addr || client->mac_addr_len == 0) + return -EOPNOTSUPP; + + r = dhcp_identifier_set_duid_llt(&client->duid, 0, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len); + if (r < 0) + return r; + break; case DUID_TYPE_EN: r = dhcp_identifier_set_duid_en(&client->duid, &client->duid_len); if (r < 0) return r; break; + case DUID_TYPE_LL: + if (!client->mac_addr || client->mac_addr_len == 0) + return -EOPNOTSUPP; + + r = dhcp_identifier_set_duid_ll(&client->duid, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len); + if (r < 0) + return r; + break; case DUID_TYPE_UUID: r = dhcp_identifier_set_duid_uuid(&client->duid, &client->duid_len); if (r < 0) return r; break; default: - return -EOPNOTSUPP; + return -EINVAL; } return 0; |