routes_freebsd.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package local
  2. import (
  3. "fmt"
  4. "net"
  5. "strings"
  6. "github.com/c-robinson/iplib"
  7. "github.com/gravitl/netmaker/logger"
  8. "github.com/gravitl/netmaker/netclient/ncutils"
  9. )
  10. // GetDefaultRoute - Gets the default route (ip and interface) on a freebsd machine
  11. func GetDefaultRoute() (string, string, error) {
  12. var ipaddr string
  13. var iface string
  14. var err error
  15. output, err := ncutils.RunCmd("route show default", true)
  16. if err != nil {
  17. return ipaddr, iface, err
  18. }
  19. outFormatted := strings.ReplaceAll(output, "\n", "")
  20. if !strings.Contains(outFormatted, "default") && !strings.Contains(outFormatted, "interface:") {
  21. return ipaddr, iface, fmt.Errorf("could not find default gateway")
  22. }
  23. outputSlice := strings.Split(string(outFormatted), " ")
  24. for i, outString := range outputSlice {
  25. if outString == "gateway:" {
  26. ipaddr = outputSlice[i+1]
  27. }
  28. if outString == "interface:" {
  29. iface = outputSlice[i+1]
  30. }
  31. }
  32. return ipaddr, iface, err
  33. }
  34. func setRoute(iface string, addr *net.IPNet, address string) error {
  35. _, err := ncutils.RunCmd("route add -net "+addr.String()+" -interface "+iface, false)
  36. return err
  37. }
  38. func SetExplicitRoute(iface string, destination *net.IPNet, gateway string) error {
  39. _, err := ncutils.RunCmd("route add "+destination.String()+" "+gateway, false)
  40. return err
  41. }
  42. func deleteRoute(iface string, addr *net.IPNet, address string) error {
  43. var err error
  44. _, _ = ncutils.RunCmd("route delete -net "+addr.String()+" -interface "+iface, false)
  45. return err
  46. }
  47. func setCidr(iface, address string, addr *net.IPNet) {
  48. if iplib.Version(addr.IP) == 4 {
  49. ncutils.RunCmd("route add -net "+addr.String()+" -interface "+iface, false)
  50. } else if iplib.Version(addr.IP) == 6 {
  51. ncutils.RunCmd("route add -net -inet6 "+addr.String()+" -interface "+iface, false)
  52. } else {
  53. logger.Log(1, "could not parse address: "+addr.String())
  54. }
  55. ncutils.RunCmd("route add -net "+addr.String()+" -interface "+iface, false)
  56. }
  57. func removeCidr(iface string, addr *net.IPNet, address string) {
  58. ncutils.RunCmd("route delete -net "+addr.String()+" -interface "+iface, false)
  59. }