22 lines
702 B
Python
22 lines
702 B
Python
|
from ipaddress import IPv4Network
|
||
|
|
||
|
AS_NUMBERS = {
|
||
|
# 4290xxxxxx
|
||
|
'home': 4290000138,
|
||
|
'htz-cloud': 4290000137,
|
||
|
'ovh': 4290000001,
|
||
|
}
|
||
|
|
||
|
def get_subnet_for_connection(repo, peer_a, peer_b):
|
||
|
# XXX this assumes there are never more than 128 nodes which match that expression
|
||
|
nodes = sorted({node.name for node in repo.nodes if node.has_bundle('wireguard')})
|
||
|
|
||
|
assert peer_a in nodes
|
||
|
assert peer_b in nodes
|
||
|
|
||
|
pos_peer_a = nodes.index(peer_a)
|
||
|
pos_peer_b = nodes.index(peer_b)
|
||
|
|
||
|
vpn_subnet = list(IPv4Network('169.254.0.0/16').subnets(new_prefix=24))[pos_peer_a]
|
||
|
return list(IPv4Network(vpn_subnet).subnets(new_prefix=31))[pos_peer_b]
|