]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
wait-online: Support waiting for interfaces to disappear 14536/head
authorDaan De Meyer <daan.de_meyer@otnsystems.com>
Tue, 14 Jan 2020 13:08:03 +0000 (14:08 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sat, 18 Jan 2020 17:17:25 +0000 (18:17 +0100)
man/networkctl.xml
src/libsystemd/sd-network/network-util.c
src/libsystemd/sd-network/network-util.h
src/network/wait-online/manager.c

index 6b3702bfd3c380c19e2d20f6dfb2d44b02b88b66..b0c8b002c050169bb7a7c64c232ea97c57dc5d0d 100644 (file)
 
         <para>The operational status is one of the following:
             <variablelist>
+              <varlistentry>
+                <term>missing</term>
+                <listitem>
+                    <para>the device is missing</para>
+                </listitem>
+              </varlistentry>
               <varlistentry>
                 <term>off</term>
                 <listitem>
index 4eb06b91ac93ed0d805a4fd262eb3e0c81e10d2c..0addabe10a2496338e2f9a4182604cb96b0b8a3a 100644 (file)
@@ -26,6 +26,7 @@ bool network_is_online(void) {
 }
 
 static const char* const link_operstate_table[_LINK_OPERSTATE_MAX] = {
+        [LINK_OPERSTATE_MISSING]          = "missing",
         [LINK_OPERSTATE_OFF]              = "off",
         [LINK_OPERSTATE_NO_CARRIER]       = "no-carrier",
         [LINK_OPERSTATE_DORMANT]          = "dormant",
@@ -91,7 +92,7 @@ int parse_operational_state_range(const char *str, LinkOperationalStateRange *ou
                 return -EINVAL;
 
         if (range.min == _LINK_OPERSTATE_INVALID)
-                range.min = LINK_OPERSTATE_OFF;
+                range.min = LINK_OPERSTATE_MISSING;
         if (range.max == _LINK_OPERSTATE_INVALID)
                 range.max = LINK_OPERSTATE_ROUTABLE;
 
index 1087a1c664411bea4dd30d133fd9f6e6cdc2d8c0..425d192f6402a6dc6bdea3d1f98be73427718a71 100644 (file)
@@ -8,6 +8,7 @@
 bool network_is_online(void);
 
 typedef enum LinkOperationalState {
+        LINK_OPERSTATE_MISSING,
         LINK_OPERSTATE_OFF,
         LINK_OPERSTATE_NO_CARRIER,
         LINK_OPERSTATE_DORMANT,
index e4643418a74d9a1dfc5a4224e64b92a81daec4d9..4734ce28ee5c1fbec2fa121adb15ac3eff5a87ef 100644 (file)
@@ -78,6 +78,11 @@ bool manager_configured(Manager *m) {
                         LinkOperationalStateRange *range = p;
 
                         l = hashmap_get(m->links_by_name, ifname);
+                        if (!l && range->min == LINK_OPERSTATE_MISSING) {
+                                one_ready = true;
+                                continue;
+                        }
+
                         if (!l) {
                                 log_debug("still waiting for %s", ifname);
                                 if (!m->any)