tun.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package overlay
  2. import (
  3. "net"
  4. "github.com/sirupsen/logrus"
  5. "github.com/slackhq/nebula/config"
  6. "github.com/slackhq/nebula/util"
  7. )
  8. const DefaultMTU = 1300
  9. func NewDeviceFromConfig(c *config.C, l *logrus.Logger, tunCidr *net.IPNet, fd *int, routines int) (Device, error) {
  10. routes, err := parseRoutes(c, tunCidr)
  11. if err != nil {
  12. return nil, util.NewContextualError("Could not parse tun.routes", nil, err)
  13. }
  14. unsafeRoutes, err := parseUnsafeRoutes(c, tunCidr)
  15. if err != nil {
  16. return nil, util.NewContextualError("Could not parse tun.unsafe_routes", nil, err)
  17. }
  18. routes = append(routes, unsafeRoutes...)
  19. switch {
  20. case c.GetBool("tun.disabled", false):
  21. tun := newDisabledTun(tunCidr, c.GetInt("tun.tx_queue", 500), c.GetBool("stats.message_metrics", false), l)
  22. return tun, nil
  23. case fd != nil:
  24. return newTunFromFd(
  25. l,
  26. *fd,
  27. tunCidr,
  28. c.GetInt("tun.mtu", DefaultMTU),
  29. routes,
  30. c.GetInt("tun.tx_queue", 500),
  31. )
  32. default:
  33. return newTun(
  34. l,
  35. c.GetString("tun.dev", ""),
  36. tunCidr,
  37. c.GetInt("tun.mtu", DefaultMTU),
  38. routes,
  39. c.GetInt("tun.tx_queue", 500),
  40. routines > 1,
  41. )
  42. }
  43. }