tun.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. type DeviceFactory func(c *config.C, l *logrus.Logger, tunCidr *net.IPNet, routines int) (Device, error)
  10. func NewDeviceFromConfig(c *config.C, l *logrus.Logger, tunCidr *net.IPNet, routines int) (Device, error) {
  11. routes, err := parseRoutes(c, tunCidr)
  12. if err != nil {
  13. return nil, util.NewContextualError("Could not parse tun.routes", nil, err)
  14. }
  15. unsafeRoutes, err := parseUnsafeRoutes(c, tunCidr)
  16. if err != nil {
  17. return nil, util.NewContextualError("Could not parse tun.unsafe_routes", nil, err)
  18. }
  19. routes = append(routes, unsafeRoutes...)
  20. switch {
  21. case c.GetBool("tun.disabled", false):
  22. tun := newDisabledTun(tunCidr, c.GetInt("tun.tx_queue", 500), c.GetBool("stats.message_metrics", false), l)
  23. return tun, nil
  24. default:
  25. return newTun(
  26. l,
  27. c.GetString("tun.dev", ""),
  28. tunCidr,
  29. c.GetInt("tun.mtu", DefaultMTU),
  30. routes,
  31. c.GetInt("tun.tx_queue", 500),
  32. routines > 1,
  33. c.GetBool("tun.use_system_route_table", false),
  34. )
  35. }
  36. }
  37. func NewFdDeviceFromConfig(fd *int) DeviceFactory {
  38. return func(c *config.C, l *logrus.Logger, tunCidr *net.IPNet, routines int) (Device, error) {
  39. routes, err := parseRoutes(c, tunCidr)
  40. if err != nil {
  41. return nil, util.NewContextualError("Could not parse tun.routes", nil, err)
  42. }
  43. unsafeRoutes, err := parseUnsafeRoutes(c, tunCidr)
  44. if err != nil {
  45. return nil, util.NewContextualError("Could not parse tun.unsafe_routes", nil, err)
  46. }
  47. routes = append(routes, unsafeRoutes...)
  48. return newTunFromFd(
  49. l,
  50. *fd,
  51. tunCidr,
  52. c.GetInt("tun.mtu", DefaultMTU),
  53. routes,
  54. c.GetInt("tun.tx_queue", 500),
  55. c.GetBool("tun.use_system_route_table", false),
  56. )
  57. }
  58. }