tun.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. c.GetBool("tun.use_system_route_table", false),
  32. )
  33. default:
  34. return newTun(
  35. l,
  36. c.GetString("tun.dev", ""),
  37. tunCidr,
  38. c.GetInt("tun.mtu", DefaultMTU),
  39. routes,
  40. c.GetInt("tun.tx_queue", 500),
  41. routines > 1,
  42. c.GetBool("tun.use_system_route_table", false),
  43. )
  44. }
  45. }