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 
							
								 
							
						 
					 
				
					
						
							
								
								
									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 
								
							 
						 
						
							
							
							
							
								
							
							
								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 
							
								 
							
						 
					 
				
					
						
							
								
								
									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 
							
								 
							
						 
					 
				
					
						
							
								
								
									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 
								
							 
						 
						
							
							
							
							
								
							
							
								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 
								
							 
						 
						
							
							
							
							
								
							
							
								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 
							
								 
							
						 
					 
				
					
						
							
								
								
									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 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								b719a09a26 
								
							 
						 
						
							
							
								
								wintun: Auto-calculate TUN exchange buffer size  
							
							... 
							
							
							
							Signed-off-by: Simon Rozman <simon@rozman.si> 
							
						 
						
							2019-02-08 15:21:24 +01:00 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								f05f52637f 
								
							 
						 
						
							
							
								
								wintun: Simplify Read method()  
							
							... 
							
							
							
							Signed-off-by: Simon Rozman <simon@rozman.si> 
							
						 
						
							2019-02-08 14:31:05 +01:00 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								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 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								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 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								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 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								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 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								b662896cf4 
								
							 
						 
						
							
							
								
								setupapi: Merge SP_DRVINFO_DATA and DrvInfoData  
							
							... 
							
							
							
							Signed-off-by: Simon Rozman <simon@rozman.si> 
							
						 
						
							2019-02-07 23:50:43 +01:00 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								0525f6b112 
								
							 
						 
						
							
							
								
								setupapi: Rename SP_REMOVEDEVICE_PARAMS to RemoveDeviceParams  
							
							... 
							
							
							
							Signed-off-by: Simon Rozman <simon@rozman.si> 
							
						 
						
							2019-02-07 23:50:43 +01:00 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								9d830826c5 
								
							 
						 
						
							
							
								
								setupapi: Rename SP_CLASSINSTALL_HEADER to ClassInstallHeader  
							
							... 
							
							
							
							Signed-off-by: Simon Rozman <simon@rozman.si> 
							
						 
						
							2019-02-07 23:50:43 +01:00 
							
								 
							
						 
					 
				
					
						
							
								
								
									Simon Rozman 
								
							 
						 
						
							
							
							
							
								
							
							
								bd963497da 
								
							 
						 
						
							
							
								
								setupapi: Merge _SP_DEVINSTALL_PARAMS and DevInstallParams  
							
							... 
							
							
							
							Signed-off-by: Simon Rozman <simon@rozman.si> 
							
						 
						
							2019-02-07 23:50:30 +01:00