From: Yu Watanabe Date: Sun, 20 Apr 2025 01:46:36 +0000 (+0900) Subject: network/ipv4ll: introduce ipv4ll_start() helper function X-Git-Tag: v258-rc1~759^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5c83cd5a7ec3f5154106478301dd855ae706107;p=thirdparty%2Fsystemd.git network/ipv4ll: introduce ipv4ll_start() helper function No effective functional change. Just refactoring. --- diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 85493334f5e..d793d603629 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -16,7 +16,7 @@ #include "networkd-dhcp-prefix-delegation.h" #include "networkd-dhcp4-bus.h" #include "networkd-dhcp4.h" -#include "networkd-ipv4acd.h" +#include "networkd-ipv4ll.h" #include "networkd-link.h" #include "networkd-manager.h" #include "networkd-network.h" @@ -1192,13 +1192,11 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { return 0; } - if (link->ipv4ll && !sd_ipv4ll_is_running(link->ipv4ll)) { - log_link_debug(link, "DHCP client is stopped. Acquiring IPv4 link-local address"); - - 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"); - } + r = ipv4ll_start(link); + if (r < 0) + return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m"); + if (r > 0) + log_link_debug(link, "DHCP client is stopped. Acquiring IPv4 link-local address."); if (link->dhcp_lease) { if (link->network->dhcp_send_release) { @@ -1270,13 +1268,11 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { break; case SD_DHCP_CLIENT_EVENT_TRANSIENT_FAILURE: - if (link->ipv4ll && !sd_ipv4ll_is_running(link->ipv4ll)) { + r = ipv4ll_start(link); + if (r < 0) + return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m"); + if (r > 0) log_link_debug(link, "Problems acquiring DHCP lease, acquiring IPv4 link-local address"); - - r = sd_ipv4ll_start(link->ipv4ll); - if (r < 0) - return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m"); - } break; default: diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index ef8b0876b57..7522bca0aa8 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -264,6 +264,34 @@ int ipv4ll_configure(Link *link) { return sd_ipv4ll_set_check_mac_callback(link->ipv4ll, ipv4ll_check_mac, link->manager); } +int ipv4ll_start(Link *link) { + int r; + + assert(link); + + if (!link->ipv4ll) + return 0; + + if (sd_ipv4ll_is_running(link->ipv4ll)) + return 0; + + if (!link_has_carrier(link)) + return 0; + + /* On exit, we cannot and should not start sd-ipv4ll. */ + r = sd_event_get_state(link->manager->event); + if (r < 0) + return r; + if (r == SD_EVENT_FINISHED) + return 0; + + r = sd_ipv4ll_start(link->ipv4ll); + if (r < 0) + return r; + + return 1; /* started */ +} + int link_drop_ipv4ll_config(Link *link, Network *network) { int ret = 0; diff --git a/src/network/networkd-ipv4ll.h b/src/network/networkd-ipv4ll.h index f380afe9ece..71cddbdd5bd 100644 --- a/src/network/networkd-ipv4ll.h +++ b/src/network/networkd-ipv4ll.h @@ -11,6 +11,7 @@ typedef struct Network Network; bool link_ipv4ll_enabled(Link *link); int ipv4ll_configure(Link *link); +int ipv4ll_start(Link *link); int link_drop_ipv4ll_config(Link *link, Network *network); int ipv4ll_update_mac(Link *link); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 64db17c3d34..b13b668c1a3 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -728,11 +728,11 @@ static int link_acquire_dynamic_ipv4_conf(Link *link) { return log_link_warning_errno(link, r, "Could not set IPv4 link-local start address: %m"); } - r = sd_ipv4ll_start(link->ipv4ll); + r = ipv4ll_start(link); if (r < 0) return log_link_warning_errno(link, r, "Could not acquire IPv4 link-local address: %m"); - - log_link_debug(link, "Acquiring IPv4 link-local address."); + if (r > 0) + log_link_debug(link, "Acquiring IPv4 link-local address."); } r = link_start_dhcp4_server(link);