diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-03-23 12:41:34 -0600 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-03-23 12:41:34 -0600 |
commit | 12ce53271baa04a8a8a2c491e1604c53d5f05cfb (patch) | |
tree | 0a65854b5359b608be84a07cfd3d663145afe416 /tun/tun_freebsd.go | |
parent | 5f0c8b942d93be6ac36a156c0ba44c86c3698f91 (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.go | 17 |
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, |