Browse Source

Merge pull request #1140 from gravitl/refactor_0.14.2_iplib

Refactor 0.14.2 iplib
dcarns 3 years ago
parent
commit
3cda73fe58

+ 2 - 1
controllers/network_test.go

@@ -289,6 +289,7 @@ func TestIpv6Network(t *testing.T) {
 
 
 	database.InitializeDatabase()
 	database.InitializeDatabase()
 	os.Setenv("MASTER_KEY", "secretkey")
 	os.Setenv("MASTER_KEY", "secretkey")
+	deleteAllNetworks()
 	createNet()
 	createNet()
 	createNetDualStack()
 	createNetDualStack()
 	network, err := logic.GetNetwork("skynet6")
 	network, err := logic.GetNetwork("skynet6")
@@ -300,7 +301,7 @@ func TestIpv6Network(t *testing.T) {
 	nodeErr := logic.CreateNode(&node1)
 	nodeErr := logic.CreateNode(&node1)
 	t.Run("Test node on network IPv6", func(t *testing.T) {
 	t.Run("Test node on network IPv6", func(t *testing.T) {
 		assert.Nil(t, nodeErr)
 		assert.Nil(t, nodeErr)
-		assert.Equal(t, node1.Address6, "fde6:be04:fa5e:d076::1")
+		assert.Equal(t, "fde6:be04:fa5e:d076::", node1.Address6)
 	})
 	})
 }
 }
 
 

+ 1 - 2
go.mod

