chore(deps): upgrade tailscale dependency

This commit is contained in:
Johan Siebens
2022-09-06 13:27:31 +02:00
parent 145ae6ab1d
commit 633f29003c
9 changed files with 122 additions and 73 deletions
+28 -12
View File
@@ -3,18 +3,34 @@ package addr
import (
"github.com/apparentlymart/go-cidr/cidr"
"github.com/jsiebens/ionscale/internal/util"
"inet.af/netaddr"
"math/big"
"net"
"net/netip"
"tailscale.com/net/tsaddr"
)
var ipv4Range = tsaddr.CGNATRange().IPNet()
var (
ipv4Range *net.IPNet
ipv4Count uint64
)
type Predicate func(netaddr.IP) (bool, error)
func init() {
ipv4Range, ipv4Count = prepareIP4Range()
}
func SelectIP(predicate Predicate) (*netaddr.IP, *netaddr.IP, error) {
ip4, err := selectIP(ipv4Range, predicate)
func prepareIP4Range() (*net.IPNet, uint64) {
cgnatRange := tsaddr.CGNATRange()
_, ipNet, err := net.ParseCIDR(cgnatRange.String())
if err != nil {
panic(err)
}
return ipNet, cidr.AddressCount(ipNet)
}
type Predicate func(netip.Addr) (bool, error)
func SelectIP(predicate Predicate) (*netip.Addr, *netip.Addr, error) {
ip4, err := selectIP(predicate)
if err != nil {
return nil, nil, err
}
@@ -22,16 +38,16 @@ func SelectIP(predicate Predicate) (*netaddr.IP, *netaddr.IP, error) {
return ip4, &ip6, err
}
func selectIP(c *net.IPNet, predicate Predicate) (*netaddr.IP, error) {
count := cidr.AddressCount(c)
var n = util.RandUint64(count)
func selectIP(predicate Predicate) (*netip.Addr, error) {
var n = util.RandUint64(ipv4Count)
for {
stdIP, err := cidr.HostBig(c, big.NewInt(int64(n)))
stdIP, err := cidr.HostBig(ipv4Range, big.NewInt(int64(n)))
if err != nil {
return nil, err
}
ip, _ := netaddr.FromStdIP(stdIP)
ip, _ := netip.AddrFromSlice(stdIP)
ok, err := validateIP(ip, predicate)
if err != nil {
return nil, err
@@ -39,11 +55,11 @@ func selectIP(c *net.IPNet, predicate Predicate) (*netaddr.IP, error) {
if ok {
return &ip, nil
}
n = (n + 1) % count
n = (n + 1) % ipv4Count
}
}
func validateIP(ip netaddr.IP, p Predicate) (bool, error) {
func validateIP(ip netip.Addr, p Predicate) (bool, error) {
if tsaddr.IsTailscaleIP(ip) {
if p != nil {
return p(ip)