summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2015-11-16 16:46:14 +0100
committerTom Gundersen <teg@jklm.no>2015-11-16 19:14:22 +0100
commit63348d13fae61fefcb29133bfae8371b33cf4b6d (patch)
treeecd7647f18a465420cdb9c77a7cc79b3e5fe3db4
parent5cd6491b71008334daa9965464e038dc3e39948a (diff)
downloadsystemd-63348d13fae61fefcb29133bfae8371b33cf4b6d.tar.gz
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.
-rw-r--r--src/libsystemd-network/sd-dhcp6-client.c2
-rw-r--r--src/libsystemd-network/sd-ndisc.c2
-rw-r--r--src/network/networkd-link.c4
-rw-r--r--src/network/networkd-ndisc.c4
4 files changed, 6 insertions, 6 deletions
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
index a443bb3a7a..a9518791b3 100644
--- a/src/libsystemd-network/sd-dhcp6-client.c
+++ b/src/libsystemd-network/sd-dhcp6-client.c
@@ -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)
diff --git a/src/libsystemd-network/sd-ndisc.c b/src/libsystemd-network/sd-ndisc.c
index 0881973e7f..6703d87bc4 100644
--- a/src/libsystemd-network/sd-ndisc.c
+++ b/src/libsystemd-network/sd-ndisc.c
@@ -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;
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index a415035887..f97600e2b5 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -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");
}
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index 126f9c0fe9..37c6ec2049 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -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: