network/ipv4ll: not necessary to set initial address on each start
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user