]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: configure DHCP clients after MAC address is assigned
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 31 Jan 2022 03:08:24 +0000 (12:08 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 31 Jan 2022 04:10:28 +0000 (13:10 +0900)
Prompted by #20090.

src/network/networkd-dhcp-common.c
src/network/networkd-dhcp4.c
src/network/networkd-dhcp6.c

index 7996960bd12b12f3f82909bf2c19dc33be765e52..5331cdcead9f65d129473d61ecc2f82dd78bb9e6 100644 (file)
@@ -61,6 +61,13 @@ bool link_dhcp_enabled(Link *link, int family) {
         if (link->iftype == ARPHRD_CAN)
                 return false;
 
+        if (!IN_SET(link->hw_addr.length, ETH_ALEN, INFINIBAND_ALEN) &&
+            !streq_ptr(link->kind, "wwan"))
+                /* Currently, only interfaces whose MAC address length is ETH_ALEN or INFINIBAND_ALEN
+                 * are supported. Note, wwan interfaces may be assigned MAC address slightly later.
+                 * Hence, let's wait for a while.*/
+                return false;
+
         if (!link->network)
                 return false;
 
index cb9c428ae9bb69b893e7c9593ecb51197cddfd17..718ac62f8e59bf4fa7875d2f2eb853ef6b2971ec 100644 (file)
@@ -1607,6 +1607,11 @@ int request_process_dhcp4_client(Request *req) {
         if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                 return 0;
 
+        if (!IN_SET(link->hw_addr.length, ETH_ALEN, INFINIBAND_ALEN) ||
+            hw_addr_is_null(&link->hw_addr))
+                /* No MAC address is assigned to the hardware, or non-supported MAC address length. */
+                return 0;
+
         r = dhcp4_configure_duid(link);
         if (r <= 0)
                 return r;
index e591043111df5e72166265d2eacf3dbfeea29a66..ab51b7377da4d875e2b78f77557a551223589140 100644 (file)
@@ -711,6 +711,11 @@ int request_process_dhcp6_client(Request *req) {
         if (!IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED))
                 return 0;
 
+        if (!IN_SET(link->hw_addr.length, ETH_ALEN, INFINIBAND_ALEN) ||
+            hw_addr_is_null(&link->hw_addr))
+                /* No MAC address is assigned to the hardware, or non-supported MAC address length. */
+                return 0;
+
         r = dhcp_configure_duid(link, link_get_dhcp6_duid(link));
         if (r <= 0)
                 return r;