]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/address-pool: split-out address_intersect()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 22 Aug 2023 03:14:40 +0000 (12:14 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 22 Aug 2023 03:30:13 +0000 (12:30 +0900)
No functional change, just refactoring and preparation for later
commits.

src/network/networkd-address-pool.c

index 51f092ac69c15c26a8b02ddac44ed04d21c6116b..c8c6b82fc1fd1b2d8cb6bcfa72cee6aa1c3e99ce 100644 (file)
@@ -84,42 +84,44 @@ int address_pool_setup_default(Manager *m) {
         return 0;
 }
 
+static bool address_intersect(
+                const Address *a,
+                int family,
+                const union in_addr_union *u,
+                unsigned prefixlen) {
+
+        assert(a);
+        assert(u);
+
+        if (a->family != family)
+                return false;
+
+        return in_addr_prefix_intersect(family, u, prefixlen, &a->in_addr, a->prefixlen);
+}
+
 static bool address_pool_prefix_is_taken(
                 AddressPool *p,
                 const union in_addr_union *u,
                 unsigned prefixlen) {
 
+        Address *a;
         Link *l;
         Network *n;
 
         assert(p);
         assert(u);
 
-        HASHMAP_FOREACH(l, p->manager->links_by_index) {
-                Address *a;
-
-                /* Don't clash with assigned addresses */
-                SET_FOREACH(a, l->addresses) {
-                        if (a->family != p->family)
-                                continue;
-
-                        if (in_addr_prefix_intersect(p->family, u, prefixlen, &a->in_addr, a->prefixlen))
+        /* Don't clash with assigned addresses. */
+        HASHMAP_FOREACH(l, p->manager->links_by_index)
+                SET_FOREACH(a, l->addresses)
+                        if (address_intersect(a, p->family, u, prefixlen))
                                 return true;
-                }
-        }
 
-        /* And don't clash with configured but un-assigned addresses either */
-        ORDERED_HASHMAP_FOREACH(n, p->manager->networks) {
-                Address *a;
-
-                ORDERED_HASHMAP_FOREACH(a, n->addresses_by_section) {
-                        if (a->family != p->family)
-                                continue;
-
-                        if (in_addr_prefix_intersect(p->family, u, prefixlen, &a->in_addr, a->prefixlen))
+        /* And don't clash with configured but un-assigned addresses either. */
+        ORDERED_HASHMAP_FOREACH(n, p->manager->networks)
+                ORDERED_HASHMAP_FOREACH(a, n->addresses_by_section)
+                        if (address_intersect(a, p->family, u, prefixlen))
                                 return true;
-                }
-        }
 
         return false;
 }