From 61e964df713b5930a049053a0c4059521007b596 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 21 Jan 2022 05:02:42 +0900 Subject: [PATCH] netif-util: introduce netif_has_carrier() --- src/network/networkd-link.c | 15 --------------- src/network/networkd-link.h | 6 +++++- src/shared/netif-util.c | 15 +++++++++++++++ src/shared/netif-util.h | 1 + 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 89ee8c83670..1f5f4bd41a1 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1802,21 +1802,6 @@ static int link_admin_state_down(Link *link) { return 0; } -bool link_has_carrier(Link *link) { - /* see Documentation/networking/operstates.txt in the kernel sources */ - - if (link->kernel_operstate == IF_OPER_UP) - return true; - - if (link->kernel_operstate == IF_OPER_UNKNOWN) - /* operstate may not be implemented, so fall back to flags */ - if (FLAGS_SET(link->flags, IFF_LOWER_UP | IFF_RUNNING) && - !FLAGS_SET(link->flags, IFF_DORMANT)) - return true; - - return false; -} - static bool link_is_enslaved(Link *link) { if (link->flags & IFF_SLAVE) return true; diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index 8bf1cc67f71..7ccb31df791 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -19,6 +19,7 @@ #include "ether-addr-util.h" #include "log-link.h" +#include "netif-util.h" #include "network-util.h" #include "networkd-util.h" #include "ordered-set.h" @@ -212,7 +213,10 @@ void link_check_ready(Link *link); void link_update_operstate(Link *link, bool also_update_bond_master); -bool link_has_carrier(Link *link); +static inline bool link_has_carrier(Link *link) { + assert(link); + return netif_has_carrier(link->kernel_operstate, link->flags); +} bool link_ipv6_enabled(Link *link); bool link_ipv6ll_enabled(Link *link); diff --git a/src/shared/netif-util.c b/src/shared/netif-util.c index 603d4de109f..69d7cc2b10d 100644 --- a/src/shared/netif-util.c +++ b/src/shared/netif-util.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include "arphrd-util.h" @@ -11,6 +12,20 @@ #include "sparse-endian.h" #include "strv.h" +bool netif_has_carrier(uint8_t operstate, unsigned flags) { + /* see Documentation/networking/operstates.txt in the kernel sources */ + + if (operstate == IF_OPER_UP) + return true; + + if (operstate != IF_OPER_UNKNOWN) + return false; + + /* operstate may not be implemented, so fall back to flags */ + return FLAGS_SET(flags, IFF_LOWER_UP | IFF_RUNNING) && + !FLAGS_SET(flags, IFF_DORMANT); +} + int net_get_type_string(sd_device *device, uint16_t iftype, char **ret) { const char *t; char *p; diff --git a/src/shared/netif-util.h b/src/shared/netif-util.h index c26dab63cf3..fb6a27cce15 100644 --- a/src/shared/netif-util.h +++ b/src/shared/netif-util.h @@ -9,6 +9,7 @@ #include "ether-addr-util.h" +bool netif_has_carrier(uint8_t operstate, unsigned flags); int net_get_type_string(sd_device *device, uint16_t iftype, char **ret); const char *net_get_persistent_name(sd_device *device); int net_get_unique_predictable_data(sd_device *device, bool use_sysname, uint64_t *ret); -- 2.47.3