Browse Source

Merge pull request #826 from gravitl/bugfix_v0.11.0_GetFreePort

update logic for getting free udp port
dcarns 3 years ago
parent
commit
2daf2d5960
1 changed files with 7 additions and 21 deletions
  1. 7 21
      netclient/ncutils/netclientutils.go

+ 7 - 21
netclient/ncutils/netclientutils.go

@@ -21,7 +21,6 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/models"
-	"golang.zx2c4.com/wireguard/wgctrl"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials"
 	"google.golang.org/grpc/credentials"
@@ -286,33 +285,20 @@ func GetNetworkIPMask(networkstring string) (string, string, error) {
 
 
 // GetFreePort - gets free port of machine
 // GetFreePort - gets free port of machine
 func GetFreePort(rangestart int32) (int32, error) {
 func GetFreePort(rangestart int32) (int32, error) {
+	addr := net.UDPAddr{}
 	if rangestart == 0 {
 	if rangestart == 0 {
 		rangestart = NETCLIENT_DEFAULT_PORT
 		rangestart = NETCLIENT_DEFAULT_PORT
 	}
 	}
-	wgclient, err := wgctrl.New()
-	if err != nil {
-		return 0, err
-	}
-	defer wgclient.Close()
-	devices, err := wgclient.Devices()
-	if err != nil {
-		return 0, err
-	}
-
 	for x := rangestart; x <= 65535; x++ {
 	for x := rangestart; x <= 65535; x++ {
-		conflict := false
-		for _, i := range devices {
-			if int32(i.ListenPort) == x {
-				conflict = true
-				break
-			}
-		}
-		if conflict {
+		addr.Port = int(x)
+		conn, err := net.ListenUDP("udp", &addr)
+		if err != nil {
 			continue
 			continue
 		}
 		}
-		return int32(x), nil
+		defer conn.Close()
+		return x, nil
 	}
 	}
-	return rangestart, err
+	return rangestart, errors.New("no free ports")
 }
 }
 
 
 // == OS PATH FUNCTIONS ==
 // == OS PATH FUNCTIONS ==