[systemd-devel] [PATCH] networkd: fix systemd-networkd-wait-online with multiple NICs

Nick Owens mischief at offblast.org
Thu Apr 2 15:08:43 PDT 2015


hi, sorry for the delay.

from http://www.freedesktop.org/software/systemd/man/systemd-networkd-wait-online.service.html:

"By default, it will wait for all links it is aware of and which are
managed by systemd-networkd.service(8) to be fully configured or
failed, *and for at least one link to gain a carrier.*".

the import part here is the end of the sentence. without this patch,
systemd-networkd-wait-online will block until all configured
interfaces have carrier.. you can reproduce this by running
systemd-networkd in qemu with two ethernet interfaces, and issue 'info
network' and then 'set_link <if> down' to simulate no carrier. then
you can run systemd-networkd-wait-online, and observe that it will
block until both interfaces are up, not just one.

nick

On Wed, Mar 25, 2015 at 10:53 PM, Andrei Borzenkov <arvidjaar at gmail.com> wrote:
> On Wed, Mar 25, 2015 at 11:49 PM,  <mischief at offblast.org> wrote:
>> From: mischief <mischief at offblast.org>
>>
>> when checking interface status, systemd-networkd-wait-online
>> will continue to wait if any interface is still configuring or
>> being processed by udev. this patch allows it to return if any
>> one interface is degraded/routable, as per the manual.
>
> But current behavior is exactly what manual says: "By default, it will
> wait for all links it is aware of and which are managed by
> systemd-networkd.service(8) to be fully configured or failed". Or do I
> miss something?
>
>> ---
>>  src/network/networkd-wait-online-manager.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/network/networkd-wait-online-manager.c b/src/network/networkd-wait-online-manager.c
>> index 1c997a5..1ac162a 100644
>> --- a/src/network/networkd-wait-online-manager.c
>> +++ b/src/network/networkd-wait-online-manager.c
>> @@ -74,13 +74,13 @@ bool manager_all_configured(Manager *m) {
>>                  if (!l->state) {
>>                          log_debug("link %s has not yet been processed by udev",
>>                                    l->ifname);
>> -                        return false;
>> +                        continue;
>>                  }
>>
>>                  if (streq(l->state, "configuring")) {
>>                          log_debug("link %s is being processed by networkd",
>>                                    l->ifname);
>> -                        return false;
>> +                        continue;
>>                  }
>>
>>                  if (l->operational_state &&
>> --
>> 2.0.5
>>
>> _______________________________________________
>> systemd-devel mailing list
>> systemd-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/systemd-devel


More information about the systemd-devel mailing list