]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: merge gateway_is_ready() and link_address_is_reachable()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 25 Feb 2022 07:29:26 +0000 (16:29 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 27 Feb 2022 00:36:48 +0000 (09:36 +0900)
As link_address_is_reachable() is used only by gateway_is_ready().

src/network/networkd-route-util.c

index c202078f07d6276ed20f6269ea83b7c691cbd759..e07dbb213cf5bdd4e4882ff5c8a0bc1d2610d7fd 100644 (file)
@@ -102,14 +102,21 @@ int manager_find_uplink(Manager *m, int family, Link *exclude, Link **ret) {
         return 0;
 }
 
-static bool link_address_is_reachable(Link *link, int family, const union in_addr_union *address) {
+bool gateway_is_ready(Link *link, bool onlink, int family, const union in_addr_union *gw) {
         Route *route;
         Address *a;
 
         assert(link);
         assert(link->manager);
-        assert(IN_SET(family, AF_INET, AF_INET6));
-        assert(address);
+
+        if (onlink)
+                return true;
+
+        if (!gw || !in_addr_is_set(family, gw))
+                return true;
+
+        if (family == AF_INET6 && in6_addr_is_link_local(&gw->in6))
+                return true;
 
         SET_FOREACH(route, link->routes) {
                 if (!route_exists(route))
@@ -118,7 +125,7 @@ static bool link_address_is_reachable(Link *link, int family, const union in_add
                         continue;
                 if (!in_addr_is_set(route->family, &route->dst) && route->dst_prefixlen == 0)
                         continue;
-                if (in_addr_prefix_covers(family, &route->dst, route->dst_prefixlen, address) > 0)
+                if (in_addr_prefix_covers(family, &route->dst, route->dst_prefixlen, gw) > 0)
                         return true;
         }
 
@@ -136,29 +143,13 @@ static bool link_address_is_reachable(Link *link, int family, const union in_add
                         continue;
                 if (in_addr_is_set(a->family, &a->in_addr_peer))
                         continue;
-                if (in_addr_prefix_covers(family, &a->in_addr, a->prefixlen, address) > 0)
+                if (in_addr_prefix_covers(family, &a->in_addr, a->prefixlen, gw) > 0)
                         return true;
         }
 
         return false;
 }
 
-bool gateway_is_ready(Link *link, bool onlink, int family, const union in_addr_union *gw) {
-        assert(link);
-        assert(gw);
-
-        if (onlink)
-                return true;
-
-        if (!in_addr_is_set(family, gw))
-                return true;
-
-        if (family == AF_INET6 && in6_addr_is_link_local(&gw->in6))
-                return true;
-
-        return link_address_is_reachable(link, family, gw);
-}
-
 static const char * const route_type_table[__RTN_MAX] = {
         [RTN_UNICAST]     = "unicast",
         [RTN_LOCAL]       = "local",