Simon Rozman
4b1db1d39b
tun: windows: Increase unavailable adapter timeout to 30sec
...
5 seconds was too short when debugging.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-22 13:52:51 +01:00
Simon Rozman
a80db5e65e
tun: windows: Make writing persistent too
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-22 13:52:51 +01:00
Simon Rozman
9748a52073
tun: windows: Fix paused adapter test
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-22 13:52:51 +01:00
Jason A. Donenfeld
317d716d66
tun: windows: just open two file handles
2019-03-21 15:20:09 -06:00
Jason A. Donenfeld
6440f010ee
receive: implement flush semantics
2019-03-21 14:45:41 -06:00
Jason A. Donenfeld
49ea0c9b1a
tun: windows: add dummy overlapped events back
...
These seem basically wrong to me, but we get crashes without them.
2019-03-21 02:29:09 -06:00
Jason A. Donenfeld
ca59b60aa7
tun: windows: use new constants in sys
2019-03-20 23:42:30 -06:00
Jason A. Donenfeld
c050c6e60f
uapi: remove unhelpful log messages
2019-03-20 23:40:20 -06:00
Simon Rozman
91b4e909bb
wintun: Use native Win32 API for I/O
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-21 00:56:45 +01:00
Jason A. Donenfeld
2c51d6af48
uapi: report endpoint error
2019-03-19 00:34:04 -06:00
Jason A. Donenfeld
03f2e2614a
tun: windows: wintun does iocp
2019-03-18 02:42:45 -06:00
Jason A. Donenfeld
b0e0ab308d
tun: windows: temporary hack for forcing MTU
2019-03-13 02:52:32 -06:00
Jason A. Donenfeld
66fb5caf02
wintun: Poll more often
2019-03-10 03:47:54 +01:00
Jason A. Donenfeld
3dd9a0535f
uapi: make ipcerror conform to interface
2019-03-10 02:49:44 +01:00
Simon Rozman
c2a2b8d739
wintun: Make errors more descriptive
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-08 10:03:57 +01:00
Simon Rozman
70449f1a97
wintun: Return correct reboot-req flag on CreateInterface() error too
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-08 10:03:57 +01:00
Simon Rozman
33c3528430
wintun: Fix double-quoted strings escaping on output
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-08 10:03:57 +01:00
Simon Rozman
30ab07e354
wintun: Introduce SetupAPI enumerator and machineName consts
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-08 10:03:57 +01:00
Odd Stranne
a6d5ef82f4
Windows: Apply strict security descriptor on pipe server
...
Signed-off-by: Odd Stranne <odd@mullvad.net>
2019-03-08 10:03:56 +01:00
Jason A. Donenfeld
5c7cc256e3
uapi: windows: work out pipe semantics
...
Pipes can be arranged like this, so that's fine. We also apply a strict
SDDL that can't be inherited and only gives access to local system.
Developed-with: Odd Stranne <odd@mullvad.net>
2019-03-08 01:40:54 +01:00
Simon Rozman
368dea72fe
wintun: Cleanup
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-07 21:12:20 +01:00
Simon Rozman
9b22255cad
wintun: Refactor network registry key name generation
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-07 21:12:20 +01:00
Simon Rozman
11f5780250
wintun: Revise interface creation wait
...
DIF_INSTALLDEVICE returns almost immediately, while the device
installation continues in the background. It might take a while, before
all registry keys and values are populated.
Previously, wireguard-go waited for HKLM\SYSTEM\CurrentControlSet\
Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\<id> registry key
only.
Followed by a SetInterfaceName() method of Wintun struct which tried to
access HKLM\SYSTEM\CurrentControlSet\Control\Network\
{4D36E972-E325-11CE-BFC1-08002BE10318}\<id>\Connection registry key
might not be available yet.
This commit loops until both registry keys are available before
returning from CreateInterface() function.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-07 21:12:20 +01:00
Jason A. Donenfeld
26af6c4651
receive: squelch tear down error
2019-03-07 02:03:48 +01:00
Jason A. Donenfeld
92f72f5aa6
tun: linux: work out netpoll trick
2019-03-07 01:51:41 +01:00
Simon Rozman
1fdf7b19a3
wintun: Resolve some of golint warnings
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-04 16:37:11 +01:00
Simon Rozman
a1aabb21ae
Elaborate the failing step when forwarding errors on return
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-04 16:37:11 +01:00
Simon Rozman
9041d38e2d
Simplify reading NetCfgInstanceId from registry
...
As querying non-existing registry value and reading non-existing
registry string value both return ERROR_FILE_NOT_FOUND, we can
use later only.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-04 16:37:11 +01:00
Simon Rozman
cddfd9a0d8
Unify interface-specific network registry key open
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-03-04 16:37:11 +01:00
Jason A. Donenfeld
68f0721c6a
tun: import mobile particularities
2019-03-04 16:37:11 +01:00
Jason A. Donenfeld
b8e85267cf
boundif: introduce API for socket binding
2019-03-04 16:37:11 +01:00
Jason A. Donenfeld
69f0fe67b6
global: begin modularization
2019-03-03 05:00:40 +01:00
Jason A. Donenfeld
d435be35ca
tun: windows: expose GUID
2019-03-01 00:11:12 +01:00
Jason A. Donenfeld
967d1a0f3d
tun: allow special methods in NativeTun
2019-03-01 00:05:57 +01:00
Jason A. Donenfeld
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
Jason A. Donenfeld
971be13e77
tun: linux: netlink sock needs cleaning up but file will be gc'd
2019-02-27 04:11:41 +01:00
Jason A. Donenfeld
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
Jason A. Donenfeld
ab0f442daf
tun: use sysconn instead of .Fd with Go 1.12
2019-02-27 01:34:11 +01:00
Jason A. Donenfeld
66524c1f7e
Rearrange imports
2019-02-22 20:59:43 +01:00
Jason A. Donenfeld
6e4460ae65
device: send persistent keepalive when bringing up device
...
Reported-by: Marcelo Bello
2019-02-22 19:33:28 +01:00
Simon Rozman
d002eff155
wintun: Read/write packet size from/to exchange buffer directly
...
Driver <-> user-space communication is local and using native endian.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-22 16:16:14 +01:00
Simon Rozman
e06a8f8f9f
wintun: Make two-step slicing a one step
...
Stop relying to Go compiler optimizations and calculate the end offset
directly.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-22 16:11:33 +01:00
Simon Rozman
ac4944a708
wintun: Write exchange buffer increased back to 1MiB
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-20 20:13:33 +01:00
Simon Rozman
2491f9d454
wintun: Migrate from unsafe buffer handling to encoding/binary
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-20 20:10:24 +01:00
Simon Rozman
8091c6474a
wintun: Adopt new packet data alignment
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-20 19:56:10 +01:00
Simon Rozman
040da43889
wintun: Cleanup
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-20 18:38:18 +01:00
Simon Rozman
b7025b5627
wintun: Add TUN device locking
...
In case reading from TUN device detected TUN device was closed, it
closed the file handle and set tunFile to nil. The tunFile is
automatically reopened on retry, but... If another packet comes in the
WireGuard calls Write() method. With tunFile set to nil, this will
cause access violation.
Therefore, locking was introduced.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-20 13:12:08 +01:00
Simon Rozman
6581cfb885
wintun: Move exchange buffer in separate struct on heap
...
This allows buffer alignment and keeps it together with its meta-data.
Furthermore, the write buffer has been reduced - as long as we flush
after _every_ write, we don't need a 1MiB write buffer.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-20 11:41:37 +01:00
Simon Rozman
4863089120
wintun: Switch to dynamic packet sizes
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-02-19 18:50:42 +01:00
Jason A. Donenfeld
42c6d0e261
Change package path
2019-02-18 05:11:39 +01:00