From: Yu Watanabe Date: Sun, 9 Jun 2019 20:36:32 +0000 (+0900) Subject: timesync: judging if network is online by networkd's address state X-Git-Tag: v243-rc1~260^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1a65093774862728d1eed1411d692101581c0db8;p=thirdparty%2Fsystemd.git timesync: judging if network is online by networkd's address state Closes #12752. --- diff --git a/src/libsystemd/sd-network/network-util.c b/src/libsystemd/sd-network/network-util.c index 8daa15fdcb7..08ed9426389 100644 --- a/src/libsystemd/sd-network/network-util.c +++ b/src/libsystemd/sd-network/network-util.c @@ -7,14 +7,19 @@ #include "strv.h" bool network_is_online(void) { - _cleanup_free_ char *state = NULL; + _cleanup_free_ char *carrier_state = NULL, *addr_state = NULL; int r; - r = sd_network_get_operational_state(&state); + r = sd_network_get_carrier_state(&carrier_state); if (r < 0) /* if we don't know anything, we consider the system online */ return true; - if (STR_IN_SET(state, "routable", "degraded")) + r = sd_network_get_address_state(&addr_state); + if (r < 0) /* if we don't know anything, we consider the system online */ + return true; + + if (STR_IN_SET(carrier_state, "degraded-carrier", "carrier") && + STR_IN_SET(addr_state, "routable", "degraded")) return true; return false;