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;
}