timesync: judging if network is online by networkd's address state
Closes #12752.
This commit is contained in:
parent
ac999bf07d
commit
1a65093774
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue