| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | package localimport (	//"github.com/davecgh/go-spew/spew"	"errors"	"log"	"net"	"os"	"os/exec"	"runtime"	"strings"	"github.com/gravitl/netmaker/netclient/ncutils")// SetIPForwarding - Sets IP forwarding if it's mac or linuxfunc SetIPForwarding() error {	os := runtime.GOOS	var err error	switch os {	case "linux":		err = SetIPForwardingUnix()	case "freebsd":		err = SetIPForwardingFreeBSD()	case "darwin":		err = SetIPForwardingMac()	default:		err = errors.New("this OS is not currently supported")	}	return err}// SetIPForwardingLinux - sets the ipforwarding for linuxfunc SetIPForwardingUnix() error {	// ipv4	out, err := ncutils.RunCmd("sysctl net.ipv4.ip_forward", true)	if err != nil {		log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.")		return err	} else {		s := strings.Fields(string(out))		if s[2] != "1" {			_, err = ncutils.RunCmd("sysctl -w net.ipv4.ip_forward=1", true)			if err != nil {				log.Println("WARNING: Error encountered setting ip forwarding. You may want to investigate this.")				return err			}		}	}	// ipv6	out, err = ncutils.RunCmd("sysctl net.ipv6.conf.all.forwarding", true)	if err != nil {		log.Println("WARNING: Error encountered setting ipv6 forwarding. This can break functionality.")		return err	} else {		s := strings.Fields(string(out))		if s[2] != "1" {			_, err = ncutils.RunCmd("sysctl -w  net.ipv6.conf.all.forwarding=1", true)			if err != nil {				log.Println("WARNING: Error encountered setting ipv6 forwarding. You may want to investigate this.")				return err			}		}	}	return nil}// SetIPForwardingLinux - sets the ipforwarding for linuxfunc SetIPForwardingFreeBSD() error {	out, err := ncutils.RunCmd("sysctl net.inet.ip.forwarding", true)	if err != nil {		log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.")		return err	} else {		s := strings.Fields(string(out))		if s[1] != "1" {			_, err = ncutils.RunCmd("sysctl -w net.inet.ip.forwarding=1", true)			if err != nil {				log.Println("WARNING: Error encountered setting ip forwarding. You may want to investigate this.")				return err			}		}	}	return nil}// SetIPForwardingMac - sets ip forwarding for macfunc SetIPForwardingMac() error {	_, err := ncutils.RunCmd("sysctl -w net.inet.ip.forwarding=1", true)	if err != nil {		log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.")	}	return err}// IsWGInstalled - checks if WireGuard is installedfunc IsWGInstalled() bool {	out, err := ncutils.RunCmd("wg help", true)	if err != nil {		_, err = exec.LookPath(os.Getenv("WG_QUICK_USERSPACE_IMPLEMENTATION"))		return err == nil	}	return strings.Contains(out, "Available subcommand")}// GetMacIface - gets mac interfacefunc GetMacIface(ipstring string) (string, error) {	var wgiface string	_, checknet, err := net.ParseCIDR(ipstring + "/24")	if err != nil {		return wgiface, errors.New("could not parse ip " + ipstring)	}	ifaces, err := net.Interfaces()	if err != nil {		return wgiface, err	}	for _, iface := range ifaces {		addrs, err := iface.Addrs()		if err != nil {			continue		}		for _, addr := range addrs {			ip := addr.(*net.IPNet).IP			if checknet.Contains(ip) {				wgiface = iface.Name				break			}		}	}	if wgiface == "" {		err = errors.New("could not find iface for address " + ipstring)	}	return wgiface, err}// HasNetwork - checks if a network exists locallyfunc HasNetwork(network string) bool {	return ncutils.FileExists(ncutils.GetNetclientPathSpecific() + "netconfig-" + network)}
 |