123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package local
- import (
- //"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 linux
- func 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 linux
- func SetIPForwardingUnix() error {
- 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
- }
- }
- }
- return nil
- }
- // SetIPForwardingLinux - sets the ipforwarding for linux
- func 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 mac
- func 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 installed
- func 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 interface
- func 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 locally
- func HasNetwork(network string) bool {
- return ncutils.FileExists(ncutils.GetNetclientPathSpecific() + "netconfig-" + network)
- }
|