]> git.ipfire.org Git - thirdparty/wireguard-go.git/log
thirdparty/wireguard-go.git
6 years agotai64n: account for whitening in test
Jason A. Donenfeld [Wed, 29 May 2019 16:43:17 +0000 (18:43 +0200)] 
tai64n: account for whitening in test

6 years agodevice, tun: rearrange code and fix device tests
Matt Layher [Wed, 29 May 2019 16:18:20 +0000 (12:18 -0400)] 
device, tun: rearrange code and fix device tests

Signed-off-by: Matt Layher <mdlayher@gmail.com>
6 years agowintun: remove extra /
Jason A. Donenfeld [Sun, 26 May 2019 00:20:01 +0000 (02:20 +0200)] 
wintun: remove extra /

6 years agodevice: darwin actually doesn't need bound interfaces
Jason A. Donenfeld [Sat, 25 May 2019 16:10:52 +0000 (18:10 +0200)] 
device: darwin actually doesn't need bound interfaces

6 years agodevice: make initiations per second match kernel implementation
Jason A. Donenfeld [Sat, 25 May 2019 00:07:18 +0000 (02:07 +0200)] 
device: make initiations per second match kernel implementation

6 years agodevice: timers: add jitter on ack failure reinitiation
Jason A. Donenfeld [Fri, 24 May 2019 11:48:03 +0000 (13:48 +0200)] 
device: timers: add jitter on ack failure reinitiation

6 years agowintun: revise GetInterface()
Simon Rozman [Fri, 24 May 2019 07:28:50 +0000 (09:28 +0200)] 
wintun: revise GetInterface()

- Make foreign interface found error numeric to ease condition
  detection.
- Update GetInterface() documentation.
- Make tun.CreateTUN() quit when foreign interface found before
  attempting to create a Wintun interface with a duplicate name.
  Creation is futile.

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: never return nil, nil
Jason A. Donenfeld [Thu, 23 May 2019 13:25:53 +0000 (15:25 +0200)] 
wintun: never return nil, nil

6 years agoipc: use simplified fork of winio
Jason A. Donenfeld [Thu, 23 May 2019 12:53:44 +0000 (14:53 +0200)] 
ipc: use simplified fork of winio

6 years agosetupapi: trim "Get" from getters
Simon Rozman [Wed, 22 May 2019 17:31:52 +0000 (19:31 +0200)] 
setupapi: trim "Get" from getters

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: don't try to flush interface, but rather delete
Jason A. Donenfeld [Fri, 17 May 2019 14:06:02 +0000 (16:06 +0200)] 
wintun: don't try to flush interface, but rather delete

6 years agodevice: fail to give bind if it doesn't exist
Jason A. Donenfeld [Fri, 17 May 2019 13:35:20 +0000 (15:35 +0200)] 
device: fail to give bind if it doesn't exist

6 years agowintun: make certain methods private
Jason A. Donenfeld [Fri, 17 May 2019 12:26:46 +0000 (14:26 +0200)] 
wintun: make certain methods private

6 years agoversion: bump snapshot 0.0.20190517
Jason A. Donenfeld [Fri, 17 May 2019 08:28:04 +0000 (10:28 +0200)] 
version: bump snapshot

6 years agomakefile: do not show warning on non-linux
Jason A. Donenfeld [Fri, 17 May 2019 08:27:12 +0000 (10:27 +0200)] 
makefile: do not show warning on non-linux

6 years agowintun: change acronyms to uppercase
Simon Rozman [Thu, 16 May 2019 08:33:47 +0000 (10:33 +0200)] 
wintun: change acronyms to uppercase

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agoglobal: regroup all imports
Jason A. Donenfeld [Tue, 14 May 2019 07:09:52 +0000 (09:09 +0200)] 
global: regroup all imports

6 years agowintun: registry: fix nits
Jason A. Donenfeld [Sat, 11 May 2019 15:25:48 +0000 (17:25 +0200)] 
wintun: registry: fix nits

6 years agowintun: registry: revise value reading
Simon Rozman [Sat, 11 May 2019 04:21:02 +0000 (06:21 +0200)] 
wintun: registry: revise value reading

- Make getStringValueRetry() reusable for reading any value type. This
  merges code from GetIntegerValueWait().
- expandString() >> toString() and extend to support REG_MULTI_SZ
  (to return first value of REG_MULTI_SZ). Furthermore, doing our own
  UTF-16 to UTF-8 conversion works around a bug in windows/registry's
  GetStringValue() non-zero terminated string handling.
- Provide toInteger() analogous to toString()
- GetStringValueWait() tolerates and reads REG_MULTI_SZ too now. It
  returns REG_MULTI_SZ[0], making GetFirstStringValueWait() redundant.

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: call HrRenameConnection in another thread
Jason A. Donenfeld [Fri, 10 May 2019 19:31:37 +0000 (21:31 +0200)] 
wintun: call HrRenameConnection in another thread

6 years agowintun: add LUID accessor
Jason A. Donenfeld [Fri, 10 May 2019 19:30:23 +0000 (21:30 +0200)] 
wintun: add LUID accessor

6 years agowintun: enumerate faster by using COMPATDRIVER instead of CLASSDRIVER
Jason A. Donenfeld [Fri, 10 May 2019 18:30:59 +0000 (20:30 +0200)] 
wintun: enumerate faster by using COMPATDRIVER instead of CLASSDRIVER

6 years agowintun: destroy devinfolist after usage
Jason A. Donenfeld [Fri, 10 May 2019 18:19:11 +0000 (20:19 +0200)] 
wintun: destroy devinfolist after usage

6 years agowintun: registry: replace REG_NOTIFY with NOTIFY
Simon Rozman [Fri, 10 May 2019 15:37:03 +0000 (17:37 +0200)] 
wintun: registry: replace REG_NOTIFY with NOTIFY

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: IpConfig is a MULTI_SZ, and fix errors
Jason A. Donenfeld [Fri, 10 May 2019 16:01:47 +0000 (18:01 +0200)] 
wintun: IpConfig is a MULTI_SZ, and fix errors

6 years agowintun: poll for device key
Jason A. Donenfeld [Fri, 10 May 2019 15:34:03 +0000 (17:34 +0200)] 
wintun: poll for device key

It's actually pretty hard to guess where it is.

6 years agowintun: fix scope of error object
Jason A. Donenfeld [Fri, 10 May 2019 14:59:24 +0000 (16:59 +0200)] 
wintun: fix scope of error object

6 years agowintun: wait for interface registry key on device creation
Simon Rozman [Thu, 9 May 2019 08:11:15 +0000 (10:11 +0200)] 
wintun: wait for interface registry key on device creation

By using RegNotifyChangeKeyValue(). Also disable dead gateway detection.

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agoconn: remove scope when sanity checking IP address format
Jason A. Donenfeld [Thu, 9 May 2019 13:33:57 +0000 (15:33 +0200)] 
conn: remove scope when sanity checking IP address format

6 years agowintun: fix GUID leading zero padding
Simon Rozman [Thu, 9 May 2019 09:45:14 +0000 (11:45 +0200)] 
wintun: fix GUID leading zero padding

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agomod: update deps
Jason A. Donenfeld [Fri, 3 May 2019 07:37:29 +0000 (09:37 +0200)] 
mod: update deps

6 years agosetupapi: safer aliasing of slice types
Jason A. Donenfeld [Fri, 3 May 2019 07:34:00 +0000 (09:34 +0200)] 
setupapi: safer aliasing of slice types

6 years agowintun: work around GetInterface staleness bug
Jason A. Donenfeld [Thu, 2 May 2019 22:11:59 +0000 (00:11 +0200)] 
wintun: work around GetInterface staleness bug

6 years agowintun: don't retry when not creating
Jason A. Donenfeld [Thu, 2 May 2019 21:53:15 +0000 (23:53 +0200)] 
wintun: don't retry when not creating

The only time we're trying to counteract the race condition is when
we're creating a driver. When we're simply looking up all drivers, it
doesn't make sense to retry.

6 years agowintun: try harder to open registry key
Jason A. Donenfeld [Mon, 29 Apr 2019 12:00:49 +0000 (14:00 +0200)] 
wintun: try harder to open registry key

This sucks. Can we please find a deterministic way of doing this
instead?

6 years agogo.mod: use vendored winio
Jason A. Donenfeld [Mon, 29 Apr 2019 06:09:38 +0000 (08:09 +0200)] 
go.mod: use vendored winio

6 years agotun: freebsd: work around numerous kernel panics on shutdown
Jason A. Donenfeld [Sat, 20 Apr 2019 02:29:07 +0000 (11:29 +0900)] 
tun: freebsd: work around numerous kernel panics on shutdown

There are numerous race conditions. But even this will crash it:

while true; do ifconfig tun0 create; ifconfig tun0 destroy; done

It seems like LLv6 is related, which we're not using anyway, so
explicitly disable it on the interface.

6 years agosetupapi: Fix struct size mismatches
Simon Rozman [Fri, 19 Apr 2019 08:05:04 +0000 (10:05 +0200)] 
setupapi: Fix struct size mismatches

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agosetupapi: actually fix padding by rounding up to sizeof(void*)
Jason A. Donenfeld [Fri, 19 Apr 2019 01:19:00 +0000 (10:19 +0900)] 
setupapi: actually fix padding by rounding up to sizeof(void*)

6 years agotun: darwin: write routeSocket variable in helper
Jason A. Donenfeld [Thu, 18 Apr 2019 22:53:19 +0000 (07:53 +0900)] 
tun: darwin: write routeSocket variable in helper

Otherwise the race detector "complains".

6 years agomain: revise warnings
Jason A. Donenfeld [Thu, 18 Apr 2019 22:48:09 +0000 (07:48 +0900)] 
main: revise warnings

6 years agodevice: send: check packet length before freeing element
Jason A. Donenfeld [Thu, 18 Apr 2019 14:22:03 +0000 (23:22 +0900)] 
device: send: check packet length before freeing element

6 years agosetupapi: Revise DrvInfoDetailData struct size calculation
Simon Rozman [Thu, 18 Apr 2019 08:37:04 +0000 (10:37 +0200)] 
setupapi: Revise DrvInfoDetailData struct size calculation

Go adds trailing padding to DrvInfoDetailData struct in GOARCH=386 which
confuses SetupAPI expecting exactly sizeof(SP_DRVINFO_DETAIL_DATA).

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowindows: use proper constants from updated x/sys
Jason A. Donenfeld [Fri, 12 Apr 2019 23:58:53 +0000 (01:58 +0200)] 
windows: use proper constants from updated x/sys

6 years agoconn: linux: RTA_MARK has moved to x/sys
Jason A. Donenfeld [Fri, 12 Apr 2019 13:27:27 +0000 (15:27 +0200)] 
conn: linux: RTA_MARK has moved to x/sys

6 years agotun: windows: Adopt new error codes returned by Wintun
Simon Rozman [Thu, 11 Apr 2019 17:34:43 +0000 (19:34 +0200)] 
tun: windows: Adopt new error codes returned by Wintun

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: windows: do not sleep after OPERATION_ABORTED on write
Simon Rozman [Thu, 11 Apr 2019 17:37:04 +0000 (19:37 +0200)] 
tun: windows: do not sleep after OPERATION_ABORTED on write

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agomain_windows: use proper version constant
Jason A. Donenfeld [Tue, 9 Apr 2019 08:45:36 +0000 (10:45 +0200)] 
main_windows: use proper version constant

6 years agoversion: put version in right place 0.0.20190409
Jason A. Donenfeld [Tue, 9 Apr 2019 08:39:36 +0000 (10:39 +0200)] 
version: put version in right place

6 years agoversion: bump snapshot
Jason A. Donenfeld [Tue, 9 Apr 2019 05:37:22 +0000 (07:37 +0200)] 
version: bump snapshot

6 years agotun: windows: do not sleep after OPERATION_ABORTED
Jason A. Donenfeld [Tue, 9 Apr 2019 05:36:03 +0000 (07:36 +0200)] 
tun: windows: do not sleep after OPERATION_ABORTED

6 years agotun: windows: Retry R/W on ERROR_OPERATION_ABORTED
Simon Rozman [Thu, 4 Apr 2019 07:19:35 +0000 (09:19 +0200)] 
tun: windows: Retry R/W on ERROR_OPERATION_ABORTED

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: windows: Attempt to reopen handle on all errors
Simon Rozman [Wed, 3 Apr 2019 03:40:35 +0000 (05:40 +0200)] 
tun: windows: Attempt to reopen handle on all errors

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: rename device using undocumented API that netsh.exe uses
Jason A. Donenfeld [Mon, 1 Apr 2019 10:00:33 +0000 (12:00 +0200)] 
wintun: rename device using undocumented API that netsh.exe uses

6 years agowintun: add more retry loops
Jason A. Donenfeld [Sun, 31 Mar 2019 08:17:11 +0000 (10:17 +0200)] 
wintun: add more retry loops

6 years agotun: windows: cancel ongoing reads on closing and delete after close
Jason A. Donenfeld [Tue, 26 Mar 2019 14:57:53 +0000 (15:57 +0100)] 
tun: windows: cancel ongoing reads on closing and delete after close

This reverts commit 52ec440d7977fad966002c3710ed9df957943407 and adds
some spice.

6 years agowintun: query for NetCfgInstanceId several times
Jason A. Donenfeld [Fri, 22 Mar 2019 22:48:40 +0000 (16:48 -0600)] 
wintun: query for NetCfgInstanceId several times

6 years agotun: windows: delete interface before deleting file handles
Jason A. Donenfeld [Fri, 22 Mar 2019 22:45:03 +0000 (16:45 -0600)] 
tun: windows: delete interface before deleting file handles

6 years agotun: windows: Make adapter rename asynchronous
Simon Rozman [Fri, 22 Mar 2019 14:57:23 +0000 (15:57 +0100)] 
tun: windows: Make adapter rename asynchronous

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: windows: Adapter devices renamed to WINTUN<LUID Index>
Simon Rozman [Fri, 22 Mar 2019 14:28:33 +0000 (15:28 +0100)] 
tun: windows: Adapter devices renamed to WINTUN<LUID Index>

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: windows: Increase unavailable adapter timeout to 30sec
Simon Rozman [Fri, 22 Mar 2019 11:45:31 +0000 (12:45 +0100)] 
tun: windows: Increase unavailable adapter timeout to 30sec

5 seconds was too short when debugging.

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: windows: Make writing persistent too
Simon Rozman [Fri, 22 Mar 2019 11:44:14 +0000 (12:44 +0100)] 
tun: windows: Make writing persistent too

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: windows: Fix paused adapter test
Simon Rozman [Fri, 22 Mar 2019 11:40:13 +0000 (12:40 +0100)] 
tun: windows: Fix paused adapter test

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: windows: just open two file handles
Jason A. Donenfeld [Thu, 21 Mar 2019 21:20:09 +0000 (15:20 -0600)] 
tun: windows: just open two file handles

6 years agoreceive: implement flush semantics
Jason A. Donenfeld [Thu, 21 Mar 2019 20:43:04 +0000 (14:43 -0600)] 
receive: implement flush semantics

6 years agotun: windows: add dummy overlapped events back
Jason A. Donenfeld [Thu, 21 Mar 2019 06:16:07 +0000 (00:16 -0600)] 
tun: windows: add dummy overlapped events back

These seem basically wrong to me, but we get crashes without them.

6 years agotun: windows: use new constants in sys
Jason A. Donenfeld [Thu, 21 Mar 2019 05:42:30 +0000 (23:42 -0600)] 
tun: windows: use new constants in sys

6 years agouapi: remove unhelpful log messages
Jason A. Donenfeld [Thu, 21 Mar 2019 05:40:20 +0000 (23:40 -0600)] 
uapi: remove unhelpful log messages

6 years agowintun: Use native Win32 API for I/O
Simon Rozman [Wed, 20 Mar 2019 20:45:40 +0000 (21:45 +0100)] 
wintun: Use native Win32 API for I/O

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agouapi: report endpoint error
Jason A. Donenfeld [Tue, 19 Mar 2019 06:34:04 +0000 (00:34 -0600)] 
uapi: report endpoint error

6 years agotun: windows: wintun does iocp
Jason A. Donenfeld [Mon, 18 Mar 2019 08:42:00 +0000 (02:42 -0600)] 
tun: windows: wintun does iocp

6 years agotun: windows: temporary hack for forcing MTU
Jason A. Donenfeld [Wed, 13 Mar 2019 08:52:32 +0000 (02:52 -0600)] 
tun: windows: temporary hack for forcing MTU

6 years agowintun: Poll more often
Jason A. Donenfeld [Sun, 10 Mar 2019 02:47:54 +0000 (03:47 +0100)] 
wintun: Poll more often

6 years agouapi: make ipcerror conform to interface
Jason A. Donenfeld [Sun, 10 Mar 2019 01:49:27 +0000 (02:49 +0100)] 
uapi: make ipcerror conform to interface

6 years agowintun: Make errors more descriptive
Simon Rozman [Fri, 8 Mar 2019 08:45:59 +0000 (09:45 +0100)] 
wintun: Make errors more descriptive

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: Return correct reboot-req flag on CreateInterface() error too
Simon Rozman [Fri, 8 Mar 2019 08:45:18 +0000 (09:45 +0100)] 
wintun: Return correct reboot-req flag on CreateInterface() error too

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: Fix double-quoted strings escaping on output
Simon Rozman [Fri, 8 Mar 2019 08:43:54 +0000 (09:43 +0100)] 
wintun: Fix double-quoted strings escaping on output

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: Introduce SetupAPI enumerator and machineName consts
Simon Rozman [Fri, 8 Mar 2019 08:42:34 +0000 (09:42 +0100)] 
wintun: Introduce SetupAPI enumerator and machineName consts

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agoWindows: Apply strict security descriptor on pipe server
Odd Stranne [Wed, 6 Mar 2019 13:58:25 +0000 (14:58 +0100)] 
Windows: Apply strict security descriptor on pipe server

