networkd: ndisc/dhcpv6 - handle starting running clients

The clients may be triggered to be started repeatedly without being stopped first,
simply swallow the error rather than failing the link.
This commit is contained in:
Tom Gundersen 2015-11-16 16:46:14 +01:00
parent 5cd6491b71
commit 63348d13fa
4 changed files with 6 additions and 6 deletions

View File

@ -1137,7 +1137,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
assert_return(client->index > 0, -EINVAL);
if (!IN_SET(client->state, DHCP6_STATE_STOPPED))
return -EALREADY;
return -EBUSY;
r = client_reset(client);
if (r < 0)

View File

@ -628,7 +628,7 @@ int sd_ndisc_router_discovery_start(sd_ndisc *nd) {
assert(nd->event);
if (nd->state != NDISC_STATE_IDLE)
return -EINVAL;
return -EBUSY;
if (nd->index < 1)
return -EINVAL;

View File

@ -1264,7 +1264,7 @@ static int link_acquire_ipv6_conf(Link *link) {
log_link_debug(link, "Acquiring DHCPv6 lease");
r = sd_dhcp6_client_start(link->dhcp6_client);
if (r < 0)
if (r < 0 && r != -EBUSY)
return log_link_warning_errno(link, r, "Could not acquire DHCPv6 lease: %m");
}
@ -1274,7 +1274,7 @@ static int link_acquire_ipv6_conf(Link *link) {
log_link_debug(link, "Discovering IPv6 routers");
r = sd_ndisc_router_discovery_start(link->ndisc_router_discovery);
if (r < 0)
if (r < 0 && r != -EBUSY)
return log_link_warning_errno(link, r, "Could not start IPv6 Router Discovery: %m");
}

View File

@ -159,7 +159,7 @@ static void ndisc_router_handler(sd_ndisc *nd, uint8_t flags, const struct in6_a
dhcp6_request_address(link);
r = sd_dhcp6_client_start(link->dhcp6_client);
if (r < 0 && r != -EALREADY)
if (r < 0 && r != -EBUSY)
log_link_warning_errno(link, r, "Starting DHCPv6 client on NDisc request failed: %m");
}
@ -205,7 +205,7 @@ static void ndisc_handler(sd_ndisc *nd, int event, void *userdata) {
dhcp6_request_address(link);
r = sd_dhcp6_client_start(link->dhcp6_client);
if (r < 0 && r != -EALREADY)
if (r < 0 && r != -EBUSY)
log_link_warning_errno(link, r, "Starting DHCPv6 client after NDisc timeout failed: %m");
break;
case SD_NDISC_EVENT_STOP: