|
|
@@ -26,7 +26,6 @@ import (
|
|
|
|
|
|
type tun struct {
|
|
|
io.ReadWriteCloser
|
|
|
- fd int
|
|
|
Device string
|
|
|
vpnNetworks []netip.Prefix
|
|
|
MaxMTU int
|
|
|
@@ -85,7 +84,7 @@ func newTunFromFd(c *config.C, l *logrus.Logger, deviceFd int, vpnNetworks []net
|
|
|
}
|
|
|
|
|
|
func newTun(c *config.C, l *logrus.Logger, vpnNetworks []netip.Prefix, multiqueue bool) (*tun, error) {
|
|
|
- fd, err := unix.Open("/dev/net/tun", os.O_RDWR, 0)
|
|
|
+ fd, err := unix.Open("/dev/net/tun", os.O_RDWR|unix.O_NONBLOCK, 0)
|
|
|
if err != nil {
|
|
|
// If /dev/net/tun doesn't exist, try to create it (will happen in docker)
|
|
|
if os.IsNotExist(err) {
|
|
|
@@ -98,7 +97,7 @@ func newTun(c *config.C, l *logrus.Logger, vpnNetworks []netip.Prefix, multiqueu
|
|
|
return nil, fmt.Errorf("failed to create /dev/net/tun: %w", err)
|
|
|
}
|
|
|
|
|
|
- fd, err = unix.Open("/dev/net/tun", os.O_RDWR, 0)
|
|
|
+ fd, err = unix.Open("/dev/net/tun", os.O_RDWR|unix.O_NONBLOCK, 0)
|
|
|
if err != nil {
|
|
|
return nil, fmt.Errorf("created /dev/net/tun, but still failed: %w", err)
|
|
|
}
|
|
|
@@ -136,7 +135,6 @@ func newTun(c *config.C, l *logrus.Logger, vpnNetworks []netip.Prefix, multiqueu
|
|
|
func newTunGeneric(c *config.C, l *logrus.Logger, file *os.File, vpnNetworks []netip.Prefix) (*tun, error) {
|
|
|
t := &tun{
|
|
|
ReadWriteCloser: file,
|
|
|
- fd: int(file.Fd()),
|
|
|
vpnNetworks: vpnNetworks,
|
|
|
TXQueueLen: c.GetInt("tun.tx_queue", 500),
|
|
|
useSystemRoutes: c.GetBool("tun.use_system_route_table", false),
|