routes_darwin.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package local
  2. import (
  3. "net"
  4. "strings"
  5. "github.com/c-robinson/iplib"
  6. "github.com/gravitl/netmaker/logger"
  7. "github.com/gravitl/netmaker/netclient/ncutils"
  8. )
  9. // GetDefaultRoute - Gets the default route (ip and interface) on a mac machine
  10. func GetDefaultRoute() (string, string, error) {
  11. var ipaddr string
  12. var iface string
  13. var err error
  14. var outLine string
  15. output, err := ncutils.RunCmd("netstat -nr", false)
  16. for _, line := range strings.Split(strings.TrimSuffix(output, "\n"), "\n") {
  17. if strings.Contains(line, "default") {
  18. outLine = line
  19. break
  20. }
  21. }
  22. space := regexp.MustCompile(`\s+`)
  23. outFormatted := space.ReplaceAllString(outLine, " ")
  24. if err != nil {
  25. return ipaddr, iface, err
  26. }
  27. outputSlice := strings.Split(string(outFormatted), " ")
  28. if !strings.Contains(outputSlice[0], "default") {
  29. return ipaddr, iface, fmt.Errorf("could not find default gateway")
  30. }
  31. ipaddr = outputSlice[1]
  32. if err = ncutils.CheckIPAddress(ipaddr); err != nil {
  33. return ipaddr, iface, err
  34. }
  35. iface = outputSlice[3]
  36. return ipaddr, iface, err
  37. }
  38. // route -n add -net 10.0.0.0/8 192.168.0.254
  39. // networksetup -setadditionalroutes Ethernet 192.168.1.0 255.255.255.0 10.0.0.2 persistent
  40. func setRoute(iface string, addr *net.IPNet, address string) error {
  41. var err error
  42. var out string
  43. var inetx = "inet"
  44. if strings.Contains(addr.IP.String(), ":") {
  45. inetx = "inet6"
  46. }
  47. out, err = ncutils.RunCmd("route -n get -"+inetx+" "+addr.IP.String(), false)
  48. if err != nil {
  49. return err
  50. }
  51. if !(strings.Contains(out, iface)) {
  52. _, err = ncutils.RunCmd("route -q -n add -"+inetx+" "+addr.String()+" -interface "+iface, false)
  53. }
  54. return err
  55. }
  56. func deleteRoute(iface string, addr *net.IPNet, address string) error {
  57. var err error
  58. _, err = ncutils.RunCmd("route -q -n delete "+addr.String(), false)
  59. return err
  60. }
  61. func setCidr(iface, address string, addr *net.IPNet) {
  62. if iplib.Version(addr.IP) == 4 {
  63. ncutils.RunCmd("route -q -n add -net "+addr.String()+" "+address, false)
  64. } else if iplib.Version(addr.IP) == 6 {
  65. ncutils.RunCmd("route -A inet6 -q -n add -net "+addr.String()+" "+address, false)
  66. } else {
  67. logger.Log(1, "could not parse address: "+addr.String())
  68. }
  69. }
  70. func removeCidr(iface string, addr *net.IPNet, address string) {
  71. ncutils.RunCmd("route -q -n delete "+addr.String()+" -interface "+iface, false)
  72. }