tun_disabled.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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) NewMultiQueueReader() (io.ReadWriteCloser, error) {
  43. return t, nil
  44. }
  45. func (t *disabledTun) Close() error {
  46. if t.block != nil {
  47. close(t.block)
  48. t.block = nil
  49. }
  50. return nil
  51. }
  52. type prettyPacket []byte
  53. func (p prettyPacket) String() string {
  54. var s strings.Builder
  55. for i, b := range p {
  56. if i > 0 && i%8 == 0 {
  57. s.WriteString(" ")
  58. }
  59. s.WriteString(fmt.Sprintf("%02x ", b))
  60. }
  61. return s.String()
  62. }