From 79ac8ba9735b53fb805bdc3f6f9edeccf3985a43 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Wed, 29 Jul 2015 01:34:35 +0200 Subject: networkd-wait-online: fix race We must consider 'pending' links as if they may be managed by networkd, as this is the state we enter before deciding wether networkd should manage the link or not, so we better wait for this decision being made. --- src/network/networkd-wait-online-manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/network/networkd-wait-online-manager.c b/src/network/networkd-wait-online-manager.c index 1fc724f5a4..7a557a728e 100644 --- a/src/network/networkd-wait-online-manager.c +++ b/src/network/networkd-wait-online-manager.c @@ -77,7 +77,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; -- cgit v1.2.3-54-g00ecf From be0c13707dbbc08fb842dbf1cfe162d8cc8cb479 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Wed, 29 Jul 2015 01:41:24 +0200 Subject: networkd-wait-online: only consider interfaces given on the commandline If some interfaces are given on the commandline, ignore all others. --- man/systemd-networkd-wait-online.service.xml | 3 ++- src/network/networkd-wait-online-manager.c | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/man/systemd-networkd-wait-online.service.xml b/man/systemd-networkd-wait-online.service.xml index f53b337daa..bcc5776a8d 100644 --- a/man/systemd-networkd-wait-online.service.xml +++ b/man/systemd-networkd-wait-online.service.xml @@ -80,7 +80,8 @@ several interfaces which will be configured, but a particular one is necessary to access some network resources. This option may be used more than once to wait for multiple network - interfaces. + interfaces. When used, all other interfaces are ignored. + diff --git a/src/network/networkd-wait-online-manager.c b/src/network/networkd-wait-online-manager.c index 7a557a728e..112d92a568 100644 --- a/src/network/networkd-wait-online-manager.c +++ b/src/network/networkd-wait-online-manager.c @@ -38,9 +38,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; -- cgit v1.2.3-54-g00ecf