From: Yu Watanabe Date: Tue, 22 Aug 2023 03:14:40 +0000 (+0900) Subject: network/address-pool: split-out address_intersect() X-Git-Tag: v255-rc1~648^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4212d6a1223fde8cc08a272776270c920317cae1;p=thirdparty%2Fsystemd.git network/address-pool: split-out address_intersect() No functional change, just refactoring and preparation for later commits. --- diff --git a/src/network/networkd-address-pool.c b/src/network/networkd-address-pool.c index 51f092ac69c..c8c6b82fc1f 100644 --- a/src/network/networkd-address-pool.c +++ b/src/network/networkd-address-pool.c @@ -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; }