From 4212d6a1223fde8cc08a272776270c920317cae1 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 22 Aug 2023 12:14:40 +0900 Subject: [PATCH] network/address-pool: split-out address_intersect() No functional change, just refactoring and preparation for later commits. --- src/network/networkd-address-pool.c | 46 +++++++++++++++-------------- 1 file changed, 24 insertions(+), 22 deletions(-) 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; } -- 2.47.3