From f42d41cc5f9cd8cac538a1c30fda04d346b5bae2 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 31 Jan 2022 12:08:24 +0900 Subject: [PATCH] network: configure DHCP clients after MAC address is assigned Prompted by #20090. --- src/network/networkd-dhcp-common.c | 7 +++++++ src/network/networkd-dhcp4.c | 5 +++++ src/network/networkd-dhcp6.c | 5 +++++ 3 files changed, 17 insertions(+) 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; -- 2.47.3