Signed-off-by: Odd Stranne <odd@mullvad.net>
6 years agouapi: windows: work out pipe semantics
Jason A. Donenfeld [Fri, 8 Mar 2019 00:40:54 +0000 (01:40 +0100)] 
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>

6 years agowintun: Cleanup
Simon Rozman [Thu, 7 Mar 2019 14:45:17 +0000 (15:45 +0100)] 
wintun: Cleanup

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: Refactor network registry key name generation
Simon Rozman [Thu, 7 Mar 2019 14:34:34 +0000 (15:34 +0100)] 
wintun: Refactor network registry key name generation

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agowintun: Revise interface creation wait
Simon Rozman [Thu, 7 Mar 2019 14:19:27 +0000 (15:19 +0100)] 
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>
6 years agoreceive: squelch tear down error
Jason A. Donenfeld [Thu, 7 Mar 2019 01:03:48 +0000 (02:03 +0100)] 
receive: squelch tear down error

6 years agotun: linux: work out netpoll trick
Jason A. Donenfeld [Thu, 7 Mar 2019 00:51:41 +0000 (01:51 +0100)] 
tun: linux: work out netpoll trick

6 years agowintun: Resolve some of golint warnings
Simon Rozman [Mon, 4 Mar 2019 13:27:16 +0000 (14:27 +0100)] 
wintun: Resolve some of golint warnings

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agoElaborate the failing step when forwarding errors on return
Simon Rozman [Mon, 4 Mar 2019 13:08:13 +0000 (14:08 +0100)] 
Elaborate the failing step when forwarding errors on return

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agoSimplify reading NetCfgInstanceId from registry
Simon Rozman [Mon, 4 Mar 2019 12:25:18 +0000 (13:25 +0100)] 
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>
6 years agoUnify interface-specific network registry key open
Simon Rozman [Mon, 4 Mar 2019 10:58:02 +0000 (11:58 +0100)] 
Unify interface-specific network registry key open

Signed-off-by: Simon Rozman <simon@rozman.si>
6 years agotun: import mobile particularities
Jason A. Donenfeld [Sun, 3 Mar 2019 04:20:13 +0000 (05:20 +0100)] 
tun: import mobile particularities

6 years agoboundif: introduce API for socket binding
Jason A. Donenfeld [Sun, 3 Mar 2019 04:01:06 +0000 (05:01 +0100)] 
boundif: introduce API for socket binding

6 years agoglobal: begin modularization
Jason A. Donenfeld [Sun, 3 Mar 2019 03:04:41 +0000 (04:04 +0100)] 
global: begin modularization

6 years agotun: windows: expose GUID
Jason A. Donenfeld [Thu, 28 Feb 2019 23:11:12 +0000 (00:11 +0100)] 
tun: windows: expose GUID

6 years agotun: allow special methods in NativeTun
Jason A. Donenfeld [Thu, 28 Feb 2019 23:05:57 +0000 (00:05 +0100)] 
tun: allow special methods in NativeTun

6 years agotun: linux: netpoll is broken for tun's epoll
Jason A. Donenfeld [Wed, 27 Feb 2019 03:10:01 +0000 (04:10 +0100)] 
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

6 years agotun: linux: netlink sock needs cleaning up but file will be gc'd
Jason A. Donenfeld [Wed, 27 Feb 2019 01:20:17 +0000 (02:20 +0100)] 
tun: linux: netlink sock needs cleaning up but file will be gc'd

6 years agotun: use netpoll instead of rwcancel
Jason A. Donenfeld [Wed, 27 Feb 2019 00:48:58 +0000 (01:48 +0100)] 
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")
}

6 years agotun: use sysconn instead of .Fd with Go 1.12
Jason A. Donenfeld [Wed, 27 Feb 2019 00:06:43 +0000 (01:06 +0100)] 
tun: use sysconn instead of .Fd with Go 1.12

6 years agoRearrange imports
Jason A. Donenfeld [Fri, 22 Feb 2019 19:59:43 +0000 (20:59 +0100)] 
Rearrange imports

6 years agodevice: send persistent keepalive when bringing up device
Jason A. Donenfeld [Fri, 22 Feb 2019 18:33:28 +0000 (19:33 +0100)] 
device: send persistent keepalive when bringing up device

Reported-by: Marcelo Bello