routes_linux.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package local
  2. import (
  3. //"github.com/davecgh/go-spew/spew"
  4. "fmt"
  5. "net"
  6. "strings"
  7. "github.com/c-robinson/iplib"
  8. "github.com/gravitl/netmaker/logger"
  9. "github.com/gravitl/netmaker/netclient/ncutils"
  10. )
  11. // GetDefaultRoute - Gets the default route (ip and interface) on a linux machine
  12. func GetDefaultRoute() (string, string, error) {
  13. var ipaddr string
  14. var iface string
  15. var err error
  16. output, err := ncutils.RunCmd("ip route show default", false)
  17. if err != nil {
  18. return ipaddr, iface, err
  19. }
  20. outputSlice := strings.Split(output, " ")
  21. if !strings.Contains(outputSlice[0], "default") {
  22. return ipaddr, iface, fmt.Errorf("could not find default gateway")
  23. }
  24. for i, outString := range outputSlice {
  25. if outString == "via" {
  26. ipaddr = outputSlice[i+1]
  27. }
  28. if outString == "dev" {
  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. out, err := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
  36. if err != nil || !strings.Contains(out, iface) {
  37. _, err = ncutils.RunCmd(fmt.Sprintf("ip route add %s dev %s", addr.String(), iface), false)
  38. }
  39. return err
  40. }
  41. // SetExplicitRoute - sets route via explicit ip address
  42. func SetExplicitRoute(iface string, destination *net.IPNet, gateway string) error {
  43. _, err := ncutils.RunCmd(fmt.Sprintf("ip route add %s via %s dev %s", destination.String(), gateway, iface), false)
  44. return err
  45. }
  46. func deleteRoute(iface string, addr *net.IPNet, address string) error {
  47. var err error
  48. out, _ := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
  49. if strings.Contains(out, iface) {
  50. _, err = ncutils.RunCmd(fmt.Sprintf("ip route del %s dev %s", addr.String(), iface), false)
  51. }
  52. return err
  53. }
  54. func setCidr(iface, address string, addr *net.IPNet) {
  55. if iplib.Version(addr.IP) == 4 {
  56. ncutils.RunCmd("ip -4 route add "+addr.String()+" dev "+iface, false)
  57. } else if iplib.Version(addr.IP) == 6 {
  58. ncutils.RunCmd("ip -6 route add "+addr.String()+" dev "+iface, false)
  59. } else {
  60. logger.Log(1, "could not parse address: "+addr.String())
  61. }
  62. }
  63. func removeCidr(iface string, addr *net.IPNet, address string) {
  64. ncutils.RunCmd("ip route delete "+addr.String()+" dev "+iface, false)
  65. }