]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: ndisc/dhcpv6 - handle starting running clients
authorTom Gundersen <teg@jklm.no>
Mon, 16 Nov 2015 15:46:14 +0000 (16:46 +0100)
committerTom Gundersen <teg@jklm.no>
Mon, 16 Nov 2015 18:14:22 +0000 (19:14 +0100)
The clients may be triggered to be started repeatedly without being stopped first,
simply swallow the error rather than failing the link.

src/libsystemd-network/sd-dhcp6-client.c
src/libsystemd-network/sd-ndisc.c
src/network/networkd-link.c
src/network/networkd-ndisc.c

index a443bb3a7a20b03aa5816fef1b15d616d171d52b..a9518791b31ac058b3eff647d8134f1ce03431f6 100644 (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)
index 0881973e7fb37b914ce1654094bb4171b96d7cf4..6703d87bc4173da04e56e65dab0daa75b175ba7b 100644 (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;
index a415035887ac6edea417cf71fa00f9271fd4eefb..f97600e2b509e90bb156cdd419223a1c86bd3340 100644 (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");
         }
 
index 126f9c0fe9896854bda915cc81eff8e5bdc5b8c0..37c6ec204931a8ee6718c6f908c1f547d0d8c0f1 100644 (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: