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
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
30ab07e354
wintun: Introduce SetupAPI enumerator and machineName consts
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-03-08 10:03:57 +01:00
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
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
368dea72fe
wintun: Cleanup
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-03-07 21:12:20 +01:00
9b22255cad
wintun: Refactor network registry key name generation
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-03-07 21:12:20 +01:00
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
26af6c4651
receive: squelch tear down error
2019-03-07 02:03:48 +01:00
92f72f5aa6
tun: linux: work out netpoll trick
2019-03-07 01:51:41 +01:00
1fdf7b19a3
wintun: Resolve some of golint warnings
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-03-04 16:37:11 +01:00
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
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
cddfd9a0d8
Unify interface-specific network registry key open
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-03-04 16:37:11 +01:00
68f0721c6a
tun: import mobile particularities
2019-03-04 16:37:11 +01:00
b8e85267cf
boundif: introduce API for socket binding
2019-03-04 16:37:11 +01:00
69f0fe67b6
global: begin modularization
2019-03-03 05:00:40 +01:00
d435be35ca
tun: windows: expose GUID
2019-03-01 00:11:12 +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
66524c1f7e
Rearrange imports
2019-02-22 20:59:43 +01:00
6e4460ae65
device: send persistent keepalive when bringing up device
...
Reported-by: Marcelo Bello
2019-02-22 19:33:28 +01:00
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
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
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
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
8091c6474a
wintun: Adopt new packet data alignment
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-20 19:56:10 +01:00
040da43889
wintun: Cleanup
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-20 18:38:18 +01:00
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
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
4863089120
wintun: Switch to dynamic packet sizes
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-19 18:50:42 +01:00
42c6d0e261
Change package path
2019-02-18 05:11:39 +01:00
f7170e5de2
Bump dependencies for ARM ChaCha20
2019-02-14 10:59:54 +01:00
b719a09a26
wintun: Auto-calculate TUN exchange buffer size
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-08 15:21:24 +01:00
f05f52637f
wintun: Simplify Read method()
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-08 14:31:05 +01:00
713477cfb1
wintun: Make constants private and adopt Go recommended case
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-08 08:55:23 +01:00
5981d5cacf
wintun: Check for user close in read loop regardless the load
...
Do the WaitForSingleObject() always to provide high-load responsiveness.
Reorder events so TUN_SIGNAL_CLOSE has priority over
TUN_SIGNAL_DATA_AVAIL, to provide high-load responsiveness at all.
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-08 08:48:35 +01:00
b13739ada2
wintun: Adjust tunRWQueue.left member to match Wintun driver
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-08 07:32:12 +01:00
c4988999ac
setupapi: Merge _SP_DRVINFO_DETAIL_DATA and DrvInfoDetailData
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 23:50:43 +01:00
b662896cf4
setupapi: Merge SP_DRVINFO_DATA and DrvInfoData
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 23:50:43 +01:00
0525f6b112
setupapi: Rename SP_REMOVEDEVICE_PARAMS to RemoveDeviceParams
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 23:50:43 +01:00
9d830826c5
setupapi: Rename SP_CLASSINSTALL_HEADER to ClassInstallHeader
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 23:50:43 +01:00
bd963497da
setupapi: Merge _SP_DEVINSTALL_PARAMS and DevInstallParams
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 23:50:30 +01:00
05d25fd1b7
setupapi: Merge _SP_DEVINFO_LIST_DETAIL_DATA and DevInfoListDetailData
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 23:49:50 +01:00
6d2729dccc
setupapi: Rename SP_DEVINFO_DATA to DevInfoData
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 22:43:02 +01:00
d87cbeeb2f
wintun: Detect if a foreign interface with the same name exists
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 22:02:51 +01:00
043b7e8013
wintun: Clean excessive setupapi.DevInfo.GetDeviceInfoListDetail() call
...
Signed-off-by: Simon Rozman <simon@rozman.si >
2019-02-07 20:49:41 +01:00