db0aa39b76
global: update header comments and modules
...
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com >
2020-05-02 02:08:26 -06:00
2fb0a712f0
tun: return a better error message if /dev/net/tun doesn't exist
...
It was just returning "no such file or directory" (the String of the
syscall.Errno returned by CreateTUN).
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-05-02 01:50:47 -06:00
c76b818466
tun: NetlinkListener: don't send EventDown before sending EventUp
...
This works around a startup race condition when competing with
HackListener, which is trying to do the same job. If HackListener
detects that the tundev is running while there is still an event in the
netlink queue that says it isn't running, then the device receives a
string of events like
EventUp (HackListener)
EventDown (NetlinkListener)
EventUp (NetlinkListener)
Unfortunately, after the first EventDown, the device stops itself,
thinking incorrectly that the administrator has downed its tundev.
The device is ignoring the initial EventDown anyway, so just don't emit
it.
Signed-off-by: Avery Pennarun <apenwarr@tailscale.com >
2020-05-02 01:46:42 -06:00
85a45a9651
tun: fix data race on name field
...
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-05-02 01:46:42 -06:00
abd287159e
tun: remove unused isUp method
...
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com >
2020-05-02 01:46:42 -06:00
b33219c2cf
global: use RTMGRP_* consts from x/sys/unix
...
Update the golang.org/x/sys/unix dependency and use the newly introduced
RTMGRP_* consts instead of using the corresponding RTNLGRP_* const to
create a mask.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch >
2020-03-17 23:07:11 -06:00
f7d0edd2ec
global: fix a few typos courtesy of codespell
...
Signed-off-by: Jonathan Tooker <jonathan.tooker@netprotect.com >
2019-10-22 11:51:25 +02:00
1f48971a80
tun: remove TUN prefix from types to reduce stutter elsewhere
...
Signed-off-by: Matt Layher <mdlayher@gmail.com >
2019-06-14 18:35:57 +02:00
eaf17becfa
global: fixup TODO comment spacing
2019-06-06 23:00:15 +02:00
3bf41b06ae
global: regroup all imports
2019-05-14 09:09:52 +02:00
6440f010ee
receive: implement flush semantics
2019-03-21 14:45:41 -06:00
92f72f5aa6
tun: linux: work out netpoll trick
2019-03-07 01:51:41 +01:00
68f0721c6a
tun: import mobile particularities
2019-03-04 16:37:11 +01:00
967d1a0f3d
tun: allow special methods in NativeTun
2019-03-01 00:05:57 +01:00
88ff67fb6f
tun: linux: netpoll is broken for tun's epoll
...
So this mostly reverts the switch to Sysconn for Linux.
Issue: https://github.com/golang/go/issues/30426
2019-02-27 04:38:26 +01:00
971be13e77
tun: linux: netlink sock needs cleaning up but file will be gc'd
2019-02-27 04:11:41 +01:00
366cbd11a4
tun: use netpoll instead of rwcancel
...
The new sysconn function of Go 1.12 makes this possible:
package main
import "log"
import "os"
import "unsafe"
import "time"
import "syscall"
import "sync"
import "golang.org/x/sys/unix"
func main() {
fd, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0)
if err != nil {
log.Fatal(err)
}
var ifr [unix.IFNAMSIZ + 64]byte
copy(ifr[:], []byte("cheese"))
*(*uint16)(unsafe.Pointer(&ifr[unix.IFNAMSIZ])) = unix.IFF_TUN
var errno syscall.Errno
s, _ := fd.SyscallConn()
s.Control(func(fd uintptr) {
_, _, errno = unix.Syscall(
unix.SYS_IOCTL,
fd,
uintptr(unix.TUNSETIFF),
uintptr(unsafe.Pointer(&ifr[0])),
)
})
if errno != 0 {
log.Fatal(errno)
}
b := [4]byte{}
wait := sync.WaitGroup{}
wait.Add(1)
go func() {
_, err := fd.Read(b[:])
log.Print("Read errored: ", err)
wait.Done()
}()
time.Sleep(time.Second)
log.Print("Closing")
err = fd.Close()
if err != nil {
log.Print("Close errored: " , err)
}
wait.Wait()
log.Print("Exiting")
}
2019-02-27 01:52:55 +01:00
ab0f442daf
tun: use sysconn instead of .Fd with Go 1.12
2019-02-27 01:34:11 +01:00
42c6d0e261
Change package path
2019-02-18 05:11:39 +01:00
dff424baf8
Update copyright
2019-02-05 12:59:42 +01:00
651744561e
tun: remove nonblock hack for linux
...
This is no longer necessary and actually breaks things
Reported-by: Chris Branch <cbranch@cloudflare.com >
2018-12-06 17:17:51 +01:00
2e772194cf
tun: only call .Fd() once
...
Doing so tends to make the tunnel blocking, so we only retrieve it once
before we call SetNonblock, and then cache the result.
2018-10-17 21:31:42 +02:00
5be541d147
global: fix up copyright headers
2018-09-16 18:49:19 +02:00
15da869b31
Fix duplicate copyright line
2018-07-30 05:14:17 +02:00
2f2eca8947
Catch EINTR
2018-05-24 15:36:29 +02:00
588b9f01ae
Adopt GOPATH
...
GOPATH is annoying, but the Go community pushing me to adopt it is even
more annoying.
2018-05-23 05:18:13 +02:00
0a63188afa
Move tun to subpackage
2018-05-23 03:58:27 +02:00