From: Yu Watanabe Date: Mon, 31 Jan 2022 03:08:24 +0000 (+0900) Subject: network: configure DHCP clients after MAC address is assigned X-Git-Tag: v251-rc1~406^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f42d41cc5f9cd8cac538a1c30fda04d346b5bae2;p=thirdparty%2Fsystemd.git network: configure DHCP clients after MAC address is assigned Prompted by #20090. --- diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c index 7996960bd12..5331cdcead9 100644 --- a/src/network/networkd-dhcp-common.c +++ b/src/network/networkd-dhcp-common.c @@ -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; diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index cb9c428ae9b..718ac62f8e5 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -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; diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index e591043111d..ab51b7377da 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -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;