mirror of
https://github.com/jsiebens/ionscale.git
synced 2026-03-31 15:07:49 +01:00
chore(deps): upgrade tailscale dependency
This commit is contained in:
+28
-12
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user