From 59577d241658b4206e12697f998d48dc87f7e023 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 15 Oct 2024 11:38:55 +0200 Subject: [PATCH] network: add AF_TO_ADDRESS_FAMILY() helper Make some code a bit shorter. --- src/libsystemd/sd-network/network-util.h | 12 ++++++++++++ src/network/networkd-address.c | 7 +------ src/network/networkd-dhcp-common.c | 2 +- src/network/networkd-routing-policy-rule.c | 1 + src/network/networkd-sysctl.c | 6 ++---- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/libsystemd/sd-network/network-util.h b/src/libsystemd/sd-network/network-util.h index 14c6f6819d..80b4cc3cd6 100644 --- a/src/libsystemd/sd-network/network-util.h +++ b/src/libsystemd/sd-network/network-util.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include #include "constants.h" @@ -22,6 +23,17 @@ typedef enum AddressFamily { _ADDRESS_FAMILY_INVALID = -EINVAL, } AddressFamily; +static inline AddressFamily AF_TO_ADDRESS_FAMILY(int af) { + switch (af) { + case AF_INET: + return ADDRESS_FAMILY_IPV4; + case AF_INET6: + return ADDRESS_FAMILY_IPV6; + default: + return ADDRESS_FAMILY_NO; + } +} + typedef enum LinkOperationalState { LINK_OPERSTATE_MISSING, LINK_OPERSTATE_OFF, diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index 0e06149f33..1e37e6e85a 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -644,12 +644,7 @@ static int address_set_masquerade(Address *address, bool add) { if (!address->link->network) return 0; - if (address->family == AF_INET && - !FLAGS_SET(address->link->network->ip_masquerade, ADDRESS_FAMILY_IPV4)) - return 0; - - if (address->family == AF_INET6 && - !FLAGS_SET(address->link->network->ip_masquerade, ADDRESS_FAMILY_IPV6)) + if (!FLAGS_SET(address->link->network->ip_masquerade, AF_TO_ADDRESS_FAMILY(address->family))) return 0; if (address->scope >= RT_SCOPE_LINK) diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c index 1799d04212..8b64dfe8f0 100644 --- a/src/network/networkd-dhcp-common.c +++ b/src/network/networkd-dhcp-common.c @@ -71,7 +71,7 @@ bool link_dhcp_enabled(Link *link, int family) { if (!link->network) return false; - return link->network->dhcp & (family == AF_INET ? ADDRESS_FAMILY_IPV4 : ADDRESS_FAMILY_IPV6); + return link->network->dhcp & AF_TO_ADDRESS_FAMILY(family); } void network_adjust_dhcp(Network *network) { diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c index ec050e3a2d..e2c76616dd 100644 --- a/src/network/networkd-routing-policy-rule.c +++ b/src/network/networkd-routing-policy-rule.c @@ -12,6 +12,7 @@ #include "hashmap.h" #include "ip-protocol-list.h" #include "netlink-util.h" +#include "network-util.h" #include "networkd-manager.h" #include "networkd-queue.h" #include "networkd-route-util.h" diff --git a/src/network/networkd-sysctl.c b/src/network/networkd-sysctl.c index c0762b9b70..17a2c6da38 100644 --- a/src/network/networkd-sysctl.c +++ b/src/network/networkd-sysctl.c @@ -303,9 +303,7 @@ int link_get_ip_forwarding(Link *link, int family) { return t; /* If IPMasquerade= is enabled, also enable IP forwarding. */ - if (family == AF_INET && FLAGS_SET(link->network->ip_masquerade, ADDRESS_FAMILY_IPV4)) - return true; - if (family == AF_INET6 && FLAGS_SET(link->network->ip_masquerade, ADDRESS_FAMILY_IPV6)) + if (FLAGS_SET(link->network->ip_masquerade, AF_TO_ADDRESS_FAMILY(family))) return true; /* If IPv6SendRA= is enabled, also enable IPv6 forwarding. */ @@ -377,7 +375,7 @@ static int link_set_ip_forwarding(Link *link, int family) { /* When IPMasquerade= is enabled and the global setting is unset, enable _global_ IP forwarding, and * re-apply per-link setting for all links. */ - if (FLAGS_SET(link->network->ip_masquerade, family == AF_INET ? ADDRESS_FAMILY_IPV4 : ADDRESS_FAMILY_IPV6) && + if (FLAGS_SET(link->network->ip_masquerade, AF_TO_ADDRESS_FAMILY(family)) && link->manager->ip_forwarding[family == AF_INET6] < 0) { link->manager->ip_forwarding[family == AF_INET6] = true;