From 910feb787f5fa756076b8e55d8e18d7140952026 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 22 May 2019 14:49:46 +0900 Subject: [PATCH] network: unify link_ipv4ll_enabled() and link_ipv4ll_fallback_enabled() --- src/network/networkd-dhcp4.c | 2 +- src/network/networkd-link.c | 35 +++++++---------------------------- src/network/networkd-link.h | 4 ++-- 3 files changed, 10 insertions(+), 31 deletions(-) diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 7907988a9b..b170906f21 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -554,7 +554,7 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { switch (event) { case SD_DHCP_CLIENT_EVENT_STOP: - if (link_ipv4ll_fallback_enabled(link)) { + if (link_ipv4ll_enabled(link, ADDRESS_FAMILY_FALLBACK_IPV4)) { assert(link->ipv4ll); log_link_debug(link, "DHCP client is stopped. Acquiring IPv4 link-local address"); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 9678d4211f..21315f7f65 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -122,8 +122,9 @@ static bool link_dhcp4_server_enabled(Link *link) { return link->network->dhcp_server; } -bool link_ipv4ll_enabled(Link *link) { +bool link_ipv4ll_enabled(Link *link, AddressFamilyBoolean mask) { assert(link); + assert((mask & ~(ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_FALLBACK_IPV4)) == 0); if (link->flags & IFF_LOOPBACK) return false; @@ -141,29 +142,7 @@ bool link_ipv4ll_enabled(Link *link) { if (link->network->bond) return false; - return link->network->link_local & ADDRESS_FAMILY_IPV4; -} - -bool link_ipv4ll_fallback_enabled(Link *link) { - assert(link); - - if (link->flags & IFF_LOOPBACK) - return false; - - if (!link->network) - return false; - - if (STRPTR_IN_SET(link->kind, "vrf", "wireguard", "ipip", "gre", "ip6gre", "ip6tnl", "sit", "vti", "vti6", "can", "vcan")) - return false; - - /* L3 or L3S mode do not support ARP. */ - if (IN_SET(link_get_ipvlan_mode(link), NETDEV_IPVLAN_MODE_L3, NETDEV_IPVLAN_MODE_L3S)) - return false; - - if (link->network->bond) - return false; - - return link->network->link_local & ADDRESS_FAMILY_FALLBACK_IPV4; + return link->network->link_local & mask; } static bool link_ipv6ll_enabled(Link *link) { @@ -975,7 +954,7 @@ void link_check_ready(Link *link) { if (!link->routing_policy_rules_configured) return; - if (link_ipv4ll_enabled(link) && !(link->ipv4ll_address && link->ipv4ll_route)) + if (link_ipv4ll_enabled(link, ADDRESS_FAMILY_IPV4) && !(link->ipv4ll_address && link->ipv4ll_route)) return; if (link_ipv6ll_enabled(link) && @@ -984,7 +963,7 @@ void link_check_ready(Link *link) { if ((link_dhcp4_enabled(link) || link_dhcp6_enabled(link)) && !(link->dhcp4_configured || link->dhcp6_configured) && - !(link_ipv4ll_fallback_enabled(link) && link->ipv4ll_address && link->ipv4ll_route)) + !(link_ipv4ll_enabled(link, ADDRESS_FAMILY_FALLBACK_IPV4) && link->ipv4ll_address && link->ipv4ll_route)) /* When DHCP is enabled, at least one protocol must provide an address, or * an IPv4ll fallback address must be configured. */ return; @@ -1599,7 +1578,7 @@ static int link_acquire_ipv4_conf(Link *link) { assert(link->manager); assert(link->manager->event); - if (link_ipv4ll_enabled(link)) { + if (link_ipv4ll_enabled(link, ADDRESS_FAMILY_IPV4)) { assert(link->ipv4ll); log_link_debug(link, "Acquiring IPv4 link-local address"); @@ -2641,7 +2620,7 @@ static int link_configure(Link *link) { if (r < 0) return r; - if (link_ipv4ll_enabled(link) || link_ipv4ll_fallback_enabled(link)) { + if (link_ipv4ll_enabled(link, ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_FALLBACK_IPV4)) { r = ipv4ll_configure(link); if (r < 0) return r; diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index aa50fc66c1..f8121180c0 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -17,6 +17,7 @@ #include "list.h" #include "log-link.h" #include "network-util.h" +#include "networkd-util.h" #include "set.h" typedef enum LinkState { @@ -160,8 +161,7 @@ int link_ipv6ll_gained(Link *link, const struct in6_addr *address); int link_set_mtu(Link *link, uint32_t mtu); int ipv4ll_configure(Link *link); -bool link_ipv4ll_enabled(Link *link); -bool link_ipv4ll_fallback_enabled(Link *link); +bool link_ipv4ll_enabled(Link *link, AddressFamilyBoolean mask); int dhcp4_configure(Link *link); int dhcp4_set_client_identifier(Link *link);