diff --git a/src/tun/iface.go b/src/tun/iface.go index f1898281..8f26cef2 100644 --- a/src/tun/iface.go +++ b/src/tun/iface.go @@ -41,7 +41,9 @@ func (tun *TunAdapter) queue() { tun.log.Errorln("Exiting TUN writer due to core read error:", err) return } - tun.ch <- p[:n] + if tun.ch != nil { + tun.ch <- p[:n] + } } } diff --git a/src/tun/tun.go b/src/tun/tun.go index d15a0674..47a44713 100644 --- a/src/tun/tun.go +++ b/src/tun/tun.go @@ -125,8 +125,9 @@ func (tun *TunAdapter) _start() error { if tun.config.name == "none" || tun.config.name == "dummy" { tun.log.Debugln("Not starting TUN as ifname is none or dummy") tun.isEnabled = false + // Need to keep the queue goroutine running to stop underlying + // layers from getting blocked. go tun.queue() - go tun.write() return nil } mtu := uint64(tun.config.mtu)