networkd: configure link even if no routes have been received by dhcp (#6886)
authorSusant Sahani <145210+ssahani@users.noreply.github.com>
Mon, 20 Nov 2017 18:23:34 +0000 (23:53 +0530)
committerLennart Poettering <lennart@poettering.net>
Mon, 20 Nov 2017 18:23:34 +0000 (19:23 +0100)
Fixes #3752

 networkctl
IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           carrier     unmanaged
  2 eth0             ether              no-carrier  configuring
  5 host             ether              routable    configured <==========

5 links listed.

src/network/networkd-dhcp4.c

index 168dc6e..bfce641 100644 (file)
@@ -95,8 +95,10 @@ static int link_set_dhcp_routes(Link *link) {
                 return log_link_warning_errno(link, r, "DHCP error: could not get address: %m");
 
         r = sd_dhcp_lease_get_router(link->dhcp_lease, &gateway);
-        if (r < 0 && r != -ENODATA)
-                return log_link_warning_errno(link, r, "DHCP error: could not get gateway: %m");
+        if (r == -ENODATA)
+                log_link_info_errno(link, r, "DHCP: No routes received from DHCP server: %m");
+        else if (r < 0)
+                log_link_warning_errno(link, r, "DHCP error: could not get gateway: %m");
 
         if (r >= 0) {
                 _cleanup_route_free_ Route *route = NULL;
@@ -148,9 +150,9 @@ static int link_set_dhcp_routes(Link *link) {
 
         n = sd_dhcp_lease_get_routes(link->dhcp_lease, &static_routes);
         if (n == -ENODATA)
-                return 0;
-        if (n < 0)
-                return log_link_warning_errno(link, n, "DHCP error: could not get routes: %m");
+                log_link_info_errno(link, n, "DHCP: No routes received from DHCP server: %m");
+        else if (n < 0)
+                log_link_warning_errno(link, n, "DHCP error: could not get routes: %m");
 
         for (i = 0; i < n; i++) {
                 _cleanup_route_free_ Route *route = NULL;
@@ -175,6 +177,11 @@ static int link_set_dhcp_routes(Link *link) {
                 link->dhcp4_messages++;
         }
 
+        if (link->dhcp4_messages == 0) {
+                link->dhcp4_configured = true;
+                link_check_ready(link);
+        }
+
         return 0;
 }