diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index dcdfbe2ac4..e41ed6b334 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -162,25 +162,11 @@ static bool link_radv_enabled(Link *link) { return link->network->router_prefix_delegation != RADV_PREFIX_DELEGATION_NONE; } -static bool link_ipv4_forward_enabled(Link *link) { +bool link_ip_forward_enabled(Link *link, int family) { assert(link); + assert(IN_SET(family, AF_INET, AF_INET6)); - if (link->flags & IFF_LOOPBACK) - return false; - - if (!link->network) - return false; - - if (link->network->ip_forward == _ADDRESS_FAMILY_INVALID) - return false; - - return link->network->ip_forward & ADDRESS_FAMILY_IPV4; -} - -static bool link_ipv6_forward_enabled(Link *link) { - assert(link); - - if (!socket_ipv6_is_supported()) + if (family == AF_INET6 && !socket_ipv6_is_supported()) return false; if (link->flags & IFF_LOOPBACK) @@ -189,10 +175,7 @@ static bool link_ipv6_forward_enabled(Link *link) { if (!link->network) return false; - if (link->network->ip_forward == _ADDRESS_FAMILY_INVALID) - return false; - - return link->network->ip_forward & ADDRESS_FAMILY_IPV6; + return link->network->ip_forward & (family == AF_INET ? ADDRESS_FAMILY_IPV4 : ADDRESS_FAMILY_IPV6); } static bool link_proxy_arp_enabled(Link *link) { diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index 25c7bd98da..6a4ef4f6bf 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -227,6 +227,14 @@ bool link_has_carrier(Link *link); bool link_ipv6ll_enabled(Link *link); int link_ipv6ll_gained(Link *link, const struct in6_addr *address); +bool link_ip_forward_enabled(Link *link, int family); +static inline bool link_ipv4_forward_enabled(Link *link) { + return link_ip_forward_enabled(link, AF_INET); +} +static inline bool link_ipv6_forward_enabled(Link *link) { + return link_ip_forward_enabled(link, AF_INET6); +} + int link_set_mtu(Link *link, uint32_t mtu); bool link_ipv4ll_enabled(Link *link, AddressFamily mask);