routes_linux.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package local
  2. import (
  3. //"github.com/davecgh/go-spew/spew"
  4. "fmt"
  5. "net"
  6. "strings"
  7. "github.com/gravitl/netmaker/logger"
  8. "github.com/gravitl/netmaker/netclient/ncutils"
  9. "github.com/seancfoley/ipaddress-go/ipaddr"
  10. )
  11. func setRoute(iface string, addr *net.IPNet, address string) error {
  12. out, err := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
  13. if err != nil || !strings.Contains(out, iface) {
  14. _, err = ncutils.RunCmd(fmt.Sprintf("ip route add %s dev %s", addr.String(), iface), false)
  15. }
  16. return err
  17. }
  18. func deleteRoute(iface string, addr *net.IPNet, address string) error {
  19. var err error
  20. out, _ := ncutils.RunCmd(fmt.Sprintf("ip route get %s", addr.IP.String()), false)
  21. if strings.Contains(out, iface) {
  22. _, err = ncutils.RunCmd(fmt.Sprintf("ip route del %s dev %s", addr.String(), iface), false)
  23. }
  24. return err
  25. }
  26. func setCidr(iface, address string, addr *net.IPNet) {
  27. cidr := ipaddr.NewIPAddressString(addr.String()).GetAddress()
  28. if cidr.IsIPv4() {
  29. ncutils.RunCmd("ip -4 route add "+addr.String()+" dev "+iface, false)
  30. } else if cidr.IsIPv6() {
  31. ncutils.RunCmd("ip -6 route add "+addr.String()+" dev "+iface, false)
  32. } else {
  33. logger.Log(1, "could not parse address: "+addr.String())
  34. }
  35. }
  36. func removeCidr(iface string, addr *net.IPNet, address string) {
  37. ncutils.RunCmd("ip route delete "+addr.String()+" dev "+iface, false)
  38. }