sd-dhcp6-client: use struct hw_addr_data

This commit is contained in:
Yu Watanabe
2022-02-14 14:58:49 +09:00
parent 6f8ff34218
commit 1978efb9a5
2 changed files with 12 additions and 12 deletions
+1 -2
View File
@@ -93,8 +93,7 @@ typedef struct sd_dhcp6_client {
int ifindex;
char *ifname;
struct in6_addr local_address;
uint8_t mac_addr[HW_ADDR_MAX_SIZE];
size_t mac_addr_len;
struct hw_addr_data hw_addr;
uint16_t arp_type;
DHCP6IA ia_na;
DHCP6IA ia_pd;
+11 -10
View File
@@ -185,12 +185,13 @@ int sd_dhcp6_client_set_local_address(
int sd_dhcp6_client_set_mac(
sd_dhcp6_client *client,
const uint8_t *addr, size_t addr_len,
const uint8_t *addr,
size_t addr_len,
uint16_t arp_type) {
assert_return(client, -EINVAL);
assert_return(addr, -EINVAL);
assert_return(addr_len <= HW_ADDR_MAX_SIZE, -EINVAL);
assert_return(addr_len <= sizeof(client->hw_addr.bytes), -EINVAL);
/* Unlike the other setters, it is OK to set a new MAC address while the client is running,
* as the MAC address is used only when setting DUID or IAID. */
@@ -201,12 +202,12 @@ int sd_dhcp6_client_set_mac(
assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
else {
client->arp_type = ARPHRD_NONE;
client->mac_addr_len = 0;
client->hw_addr.length = 0;
return 0;
}
memcpy(&client->mac_addr, addr, addr_len);
client->mac_addr_len = addr_len;
memcpy(client->hw_addr.bytes, addr, addr_len);
client->hw_addr.length = addr_len;
client->arp_type = arp_type;
return 0;
@@ -301,10 +302,10 @@ static int dhcp6_client_set_duid_internal(
} else
switch (duid_type) {
case DUID_TYPE_LLT:
if (client->mac_addr_len == 0)
if (client->hw_addr.length == 0)
return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LLT, MAC address is not set.");
r = dhcp_identifier_set_duid_llt(&client->duid, llt_time, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len);
r = dhcp_identifier_set_duid_llt(&client->duid, llt_time, client->hw_addr.bytes, client->hw_addr.length, client->arp_type, &client->duid_len);
if (r < 0)
return log_dhcp6_client_errno(client, r, "Failed to set DUID-LLT: %m");
break;
@@ -314,10 +315,10 @@ static int dhcp6_client_set_duid_internal(
return log_dhcp6_client_errno(client, r, "Failed to set DUID-EN: %m");
break;
case DUID_TYPE_LL:
if (client->mac_addr_len == 0)
if (client->hw_addr.length == 0)
return log_dhcp6_client_errno(client, SYNTHETIC_ERRNO(EOPNOTSUPP), "Failed to set DUID-LL, MAC address is not set.");
r = dhcp_identifier_set_duid_ll(&client->duid, client->mac_addr, client->mac_addr_len, client->arp_type, &client->duid_len);
r = dhcp_identifier_set_duid_ll(&client->duid, client->hw_addr.bytes, client->hw_addr.length, client->arp_type, &client->duid_len);
if (r < 0)
return log_dhcp6_client_errno(client, r, "Failed to set DUID-LL: %m");
break;
@@ -410,7 +411,7 @@ static int client_ensure_iaid(sd_dhcp6_client *client) {
if (client->iaid_set)
return 0;
r = dhcp_identifier_set_iaid(client->ifindex, client->mac_addr, client->mac_addr_len,
r = dhcp_identifier_set_iaid(client->ifindex, client->hw_addr.bytes, client->hw_addr.length,
/* legacy_unstable_byteorder = */ true,
/* use_mac = */ client->test_mode,
&iaid);