2
0

network.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package logic
  2. import (
  3. "net"
  4. "os/exec"
  5. "strings"
  6. "github.com/gravitl/netmaker/database"
  7. "github.com/gravitl/netmaker/models"
  8. "github.com/gravitl/netmaker/netclient/ncutils"
  9. )
  10. // CheckNetworkExists - checks i a network exists for this netmaker instance
  11. func CheckNetworkExists(network string) bool {
  12. var _, err = database.FetchRecord(database.NETWORKS_TABLE_NAME, network)
  13. return err == nil
  14. }
  15. // GetLocalIP - gets the local ip
  16. func GetLocalIP(node models.Node) string {
  17. var local string
  18. ifaces, err := net.Interfaces()
  19. if err != nil {
  20. return local
  21. }
  22. _, localrange, err := net.ParseCIDR(node.LocalRange)
  23. if err != nil {
  24. return local
  25. }
  26. found := false
  27. for _, i := range ifaces {
  28. if i.Flags&net.FlagUp == 0 {
  29. continue // interface down
  30. }
  31. if i.Flags&net.FlagLoopback != 0 {
  32. continue // loopback interface
  33. }
  34. addrs, err := i.Addrs()
  35. if err != nil {
  36. return local
  37. }
  38. for _, addr := range addrs {
  39. var ip net.IP
  40. switch v := addr.(type) {
  41. case *net.IPNet:
  42. if !found {
  43. ip = v.IP
  44. local = ip.String()
  45. if node.IsLocal == "yes" {
  46. found = localrange.Contains(ip)
  47. } else {
  48. found = true
  49. }
  50. }
  51. case *net.IPAddr:
  52. if !found {
  53. ip = v.IP
  54. local = ip.String()
  55. if node.IsLocal == "yes" {
  56. found = localrange.Contains(ip)
  57. } else {
  58. found = true
  59. }
  60. }
  61. }
  62. }
  63. }
  64. return local
  65. }
  66. // == Private ==
  67. func deleteInterface(ifacename string, postdown string) error {
  68. var err error
  69. if !ncutils.IsKernel() {
  70. err = RemoveConf(ifacename, true)
  71. } else {
  72. ipExec, errN := exec.LookPath("ip")
  73. err = errN
  74. if err != nil {
  75. ncutils.PrintLog(err.Error(), 1)
  76. }
  77. _, err = ncutils.RunCmd(ipExec+" link del "+ifacename, false)
  78. if postdown != "" {
  79. runcmds := strings.Split(postdown, "; ")
  80. err = ncutils.RunCmds(runcmds, true)
  81. }
  82. }
  83. return err
  84. }
  85. func isInterfacePresent(iface string, address string) (string, bool) {
  86. var interfaces []net.Interface
  87. var err error
  88. interfaces, err = net.Interfaces()
  89. if err != nil {
  90. Log("ERROR: could not read interfaces", 0)
  91. return "", true
  92. }
  93. for _, currIface := range interfaces {
  94. var currAddrs []net.Addr
  95. currAddrs, err = currIface.Addrs()
  96. if err != nil || len(currAddrs) == 0 {
  97. continue
  98. }
  99. for _, addr := range currAddrs {
  100. if strings.Contains(addr.String(), address) && currIface.Name != iface {
  101. return currIface.Name, false
  102. }
  103. }
  104. }
  105. return "", true
  106. }