]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
A bit more messing with tun_dragonfly bo/dflybsd-port
authorBrady OBrien <brady.obrien128@gmail.com>
Sat, 26 May 2018 01:43:22 +0000 (20:43 -0500)
committerBrady OBrien <brady.obrien128@gmail.com>
Sat, 26 May 2018 01:43:22 +0000 (20:43 -0500)
tun/tun_dragonfly.go

index 6d9608b9b5b66d6d4f2de860188c830caf047167..ecf4f2469aa33fc6f971925d9f1a660f2a0f0a02 100644 (file)
@@ -23,6 +23,8 @@ import (
 const _TUNSIFHEAD = 0x80047460
 const _TUNSIFMODE = 0x8004745e
 const _TUNSIFPID = 0x2000745f
+const _FIONBIO = 0x8004667e
+const _FIOASYNC = 0x8004667d
 
 // Iface status string max len
 const _IFSTATMAX = 800
@@ -269,9 +271,19 @@ func CreateTUN(name string, mtu int) (TUNDevice, error) {
                return nil, err
        }
 
+       var errno syscall.Errno;
+       
+       ifbiomode := 1
+       _, _, errno = unix.Syscall(
+               unix.SYS_IOCTL,
+               uintptr(tunfd),
+               uintptr(_FIOASYNC),
+               uintptr(unsafe.Pointer(&ifbiomode)),
+       )
+       
        // Enable ifhead mode, otherwise tun will complain if it gets a non-AF_INET packet
        ifheadmode := 1
-       _, _, errno := unix.Syscall(
+       _, _, errno = unix.Syscall(
                unix.SYS_IOCTL,
                uintptr(tunfd),
                uintptr(_TUNSIFHEAD),
@@ -390,7 +402,7 @@ func (tun *nativeTun) doRead(buff []byte, offset int) (int, error) {
        default:
                buff := buff[offset-4:]
                n, err := tun.fd.Read(buff[:])
-               if n < 4 {
+               if n < 4  && n > 0{
                        return 0, err
                }
                return n - 4, err