Fix ips_to_range using XOR instead of subtraction for prefix length
Subtraction underestimates the required prefix when IPs span a CIDR boundary (e.g. .110–.119 gave /28 covering only .96–.111, leaving deckies at .112+ unreachable from the host macvlan route). XOR correctly finds the highest differing bit, yielding /27 (.96–.127). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -208,7 +208,7 @@ def ips_to_range(ips: list[str]) -> str:
|
||||
"""
|
||||
addrs = [IPv4Address(ip) for ip in ips]
|
||||
network = IPv4Network(
|
||||
(int(min(addrs)), 32 - (int(max(addrs)) - int(min(addrs))).bit_length()),
|
||||
(int(min(addrs)), 32 - (int(max(addrs)) ^ int(min(addrs))).bit_length()),
|
||||
strict=False,
|
||||
)
|
||||
return str(network)
|
||||
|
||||
Reference in New Issue
Block a user