...
1 package internal
2
3 import (
4 "net"
5 "net/netip"
6 )
7
8
9 func PairTunnelIPs(subnet *net.IPNet) ([]*net.IPNet, error) {
10 addressPairings := []*net.IPNet{}
11
12 prefix, err := netip.ParsePrefix(subnet.String())
13 if err != nil {
14 return nil, err
15 }
16
17 prefix = prefix.Masked()
18 addr := prefix.Addr()
19 for {
20 if !prefix.Contains(addr) {
21 break
22 }
23
24 ip := net.IP(addr.AsSlice()).String() + "/31"
25 _, nextPairedSubnet, _ := net.ParseCIDR(ip)
26 addr = addr.Next()
27
28 if !prefix.Contains(addr) {
29 break
30 }
31
32 addr = addr.Next()
33
34 addressPairings = append(addressPairings, nextPairedSubnet)
35 }
36
37 return addressPairings, nil
38 }
39
View as plain text