diff options
Diffstat (limited to 'src/libsystemd-network/network-internal.c')
-rw-r--r-- | src/libsystemd-network/network-internal.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index 52e614c4ea..e7ba628fc7 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -326,3 +326,17 @@ int net_parse_inaddr(const char *address, unsigned char *family, void *dst) { return 0; } + +bool link_has_carrier(unsigned flags, uint8_t operstate) { + /* see Documentation/networking/operstates.txt in the kernel sources */ + + if (operstate == IF_OPER_UP) + return true; + + if (operstate == IF_OPER_UNKNOWN) + /* operstate may not be implemented, so fall back to flags */ + if ((flags & IFF_LOWER_UP) && !(flags & IFF_DORMANT)) + return true; + + return false; +} |