Browse Source

userspace implementation

afeiszli 3 years ago
parent
commit
50250d5859

+ 2 - 0
netclient/functions/common.go

@@ -109,6 +109,8 @@ func Uninstall() error {
 		daemon.CleanupWindows()
 		daemon.CleanupWindows()
 	} else if ncutils.IsMac() {
 	} else if ncutils.IsMac() {
 		daemon.CleanupMac()
 		daemon.CleanupMac()
+	} else if !ncutils.IsKernel() {
+		ncutils.PrintLog("manual cleanup required",1)
 	}
 	}
 
 
 	return err
 	return err

+ 3 - 3
netclient/local/local.go

@@ -8,6 +8,7 @@ import (
 	"runtime"
 	"runtime"
 	"strings"
 	"strings"
 	"os/exec"
 	"os/exec"
+	"os"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 	"github.com/gravitl/netmaker/netclient/ncutils"
 )
 )
 
 
@@ -54,9 +55,8 @@ func SetIPForwardingMac() error {
 func IsWGInstalled() bool {
 func IsWGInstalled() bool {
 	out, err := ncutils.RunCmd("wg help", true)
 	out, err := ncutils.RunCmd("wg help", true)
 	if err != nil {
 	if err != nil {
-		_, err1 := exec.LookPath("wireguard-go")
-		_, err2 := exec.LookPath("boringtun")
-		return err1 == nil || err2 == nil
+		_, err = exec.LookPath(os.Getenv("WG_QUICK_USERSPACE_IMPLEMENTATION"))
+		return err == nil
 	}
 	}
 	return strings.Contains(out, "Available subcommand")
 	return strings.Contains(out, "Available subcommand")
 }
 }

+ 7 - 5
netclient/main.go

@@ -341,14 +341,16 @@ func main() {
 		}
 		}
 
 
 		_, err = exec.LookPath("wg")
 		_, err = exec.LookPath("wg")
+		uspace := ncutils.GetWireGuard()
 		if err != nil {
 		if err != nil {
-			userspace := os.Getenv("WG_QUICK_USERSPACE_IMPLEMENTATION")
-			if userspace == "" {
+			if uspace == "wg" {
 				log.Println(err)
 				log.Println(err)
 				log.Fatal("WireGuard not installed. Please install WireGuard (wireguard-tools) and try again.")
 				log.Fatal("WireGuard not installed. Please install WireGuard (wireguard-tools) and try again.")
-			}
-			ncutils.PrintLog("Running with userspace wireguard: "+userspace, 0)
-		}
+			} 
+			ncutils.PrintLog("Running with userspace wireguard: "+uspace, 0)
+		} else if uspace != "wg" {
+			log.Println("running userspace WireGuard with "+uspace )
+		} 
 	}
 	}
 	if !ncutils.IsKernel() {
 	if !ncutils.IsKernel() {
 		if !local.IsWGInstalled() {
 		if !local.IsWGInstalled() {

+ 9 - 1
netclient/ncutils/netclientutils.go

@@ -48,11 +48,19 @@ func IsLinux() bool {
 	return runtime.GOOS == "linux"
 	return runtime.GOOS == "linux"
 }
 }
 
 
+func GetWireGuard() string {
+	userspace := os.Getenv("WG_QUICK_USERSPACE_IMPLEMENTATION")
+	if userspace != "" && (userspace == "boringtun" || userspace == "wireguard-go") {
+		return userspace
+	}
+	return "wg"
+}
+
 func IsKernel() bool {
 func IsKernel() bool {
 	//TODO
 	//TODO
 	//Replace && true with some config file value
 	//Replace && true with some config file value
 	//This value should be something like kernelmode, which should be 'on' by default.
 	//This value should be something like kernelmode, which should be 'on' by default.
-	return IsLinux() && true
+	return IsLinux() && os.Getenv("WG_QUICK_USERSPACE_IMPLEMENTATION") == ""
 }
 }
 
 
 // == database returned nothing error ==
 // == database returned nothing error ==

+ 1 - 1
netclient/wireguard/common.go

@@ -45,7 +45,7 @@ func SetPeers(iface string, keepalive int32, peers []wgtypes.PeerConfig) error {
 		for _, currentPeer := range devicePeers {
 		for _, currentPeer := range devicePeers {
 			if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
 			if currentPeer.AllowedIPs[0].String() == peer.AllowedIPs[0].String() &&
 				currentPeer.PublicKey.String() != peer.PublicKey.String() {
 				currentPeer.PublicKey.String() != peer.PublicKey.String() {
-				_, err := ncutils.RunCmd("wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
+				_, err := ncutils.RunCmd( "wg set "+iface+" peer "+currentPeer.PublicKey.String()+" remove", true)
 				if err != nil {
 				if err != nil {
 					log.Println("error removing peer", peer.Endpoint.String())
 					log.Println("error removing peer", peer.Endpoint.String())
 				}
 				}