Make some code a bit shorter.
#pragma once
#include <errno.h>
+#include <netinet/in.h>
#include <stdbool.h>
#include "constants.h"
_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,
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)
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) {
#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"
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. */
/* 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;