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]
|
addrs = [IPv4Address(ip) for ip in ips]
|
||||||
network = IPv4Network(
|
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,
|
strict=False,
|
||||||
)
|
)
|
||||||
return str(network)
|
return str(network)
|
||||||
|
|||||||
Reference in New Issue
Block a user