From: Yu Watanabe Date: Sun, 6 Feb 2022 20:21:52 +0000 (+0900) Subject: sd-dhcp6-client: use struct hw_addr_data X-Git-Tag: v251-rc1~291^2~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1978efb9a565acc24164939b9f2def64e6f368e0;p=thirdparty%2Fsystemd.git sd-dhcp6-client: use struct hw_addr_data --- diff --git a/src/libsystemd-network/dhcp6-internal.h b/src/libsystemd-network/dhcp6-internal.h index 9961a25faae..40578220d32 100644 --- a/src/libsystemd-network/dhcp6-internal.h +++ b/src/libsystemd-network/dhcp6-internal.h @@ -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; diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index e6eecbbe368..87f297e2d6c 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -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);