tun_disabled.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package nebula
  2. import (
  3. "fmt"
  4. "io"
  5. "net"
  6. "strings"
  7. log "github.com/sirupsen/logrus"
  8. )
  9. type disabledTun struct {
  10. block chan struct{}
  11. cidr *net.IPNet
  12. logger *log.Logger
  13. }
  14. func newDisabledTun(cidr *net.IPNet, l *log.Logger) *disabledTun {
  15. return &disabledTun{
  16. cidr: cidr,
  17. block: make(chan struct{}),
  18. logger: l,
  19. }
  20. }
  21. func (*disabledTun) Activate() error {
  22. return nil
  23. }
  24. func (t *disabledTun) CidrNet() *net.IPNet {
  25. return t.cidr
  26. }
  27. func (*disabledTun) DeviceName() string {
  28. return "disabled"
  29. }
  30. func (t *disabledTun) Read(b []byte) (int, error) {
  31. <-t.block
  32. return 0, io.EOF
  33. }
  34. func (t *disabledTun) Write(b []byte) (int, error) {
  35. t.logger.WithField("raw", prettyPacket(b)).Debugf("Disabled tun received unexpected payload")
  36. return len(b), nil
  37. }
  38. func (t *disabledTun) WriteRaw(b []byte) error {
  39. _, err := t.Write(b)
  40. return err
  41. }
  42. func (t *disabledTun) Close() error {
  43. if t.block != nil {
  44. close(t.block)
  45. t.block = nil
  46. }
  47. return nil
  48. }
  49. type prettyPacket []byte
  50. func (p prettyPacket) String() string {
  51. var s strings.Builder
  52. for i, b := range p {
  53. if i > 0 && i%8 == 0 {
  54. s.WriteString(" ")
  55. }
  56. s.WriteString(fmt.Sprintf("%02x ", b))
  57. }
  58. return s.String()
  59. }