summaryrefslogtreecommitdiff
path: root/src/libsystemd-network/sd-dhcp6-client.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-08-07 13:35:58 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2018-08-08 10:15:00 +0900
commit335f80a612a82a9a44631483a40107f91e2bee2b (patch)
tree58eae3677025a1f33c32c189cb3b447586887367 /src/libsystemd-network/sd-dhcp6-client.c
parentf7708f3ffdfaab85b4aa486d009df77621bd7a85 (diff)
downloadsystemd-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.c18
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;