diff --git a/man/networkctl.xml b/man/networkctl.xml index 6b3702bfd3..b0c8b002c0 100644 --- a/man/networkctl.xml +++ b/man/networkctl.xml @@ -69,6 +69,12 @@ The operational status is one of the following: + + missing + + the device is missing + + off diff --git a/src/libsystemd/sd-network/network-util.c b/src/libsystemd/sd-network/network-util.c index 4eb06b91ac..0addabe10a 100644 --- a/src/libsystemd/sd-network/network-util.c +++ b/src/libsystemd/sd-network/network-util.c @@ -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; diff --git a/src/libsystemd/sd-network/network-util.h b/src/libsystemd/sd-network/network-util.h index 1087a1c664..425d192f64 100644 --- a/src/libsystemd/sd-network/network-util.h +++ b/src/libsystemd/sd-network/network-util.h @@ -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, diff --git a/src/network/wait-online/manager.c b/src/network/wait-online/manager.c index e4643418a7..4734ce28ee 100644 --- a/src/network/wait-online/manager.c +++ b/src/network/wait-online/manager.c @@ -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)