network/ipv4ll: not necessary to set initial address on each start

This commit is contained in:
Yu Watanabe
2024-11-02 22:42:01 +09:00
parent fecd205d3e
commit 500c61ee49
2 changed files with 16 additions and 13 deletions
+1 -13
View File
@@ -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");
+15
View File
@@ -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;