|
@@ -0,0 +1,74 @@
|
|
|
+package nebula
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "io"
|
|
|
+ "net"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ log "github.com/sirupsen/logrus"
|
|
|
+)
|
|
|
+
|
|
|
+type disabledTun struct {
|
|
|
+ block chan struct{}
|
|
|
+ cidr *net.IPNet
|
|
|
+ logger *log.Logger
|
|
|
+}
|
|
|
+
|
|
|
+func newDisabledTun(cidr *net.IPNet, l *log.Logger) *disabledTun {
|
|
|
+ return &disabledTun{
|
|
|
+ cidr: cidr,
|
|
|
+ block: make(chan struct{}),
|
|
|
+ logger: l,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (*disabledTun) Activate() error {
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (t *disabledTun) CidrNet() *net.IPNet {
|
|
|
+ return t.cidr
|
|
|
+}
|
|
|
+
|
|
|
+func (*disabledTun) DeviceName() string {
|
|
|
+ return "disabled"
|
|
|
+}
|
|
|
+
|
|
|
+func (t *disabledTun) Read(b []byte) (int, error) {
|
|
|
+ <-t.block
|
|
|
+ return 0, io.EOF
|
|
|
+}
|
|
|
+
|
|
|
+func (t *disabledTun) Write(b []byte) (int, error) {
|
|
|
+ t.logger.WithField("raw", prettyPacket(b)).Debugf("Disabled tun received unexpected payload")
|
|
|
+ return len(b), nil
|
|
|
+}
|
|
|
+
|
|
|
+func (t *disabledTun) WriteRaw(b []byte) error {
|
|
|
+ _, err := t.Write(b)
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+func (t *disabledTun) Close() error {
|
|
|
+ if t.block != nil {
|
|
|
+ close(t.block)
|
|
|
+ t.block = nil
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+type prettyPacket []byte
|
|
|
+
|
|
|
+func (p prettyPacket) String() string {
|
|
|
+ var s strings.Builder
|
|
|
+
|
|
|
+ for i, b := range p {
|
|
|
+ if i > 0 && i%8 == 0 {
|
|
|
+ s.WriteString(" ")
|
|
|
+ }
|
|
|
+ s.WriteString(fmt.Sprintf("%02x ", b))
|
|
|
+ }
|
|
|
+
|
|
|
+ return s.String()
|
|
|
+}
|