123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package logic
- import (
- "net"
- "os/exec"
- "strings"
- "github.com/gravitl/netmaker/database"
- "github.com/gravitl/netmaker/models"
- "github.com/gravitl/netmaker/netclient/ncutils"
- )
- // CheckNetworkExists - checks i a network exists for this netmaker instance
- func CheckNetworkExists(network string) bool {
- var _, err = database.FetchRecord(database.NETWORKS_TABLE_NAME, network)
- return err == nil
- }
- // GetLocalIP - gets the local ip
- func GetLocalIP(node models.Node) string {
- var local string
- ifaces, err := net.Interfaces()
- if err != nil {
- return local
- }
- _, localrange, err := net.ParseCIDR(node.LocalRange)
- if err != nil {
- return local
- }
- found := false
- for _, i := range ifaces {
- if i.Flags&net.FlagUp == 0 {
- continue // interface down
- }
- if i.Flags&net.FlagLoopback != 0 {
- continue // loopback interface
- }
- addrs, err := i.Addrs()
- if err != nil {
- return local
- }
- for _, addr := range addrs {
- var ip net.IP
- switch v := addr.(type) {
- case *net.IPNet:
- if !found {
- ip = v.IP
- local = ip.String()
- if node.IsLocal == "yes" {
- found = localrange.Contains(ip)
- } else {
- found = true
- }
- }
- case *net.IPAddr:
- if !found {
- ip = v.IP
- local = ip.String()
- if node.IsLocal == "yes" {
- found = localrange.Contains(ip)
- } else {
- found = true
- }
- }
- }
- }
- }
- return local
- }
- // == Private ==
- func deleteInterface(ifacename string, postdown string) error {
- var err error
- if !ncutils.IsKernel() {
- err = RemoveConf(ifacename, true)
- } else {
- ipExec, errN := exec.LookPath("ip")
- err = errN
- if err != nil {
- ncutils.PrintLog(err.Error(), 1)
- }
- _, err = ncutils.RunCmd(ipExec+" link del "+ifacename, false)
- if postdown != "" {
- runcmds := strings.Split(postdown, "; ")
- err = ncutils.RunCmds(runcmds, true)
- }
- }
- return err
- }
- func isInterfacePresent(iface string, address string) (string, bool) {
- var interfaces []net.Interface
- var err error
- interfaces, err = net.Interfaces()
- if err != nil {
- Log("ERROR: could not read interfaces", 0)
- return "", true
- }
- for _, currIface := range interfaces {
- var currAddrs []net.Addr
- currAddrs, err = currIface.Addrs()
- if err != nil || len(currAddrs) == 0 {
- continue
- }
- for _, addr := range currAddrs {
- if strings.Contains(addr.String(), address) && currIface.Name != iface {
- return currIface.Name, false
- }
- }
- }
- return "", true
- }
|