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 a443bb3..a951879 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 0881973..6703d87 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 a415035..f97600e 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 126f9c0..37c6ec2 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: