From 500c61ee490225e1d6481e38449ea358135b30d0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 2 Nov 2024 00:13:00 +0900 Subject: [PATCH] network/ipv4ll: not necessary to set initial address on each start --- src/network/networkd-dhcp4.c | 14 +------------- src/network/networkd-ipv4ll.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 19b9a3ecba4..f22bc3954ca 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1173,15 +1173,9 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { return 0; } - if (link->ipv4ll) { + if (link->ipv4ll && !sd_ipv4ll_is_running(link->ipv4ll)) { log_link_debug(link, "DHCP client is stopped. Acquiring IPv4 link-local address"); - if (in4_addr_is_set(&link->network->ipv4ll_start_address)) { - r = sd_ipv4ll_set_address(link->ipv4ll, &link->network->ipv4ll_start_address); - if (r < 0) - return log_link_warning_errno(link, r, "Could not set IPv4 link-local start address: %m"); - } - r = sd_ipv4ll_start(link->ipv4ll); if (r < 0 && r != -ESTALE) /* On exit, we cannot and should not start sd-ipv4ll. */ return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m"); @@ -1260,12 +1254,6 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { if (link->ipv4ll && !sd_ipv4ll_is_running(link->ipv4ll)) { log_link_debug(link, "Problems acquiring DHCP lease, acquiring IPv4 link-local address"); - if (in4_addr_is_set(&link->network->ipv4ll_start_address)) { - r = sd_ipv4ll_set_address(link->ipv4ll, &link->network->ipv4ll_start_address); - if (r < 0) - return log_link_warning_errno(link, r, "Could not set IPv4 link-local start address: %m"); - } - r = sd_ipv4ll_start(link->ipv4ll); if (r < 0) return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m"); diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index ea960593bbc..648f20d596c 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -174,6 +174,17 @@ static int ipv4ll_check_mac(sd_ipv4ll *ll, const struct ether_addr *mac, void *u return link_get_by_hw_addr(m, &hw_addr, NULL) >= 0; } +static int ipv4ll_set_address(Link *link) { + assert(link); + assert(link->network); + assert(link->ipv4ll); + + if (!in4_addr_is_set(&link->network->ipv4ll_start_address)) + return 0; + + return sd_ipv4ll_set_address(link->ipv4ll, &link->network->ipv4ll_start_address); +} + int ipv4ll_configure(Link *link) { uint64_t seed; int r; @@ -201,6 +212,10 @@ int ipv4ll_configure(Link *link) { return r; } + r = ipv4ll_set_address(link); + if (r < 0) + return r; + r = sd_ipv4ll_set_mac(link->ipv4ll, &link->hw_addr.ether); if (r < 0) return r; -- 2.47.3