diff --git a/src/network/networkd-address-pool.c b/src/network/networkd-address-pool.c index a9f8872760..c60ece5db8 100644 --- a/src/network/networkd-address-pool.c +++ b/src/network/networkd-address-pool.c @@ -107,6 +107,15 @@ static bool address_pool_prefix_is_taken( return true; } + /* Don't clash with assigned foreign addresses */ + SET_FOREACH(a, l->addresses_foreign) { + if (a->family != p->family) + continue; + + if (in_addr_prefix_intersect(p->family, u, prefixlen, &a->in_addr, a->prefixlen)) + return true; + } + /* Don't clash with addresses already pulled from the pool, but not assigned yet */ SET_FOREACH(a, l->pool_addresses) { if (a->family != p->family)