]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/network/networkd-wait-online-manager.c
Merge pull request #1700 from ssahani/word
[thirdparty/systemd.git] / src / network / networkd-wait-online-manager.c
index 1c997a50a4b3f4c9790fb06d93f0ff67ca2b4201..0c40ab2bb8ae3fda778da480fd45a293e29b0141 100644 (file)
 #include <linux/if.h>
 #include <fnmatch.h>
 
-#include "rtnl-util.h"
-
+#include "alloc-util.h"
+#include "netlink-util.h"
 #include "network-internal.h"
 #include "networkd-wait-online-link.h"
 #include "networkd-wait-online.h"
-
-#include "util.h"
 #include "time-util.h"
+#include "util.h"
 
 bool manager_ignore_link(Manager *m, Link *link) {
         char **ignore;
@@ -38,9 +37,15 @@ bool manager_ignore_link(Manager *m, Link *link) {
         assert(m);
         assert(link);
 
+        /* always ignore the loopback interface */
         if (link->flags & IFF_LOOPBACK)
                 return true;
 
+        /* if interfaces are given on the command line, ignore all others */
+        if (m->interfaces && !strv_contains(m->interfaces, link->ifname))
+                return true;
+
+        /* ignore interfaces we explicitly are asked to ignore */
         STRV_FOREACH(ignore, m->ignore)
                 if (fnmatch(*ignore, link->ifname, 0) == 0)
                         return true;
@@ -77,7 +82,7 @@ bool manager_all_configured(Manager *m) {
                         return false;
                 }
 
-                if (streq(l->state, "configuring")) {
+                if (STR_IN_SET(l->state, "configuring", "pending")) {
                         log_debug("link %s is being processed by networkd",
                                   l->ifname);
                         return false;
@@ -93,7 +98,7 @@ bool manager_all_configured(Manager *m) {
         return one_ready;
 }
 
-static int manager_process_link(sd_rtnl *rtnl, sd_rtnl_message *mm, void *userdata) {
+static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *userdata) {
         Manager *m = userdata;
         uint16_t type;
         Link *l;
@@ -104,7 +109,7 @@ static int manager_process_link(sd_rtnl *rtnl, sd_rtnl_message *mm, void *userda
         assert(m);
         assert(mm);
 
-        r = sd_rtnl_message_get_type(mm, &type);
+        r = sd_netlink_message_get_type(mm, &type);
         if (r < 0)
                 goto fail;
 
@@ -112,7 +117,7 @@ static int manager_process_link(sd_rtnl *rtnl, sd_rtnl_message *mm, void *userda
         if (r < 0)
                 goto fail;
 
-        r = sd_rtnl_message_read_string(mm, IFLA_IFNAME, &ifname);
+        r = sd_netlink_message_read_string(mm, IFLA_IFNAME, &ifname);
         if (r < 0)
                 goto fail;
 
@@ -155,7 +160,7 @@ fail:
         return 0;
 }
 
-static int on_rtnl_event(sd_rtnl *rtnl, sd_rtnl_message *mm, void *userdata) {
+static int on_rtnl_event(sd_netlink *rtnl, sd_netlink_message *mm, void *userdata) {
         Manager *m = userdata;
         int r;
 
@@ -170,26 +175,26 @@ static int on_rtnl_event(sd_rtnl *rtnl, sd_rtnl_message *mm, void *userdata) {
 }
 
 static int manager_rtnl_listen(Manager *m) {
-        _cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL, *reply = NULL;
-        sd_rtnl_message *i;
+        _cleanup_netlink_message_unref_ sd_netlink_message *req = NULL, *reply = NULL;
+        sd_netlink_message *i;
         int r;
 
         assert(m);
 
         /* First, subscribe to interfaces coming and going */
-        r = sd_rtnl_open(&m->rtnl, 3, RTNLGRP_LINK, RTNLGRP_IPV4_IFADDR, RTNLGRP_IPV6_IFADDR);
+        r = sd_netlink_open(&m->rtnl);
         if (r < 0)
                 return r;
 
-        r = sd_rtnl_attach_event(m->rtnl, m->event, 0);
+        r = sd_netlink_attach_event(m->rtnl, m->event, 0);
         if (r < 0)
                 return r;
 
-        r = sd_rtnl_add_match(m->rtnl, RTM_NEWLINK, on_rtnl_event, m);
+        r = sd_netlink_add_match(m->rtnl, RTM_NEWLINK, on_rtnl_event, m);
         if (r < 0)
                 return r;
 
-        r = sd_rtnl_add_match(m->rtnl, RTM_DELLINK, on_rtnl_event, m);
+        r = sd_netlink_add_match(m->rtnl, RTM_DELLINK, on_rtnl_event, m);
         if (r < 0)
                 return r;
 
@@ -198,15 +203,15 @@ static int manager_rtnl_listen(Manager *m) {
         if (r < 0)
                 return r;
 
-        r = sd_rtnl_message_request_dump(req, true);
+        r = sd_netlink_message_request_dump(req, true);
         if (r < 0)
                 return r;
 
-        r = sd_rtnl_call(m->rtnl, req, 0, &reply);
+        r = sd_netlink_call(m->rtnl, req, 0, &reply);
         if (r < 0)
                 return r;
 
-        for (i = reply; i; i = sd_rtnl_message_next(i)) {
+        for (i = reply; i; i = sd_netlink_message_next(i)) {
                 r = manager_process_link(m->rtnl, i, m);
                 if (r < 0)
                         return r;
@@ -323,7 +328,7 @@ void manager_free(Manager *m) {
         sd_network_monitor_unref(m->network_monitor);
 
         sd_event_source_unref(m->rtnl_event_source);
-        sd_rtnl_unref(m->rtnl);
+        sd_netlink_unref(m->rtnl);
 
         sd_event_unref(m->event);
         free(m);