summaryrefslogtreecommitdiffhomepage
path: root/tun/tun_freebsd.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-03-23 12:41:34 -0600
committerJason A. Donenfeld <Jason@zx2c4.com>2021-03-23 12:41:34 -0600
commit12ce53271baa04a8a8a2c491e1604c53d5f05cfb (patch)
tree0a65854b5359b608be84a07cfd3d663145afe416 /tun/tun_freebsd.go
parent5f0c8b942d93be6ac36a156c0ba44c86c3698f91 (diff)
tun: freebsd: use broadcast mode instead of PPP mode
It makes the routing configuration simpler. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'tun/tun_freebsd.go')
-rw-r--r--tun/tun_freebsd.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/tun/tun_freebsd.go b/tun/tun_freebsd.go
index 1883aad..c2ad65f 100644
--- a/tun/tun_freebsd.go
+++ b/tun/tun_freebsd.go
@@ -292,6 +292,23 @@ func CreateTUN(name string, mtu int) (Device, error) {
return nil, fmt.Errorf("Unable to put into IFHEAD mode: %w", errno)
}
+ // Get out of PPP mode.
+ ifflags := syscall.IFF_BROADCAST
+ tun.operateOnFd(func(fd uintptr) {
+ _, _, errno = unix.Syscall(
+ unix.SYS_IOCTL,
+ fd,
+ uintptr(_TUNSIFMODE),
+ uintptr(unsafe.Pointer(&ifflags)),
+ )
+ })
+
+ if errno != 0 {
+ tunFile.Close()
+ tunDestroy(assignedName)
+ return nil, fmt.Errorf("Unable to put into IFF_BROADCAST mode: %w", errno)
+ }
+
// Open control sockets
confd, err := unix.Socket(
unix.AF_INET,