@@ -32,11 +32,11 @@ require (
 require (
 require (
 	filippo.io/edwards25519 v1.0.0-rc.1
 	filippo.io/edwards25519 v1.0.0-rc.1
 	fyne.io/fyne/v2 v2.1.4
 	fyne.io/fyne/v2 v2.1.4
+	github.com/c-robinson/iplib v1.0.3
 	github.com/cloverstd/tcping v0.1.1
 	github.com/cloverstd/tcping v0.1.1
 	github.com/guumaster/hostctl v1.1.2
 	github.com/guumaster/hostctl v1.1.2
 	github.com/kr/pretty v0.3.0
 	github.com/kr/pretty v0.3.0
 	github.com/posthog/posthog-go v0.0.0-20211028072449-93c17c49e2b0
 	github.com/posthog/posthog-go v0.0.0-20211028072449-93c17c49e2b0
-	github.com/seancfoley/ipaddress-go v1.1.2
 )
 )
 
 
 require (
 require (
@@ -73,7 +73,6 @@ require (
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/rogpeppe/go-internal v1.8.0 // indirect
 	github.com/rogpeppe/go-internal v1.8.0 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
-	github.com/seancfoley/bintree v1.0.1 // indirect
 	github.com/spf13/afero v1.3.2 // indirect
 	github.com/spf13/afero v1.3.2 // indirect
 	github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 // indirect
 	github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 // indirect
 	github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 // indirect
 	github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 // indirect

+ 2 - 4
go.sum

@@ -19,6 +19,8 @@ github.com/antzucaro/matchr v0.0.0-20210222213004-b04723ef80f0/go.mod h1:v3ZDlfV
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/c-robinson/iplib v1.0.3 h1:NG0UF0GoEsrC1/vyfX1Lx2Ss7CySWl3KqqXh3q4DdPU=
+github.com/c-robinson/iplib v1.0.3/go.mod h1:i3LuuFL1hRT5gFpBRnEydzw8R6yhGkF4szNDIbF8pgo=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cloverstd/tcping v0.1.1 h1:3Yp9nvSDI7Z63zoVQDJzVk1PUczrF9tJoOrKGV30iOk=
 github.com/cloverstd/tcping v0.1.1 h1:3Yp9nvSDI7Z63zoVQDJzVk1PUczrF9tJoOrKGV30iOk=
@@ -200,10 +202,6 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
 github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/seancfoley/bintree v1.0.1 h1:rCb5DEugf2B2DtkrxJ80CP6HT24yohDEcXPOqkQRizo=
-github.com/seancfoley/bintree v1.0.1/go.mod h1:CtE6qO6/n9H3V2CAGEC0lpaYr6/OijhNaMG/dt7P70c=
-github.com/seancfoley/ipaddress-go v1.1.2 h1:zeAUfL7foAPe1pIlT2agp17tgpwzU6YKuEAa2VrRKOw=
-github.com/seancfoley/ipaddress-go v1.1.2/go.mod h1:gR/Gr3Sx+pzusadtM9s98e/tZjvL4YnumYTPcKoHWec=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=

+ 0 - 62
logic/ips/ips.go

@@ -1,62 +0,0 @@
-package ips
-
-import (
-	"fmt"
-	"strings"
-
-	"github.com/seancfoley/ipaddress-go/ipaddr"
-)
-
-// GetFirstAddr - gets the first valid address in a given IPv4 CIDR
-func GetFirstAddr(cidr4 string) (*ipaddr.IPAddress, error) {
-	currentCidr := ipaddr.NewIPAddressString(cidr4).GetAddress()
-	if !currentCidr.IsIPv4() {
-		return nil, fmt.Errorf("invalid IPv4 CIDR provided to GetFirstAddr")
-	}
-	lower := currentCidr.GetLower()
-	ipParts := strings.Split(lower.GetNetIPAddr().IP.String(), ".")
-	if ipParts[len(ipParts)-1] == "0" {
-		lower = lower.Increment(1)
-	}
-	return lower, nil
-}
-
-// GetLastAddr - gets the last valid address in a given IPv4 CIDR
-func GetLastAddr(cidr4 string) (*ipaddr.IPAddress, error) {
-	currentCidr := ipaddr.NewIPAddressString(cidr4).GetAddress()
-	if !currentCidr.IsIPv4() {
-		return nil, fmt.Errorf("invalid IPv4 CIDR provided to GetLastAddr")
-	}
-	upper := currentCidr.GetUpper()
-	ipParts := strings.Split(upper.GetNetIPAddr().IP.String(), ".")
-	if ipParts[len(ipParts)-1] == "255" {
-		upper = upper.Increment(-1)
-	}
-	return upper, nil
-}
-
-// GetFirstAddr6 - gets the first valid IPv6 address in a given IPv6 CIDR
-func GetFirstAddr6(cidr6 string) (*ipaddr.IPAddress, error) {
-	currentCidr := ipaddr.NewIPAddressString(cidr6).GetAddress()
-	if !currentCidr.IsIPv6() {
-		return nil, fmt.Errorf("invalid IPv6 CIDR provided to GetFirstAddr6")
-	}
-	lower := currentCidr.GetLower()
-	ipParts := strings.Split(lower.GetNetIPAddr().IP.String(), "::")
-	if len(ipParts) == 2 {
-		if len(ipParts[len(ipParts)-1]) == 0 {
-			lower = lower.Increment(1)
-		}
-	}
-	return lower, nil
-}
-
-// GetLastAddr6 - gets the last valid IPv6 address in a given IPv6 CIDR
-func GetLastAddr6(cidr6 string) (*ipaddr.IPAddress, error) {
-	currentCidr := ipaddr.NewIPAddressString(cidr6).GetAddress()
-	if !currentCidr.IsIPv6() {
-		return nil, fmt.Errorf("invalid IPv6 CIDR provided to GetLastAddr6")
-	}
-	upper := currentCidr.GetUpper()
-	return upper, nil
-}

+ 0 - 50
logic/ips/ips_test.go

@@ -1,50 +0,0 @@
-package ips_test
-
-import (
-	"testing"
-
-	"github.com/gravitl/netmaker/logic/ips"
-	"github.com/stretchr/testify/assert"
-)
-
-func TestIp4(t *testing.T) {
-	const ipv4Cidr = "192.168.0.0/16"
-	const ipv6Cidr = "fde6:be04:fa5e:d076::/64"
-	//delete all current users
-	t.Run("Valid Ipv4", func(t *testing.T) {
-		_, err := ips.GetFirstAddr(ipv4Cidr)
-		assert.Nil(t, err)
-	})
-	t.Run("Invalid Ipv4", func(t *testing.T) {
-		_, err := ips.GetFirstAddr(ipv6Cidr)
-		assert.NotNil(t, err)
-	})
-	t.Run("Valid IPv6", func(t *testing.T) {
-		_, err := ips.GetFirstAddr6(ipv6Cidr)
-		assert.Nil(t, err)
-	})
-	t.Run("Invalid IPv6", func(t *testing.T) {
-		_, err := ips.GetFirstAddr6(ipv4Cidr)
-		assert.NotNil(t, err)
-	})
-	t.Run("Last IPv4", func(t *testing.T) {
-		addr, err := ips.GetLastAddr(ipv4Cidr)
-		assert.Nil(t, err)
-		assert.Equal(t, addr.GetNetIPAddr().IP.String(), "192.168.255.254")
-	})
-	t.Run("First IPv4", func(t *testing.T) {
-		addr, err := ips.GetFirstAddr(ipv4Cidr)
-		assert.Nil(t, err)
-		assert.Equal(t, addr.GetNetIPAddr().IP.String(), "192.168.0.1")
-	})
-	t.Run("Last IPv6", func(t *testing.T) {
-		last, err := ips.GetLastAddr6(ipv6Cidr)
-		assert.Nil(t, err)
-		assert.Equal(t, last.GetNetIPAddr().IP.String(), "fde6:be04:fa5e:d076:ffff:ffff:ffff:ffff")
-	})
-	t.Run("First IPv6", func(t *testing.T) {
-		first, err := ips.GetFirstAddr6(ipv6Cidr)
-		assert.Nil(t, err)
-		assert.Equal(t, first.GetNetIPAddr().IP.String(), "fde6:be04:fa5e:d076::1")
-	})
-}

+ 36 - 32
logic/networks.go

@@ -8,11 +8,11 @@ import (
 	"os/exec"
 	"os/exec"
 	"strings"
 	"strings"
 
 
+	"github.com/c-robinson/iplib"
 	"github.com/go-playground/validator/v10"
 	"github.com/go-playground/validator/v10"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
-	"github.com/gravitl/netmaker/logic/ips"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/validation"
 	"github.com/gravitl/netmaker/validation"
@@ -185,29 +185,30 @@ func UniqueAddress(networkName string, reverse bool) (string, error) {
 	if network.IsIPv4 == "no" {
 	if network.IsIPv4 == "no" {
 		return "", fmt.Errorf("IPv4 not active on network " + networkName)
 		return "", fmt.Errorf("IPv4 not active on network " + networkName)
 	}
 	}
-
-	newAddr, err := ips.GetFirstAddr(network.AddressRange)
-	if err != nil {
+	//ensure AddressRange is valid
+	if _, _, err := net.ParseCIDR(network.AddressRange); err != nil {
 		logger.Log(0, "UniqueAddress encountered  an error")
 		logger.Log(0, "UniqueAddress encountered  an error")
 		return "666", err
 		return "666", err
 	}
 	}
+	net4 := iplib.Net4FromStr(network.AddressRange)
+	newAddrs := net4.FirstAddress()
 
 
-	incVal := 1
 	if reverse {
 	if reverse {
-		incVal = -1
-		newAddr, err = ips.GetLastAddr(network.AddressRange)
-		if err != nil {
-			if err != nil {
-				logger.Log(0, "UniqueAddressServer encountered  an error")
-				return "666", err
-			}
-		}
+		newAddrs = net4.LastAddress()
 	}
 	}
 
 
-	for ; newAddr.ToAddressString().IsValid(); newAddr = newAddr.Increment(int64(incVal)) {
-		if IsIPUnique(networkName, newAddr.GetNetIPAddr().IP.String(), database.NODES_TABLE_NAME, false) &&
-			IsIPUnique(networkName, newAddr.GetNetIPAddr().IP.String(), database.EXT_CLIENT_TABLE_NAME, false) {
-			return newAddr.GetNetIPAddr().IP.String(), nil
+	for {
+		if IsIPUnique(networkName, newAddrs.String(), database.NODES_TABLE_NAME, false) &&
+			IsIPUnique(networkName, newAddrs.String(), database.EXT_CLIENT_TABLE_NAME, false) {
+			return newAddrs.String(), nil
+		}
+		if reverse {
+			newAddrs, err = net4.PreviousIP(newAddrs)
+		} else {
+			newAddrs, err = net4.NextIP(newAddrs)
+		}
+		if err != nil {
+			break
 		}
 		}
 	}
 	}
 
 
@@ -256,27 +257,30 @@ func UniqueAddress6(networkName string, reverse bool) (string, error) {
 		return "", fmt.Errorf("IPv6 not active on network " + networkName)
 		return "", fmt.Errorf("IPv6 not active on network " + networkName)
 	}
 	}
 
 
-	newAddr6, err := ips.GetFirstAddr6(network.AddressRange6)
-	if err != nil {
+	//ensure AddressRange is valid
+	if _, _, err := net.ParseCIDR(network.AddressRange6); err != nil {
 		return "666", err
 		return "666", err
 	}
 	}
+	net6 := iplib.Net6FromStr(network.AddressRange6)
+	newAddrs := net6.FirstAddress()
 
 
-	incVal := 1
 	if reverse {
 	if reverse {
-		incVal = -1
-		newAddr6, err = ips.GetLastAddr6(network.AddressRange6)
-		if err != nil {
-			if err != nil {
-				logger.Log(0, "UniqueAddress6Server encountered  an error")
-				return "666", err
-			}
-		}
+		newAddrs = net6.LastAddress()
 	}
 	}
 
 
-	for ; newAddr6.ToAddressString().IsValid(); newAddr6 = newAddr6.Increment(int64(incVal)) {
-		if IsIPUnique(networkName, newAddr6.GetNetIPAddr().IP.String(), database.NODES_TABLE_NAME, true) &&
-			IsIPUnique(networkName, newAddr6.GetNetIPAddr().IP.String(), database.EXT_CLIENT_TABLE_NAME, true) {
-			return newAddr6.GetNetIPAddr().IP.String(), nil
+	for {
+
+		if IsIPUnique(networkName, newAddrs.String(), database.NODES_TABLE_NAME, true) &&
+			IsIPUnique(networkName, newAddrs.String(), database.EXT_CLIENT_TABLE_NAME, true) {
+			return newAddrs.String(), nil
+		}
+		if reverse {
+			newAddrs, err = net6.PreviousIP(newAddrs)
+		} else {
+			newAddrs, err = net6.NextIP(newAddrs)
+		}
+		if err != nil {
+			break
 		}
 		}
 	}
 	}
 
 

+ 3 - 4
logic/peers.go

@@ -8,13 +8,13 @@ import (
 	"strings"
 	"strings"
 	"time"
 	"time"
 
 
+	"github.com/c-robinson/iplib"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic/acls"
 	"github.com/gravitl/netmaker/logic/acls"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/servercfg"
 	"github.com/gravitl/netmaker/servercfg"
-	"github.com/seancfoley/ipaddress-go/ipaddr"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 )
 
 
@@ -318,8 +318,7 @@ func GetAllowedIPs(node, peer *models.Node) []net.IPNet {
 
 
 	// handle manually set peers
 	// handle manually set peers
 	for _, allowedIp := range peer.AllowedIPs {
 	for _, allowedIp := range peer.AllowedIPs {
-		currentAddr := ipaddr.NewIPAddressString(allowedIp).GetAddress()
-		if currentAddr.IsIPv4() {
+		if iplib.Version(net.ParseIP(allowedIp)) == 4 {
 			if _, ipnet, err := net.ParseCIDR(allowedIp); err == nil {
 			if _, ipnet, err := net.ParseCIDR(allowedIp); err == nil {
 				nodeEndpointArr := strings.Split(node.Endpoint, ":")
 				nodeEndpointArr := strings.Split(node.Endpoint, ":")
 				if !ipnet.Contains(net.IP(nodeEndpointArr[0])) && ipnet.IP.String() != peer.Address { // don't need to add an allowed ip that already exists..
 				if !ipnet.Contains(net.IP(nodeEndpointArr[0])) && ipnet.IP.String() != peer.Address { // don't need to add an allowed ip that already exists..
@@ -332,7 +331,7 @@ func GetAllowedIPs(node, peer *models.Node) []net.IPNet {
 				}
 				}
 				allowedips = append(allowedips, ipnet)
 				allowedips = append(allowedips, ipnet)
 			}
 			}
-		} else if currentAddr.IsIPv6() {
+		} else if iplib.Version(net.ParseIP(allowedIp)) == 6 {
 			ipnet := net.IPNet{
 			ipnet := net.IPNet{
 				IP:   net.ParseIP(allowedIp),
 				IP:   net.ParseIP(allowedIp),
 				Mask: net.CIDRMask(128, 128),
 				Mask: net.CIDRMask(128, 128),

+ 5 - 5
logic/server.go

@@ -10,13 +10,13 @@ import (
 	"strings"
 	"strings"
 	"time"
 	"time"
 
 
+	"github.com/c-robinson/iplib"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic/acls"
 	"github.com/gravitl/netmaker/logic/acls"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
 	"github.com/gravitl/netmaker/logic/acls/nodeacls"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/servercfg"
 	"github.com/gravitl/netmaker/servercfg"
-	"github.com/seancfoley/ipaddress-go/ipaddr"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 )
 
 
@@ -261,8 +261,7 @@ func GetServerPeers(serverNode *models.Node) ([]wgtypes.PeerConfig, bool, []stri
 
 
 		// handle manually set peers
 		// handle manually set peers
 		for _, allowedIp := range node.AllowedIPs {
 		for _, allowedIp := range node.AllowedIPs {
-			currentIP := ipaddr.NewIPAddressString(allowedIp).GetAddress()
-			if currentIP.IsIPv4() {
+			if iplib.Version(net.ParseIP(allowedIp)) == 4 {
 				if _, ipnet, err := net.ParseCIDR(allowedIp); err == nil {
 				if _, ipnet, err := net.ParseCIDR(allowedIp); err == nil {
 					nodeEndpointArr := strings.Split(node.Endpoint, ":")
 					nodeEndpointArr := strings.Split(node.Endpoint, ":")
 					if !ipnet.Contains(net.IP(nodeEndpointArr[0])) && ipnet.IP.String() != node.Address { // don't need to add an allowed ip that already exists..
 					if !ipnet.Contains(net.IP(nodeEndpointArr[0])) && ipnet.IP.String() != node.Address { // don't need to add an allowed ip that already exists..
@@ -275,9 +274,10 @@ func GetServerPeers(serverNode *models.Node) ([]wgtypes.PeerConfig, bool, []stri
 					}
 					}
 					allowedips = append(allowedips, ipnet)
 					allowedips = append(allowedips, ipnet)
 				}
 				}
-			} else if currentIP.IsIPv6() {
+			} else if iplib.Version(net.ParseIP(allowedIp)) == 6 {
+				//ipnet : = iplib.Net6FromStr(allowedIp).IP()
 				ipnet := net.IPNet{
 				ipnet := net.IPNet{
-					IP:   currentIP.GetNetIP(),
+					IP:   iplib.Net6FromStr(allowedIp).IP(),
 					Mask: net.CIDRMask(128, 128),
 					Mask: net.CIDRMask(128, 128),
 				}
 				}
 				allowedips = append(allowedips, ipnet)
 				allowedips = append(allowedips, ipnet)

+ 3 - 4
netclient/local/routes_darwin.go

@@ -4,9 +4,9 @@ import (
 	"net"
 	"net"
 	"strings"
 	"strings"
 
 
+	"github.com/c-robinson/iplib"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
-	"github.com/seancfoley/ipaddress-go/ipaddr"
 )
 )
 
 
 // route -n add -net 10.0.0.0/8 192.168.0.254
 // route -n add -net 10.0.0.0/8 192.168.0.254
@@ -35,10 +35,9 @@ func deleteRoute(iface string, addr *net.IPNet, address string) error {
 }
 }
 
 
 func setCidr(iface, address string, addr *net.IPNet) {
 func setCidr(iface, address string, addr *net.IPNet) {
-	cidr := ipaddr.NewIPAddressString(addr.String()).GetAddress()
-	if cidr.IsIPv4() {
+	if iplib.Version(addr.IP) == 4 {
 		ncutils.RunCmd("route -q -n add -net "+addr.String()+" "+address, false)
 		ncutils.RunCmd("route -q -n add -net "+addr.String()+" "+address, false)
-	} else if cidr.IsIPv6() {
+	} else if iplib.Version(addr.IP) == 6 {
 		ncutils.RunCmd("route -A inet6 -q -n add -net "+addr.String()+" "+address, false)
 		ncutils.RunCmd("route -A inet6 -q -n add -net "+addr.String()+" "+address, false)
 	} else {
 	} else {
 		logger.Log(1, "could not parse address: "+addr.String())
 		logger.Log(1, "could not parse address: "+addr.String())

+ 3 - 4
netclient/local/routes_freebsd.go

@@ -3,9 +3,9 @@ package local
 import (
 import (
 	"net"
 	"net"
 
 
+	"github.com/c-robinson/iplib"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
-	"github.com/seancfoley/ipaddress-go/ipaddr"
 )
 )
 
 
 func setRoute(iface string, addr *net.IPNet, address string) error {
 func setRoute(iface string, addr *net.IPNet, address string) error {
@@ -21,10 +21,9 @@ func deleteRoute(iface string, addr *net.IPNet, address string) error {
 }
 }
 
 
 func setCidr(iface, address string, addr *net.IPNet) {
 func setCidr(iface, address string, addr *net.IPNet) {
-	cidr := ipaddr.NewIPAddressString(addr.String()).GetAddress()
-	if cidr.IsIPv4() {
+	if iplib.Version(addr.IP) == 4 {
 		ncutils.RunCmd("route add -net "+addr.String()+" -interface "+iface, false)
 		ncutils.RunCmd("route add -net "+addr.String()+" -interface "+iface, false)
-	} else if cidr.IsIPv6() {
+	} else if iplib.Version(addr.IP) == 6 {
 		ncutils.RunCmd("route add -net -inet6 "+addr.String()+" -interface "+iface, false)
 		ncutils.RunCmd("route add -net -inet6 "+addr.String()+" -interface "+iface, false)
 	} else {
 	} else {
 		logger.Log(1, "could not parse address: "+addr.String())
 		logger.Log(1, "could not parse address: "+addr.String())

+ 3 - 4
netclient/local/routes_linux.go

@@ -7,9 +7,9 @@ import (
 	"net"
 	"net"
 	"strings"
 	"strings"
 
 
+	"github.com/c-robinson/iplib"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
-	"github.com/seancfoley/ipaddress-go/ipaddr"
 )
 )
 
 
 func setRoute(iface string, addr *net.IPNet, address string) error {
 func setRoute(iface string, addr *net.IPNet, address string) error {
@@ -30,10 +30,9 @@ func deleteRoute(iface string, addr *net.IPNet, address string) error {
 }
 }
 
 
 func setCidr(iface, address string, addr *net.IPNet) {
 func setCidr(iface, address string, addr *net.IPNet) {
-	cidr := ipaddr.NewIPAddressString(addr.String()).GetAddress()
-	if cidr.IsIPv4() {
+	if iplib.Version(addr.IP) == 4 {
 		ncutils.RunCmd("ip -4 route add "+addr.String()+" dev "+iface, false)
 		ncutils.RunCmd("ip -4 route add "+addr.String()+" dev "+iface, false)
-	} else if cidr.IsIPv6() {
+	} else if iplib.Version(addr.IP) == 6 {
 		ncutils.RunCmd("ip -6 route add "+addr.String()+" dev "+iface, false)
 		ncutils.RunCmd("ip -6 route add "+addr.String()+" dev "+iface, false)
 	} else {
 	} else {
 		logger.Log(1, "could not parse address: "+addr.String())
 		logger.Log(1, "could not parse address: "+addr.String())