summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-06-10 05:36:32 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-06-16 23:17:28 +0900
commit1a65093774862728d1eed1411d692101581c0db8 (patch)
tree7f4d1e437136c929e1e82d680038bfdcadd34ac6
parentac999bf07dcc9ed628115eacfcc7d94f582b5ad7 (diff)
downloadsystemd-1a65093774862728d1eed1411d692101581c0db8.tar.gz
timesync: judging if network is online by networkd's address state
Closes #12752.
-rw-r--r--src/libsystemd/sd-network/network-util.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libsystemd/sd-network/network-util.c b/src/libsystemd/sd-network/network-util.c
index 8daa15fdcb..08ed942638 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;