]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp6-client: use struct hw_addr_data
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 6 Feb 2022 20:21:52 +0000 (05:21 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Feb 2022 05:58:49 +0000 (14:58 +0900)
src/libsystemd-network/dhcp6-internal.h
src/libsystemd-network/sd-dhcp6-client.c

index 9961a25faae869d7746426fe44a200d60471148b..40578220d32b5dd5ea0a76c63ea1febee0fe3be3 100644 (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;
index e6eecbbe368d6409c71acac24c3bb91a3eb65e3f..87f297e2d6cf92ab82369289e1bffc324ff30215 100644 (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);