]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: unify link_ipv4ll_enabled() and link_ipv4ll_fallback_enabled()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 22 May 2019 05:49:46 +0000 (14:49 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 22 May 2019 08:59:39 +0000 (17:59 +0900)
src/network/networkd-dhcp4.c
src/network/networkd-link.c
src/network/networkd-link.h

index 7907988a9bb9937c41f9c4411bee2f4df6c52987..b170906f2129a22e50bcb7ab29b43e13933de5e0 100644 (file)
@@ -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");
index 9678d4211f53a494e4108dda42892e8f9b7c8687..21315f7f65244af54657bb647da1ab1223b3b5ec 100644 (file)
@@ -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;
index aa50fc66c1242b073d654172e604da011a4054d8..f8121180c0d3a3f9c122346ccbf07a3ed3892aa5 100644 (file)
@@ -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);