chiark / gitweb /
sd-network: fix parameter order for sd_network_monitor_new()
[elogind.git] / src / network / networkd-wait-online.c
index a4729f464f12efb322d1a2313ff561a10ecbc6a0..c4783ca2e9e6f44f636947e478be0d58c31df640 100644 (file)
@@ -124,7 +124,7 @@ static bool all_configured(Manager *m) {
 
                 r = sd_rtnl_message_new_link(m->rtnl, &message, RTM_GETLINK, 0);
                 if (r < 0) {
-                        log_warning("colud not create GETLINK message: %s", strerror(-r));
+                        log_warning("could not create GETLINK message: %s", strerror(-r));
                         return false;
                 }
 
@@ -178,13 +178,14 @@ static bool all_configured(Manager *m) {
                         continue;
 
                 r = sd_network_get_link_state(indices[i], &state);
-                if (r != -EUNATCH && (r < 0 || !streq(state, "configured"))) {
-                        /* managed by networkd, but not yet configured */
+                if (r == -EBUSY || (r >= 0 && !streq(state, "configured")))
+                        /* not yet processed by udev, or managed by networkd, but not yet configured */
                         return false;
-                }
 
                 r = sd_network_get_link_operational_state(indices[i], &oper_state);
-                if (r >= 0 && streq(oper_state, "carrier"))
+                if (r >= 0 &&
+                    (streq(oper_state, "degraded") ||
+                     streq(oper_state, "routable")))
                         /* we wait for at least one link to be ready,
                            regardless of who manages it */
                         one_ready = true;
@@ -203,6 +204,8 @@ static int monitor_event_handler(sd_event_source *s, int fd, uint32_t revents,
         if (all_configured(m))
                 sd_event_exit(m->event, 0);
 
+        sd_network_monitor_flush(m->monitor);
+
         return 1;
 }
 
@@ -219,7 +222,6 @@ void manager_free(Manager *m) {
 int main(int argc, char *argv[]) {
         _cleanup_manager_free_ Manager *m = NULL;
         _cleanup_event_source_unref_ sd_event_source *event_source = NULL;
-        _cleanup_network_monitor_unref_ sd_network_monitor *monitor = NULL;
         int r, fd, events;
 
         umask(0022);
@@ -238,25 +240,31 @@ int main(int argc, char *argv[]) {
         if (!m)
                 return log_oom();
 
-        r = sd_network_monitor_new(NULL, &monitor);
+        r = sd_event_new(&m->event);
         if (r < 0) {
-                log_error("Could not create monitor: %s", strerror(-r));
+                log_error("Could not create event: %s", strerror(-r));
                 goto out;
         }
 
-        r = sd_event_new(&m->event);
+        r = sd_rtnl_open(&m->rtnl, 0);
         if (r < 0) {
-                log_error("Could not create event: %s", strerror(-r));
+                log_error("Could not create rtnl: %s", strerror(-r));
+                goto out;
+        }
+
+        r = sd_network_monitor_new(&m->monitor, NULL);
+        if (r < 0) {
+                log_error("Could not create monitor: %s", strerror(-r));
                 goto out;
         }
 
-        fd = sd_network_monitor_get_fd(monitor);
+        fd = sd_network_monitor_get_fd(m->monitor);
         if (fd < 0) {
                 log_error("Could not get monitor fd: %s", strerror(-r));
                 goto out;
         }
 
-        events = sd_network_monitor_get_events(monitor);
+        events = sd_network_monitor_get_events(m->monitor);
         if (events < 0) {
                 log_error("Could not get monitor events: %s", strerror(-r));
                 goto out;
@@ -269,12 +277,6 @@ int main(int argc, char *argv[]) {
                 goto out;
         }
 
-        r = sd_rtnl_open(&m->rtnl, 0);
-        if (r < 0) {
-                log_error("Could not create rtnl: %s", strerror(-r));
-                goto out;
-        }
-
         if (all_configured(m)) {
                 r = 0;
                 goto out;