tun: freebsd: set IFF_MULTICAST for routing daemons

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2021-04-18 20:09:04 -06:00
parent 3988821442
commit b0e5b19969

View file

@ -143,9 +143,9 @@ func (tun *NativeTun) routineRouteListener(tunIfindex int) {
} }
func tunName(fd uintptr) (string, error) { func tunName(fd uintptr) (string, error) {
//Terrible hack to make up for freebsd not having a TUNGIFNAME // Terrible hack to make up for freebsd not having a TUNGIFNAME
//First, make sure the tun pid matches this proc's pid // First, make sure the tun pid matches this proc's pid
_, _, errno := unix.Syscall( _, _, errno := unix.Syscall(
unix.SYS_IOCTL, unix.SYS_IOCTL,
uintptr(fd), uintptr(fd),
@ -173,7 +173,7 @@ func tunName(fd uintptr) (string, error) {
procPid := os.Getpid() procPid := os.Getpid()
//Try to find interface with matching PID // Try to find interface with matching PID
for i := 1; ; i++ { for i := 1; ; i++ {
iface, _ := net.InterfaceByIndex(i) iface, _ := net.InterfaceByIndex(i)
if err != nil || iface == nil { if err != nil || iface == nil {
@ -293,7 +293,7 @@ func CreateTUN(name string, mtu int) (Device, error) {
} }
// Get out of PPP mode. // Get out of PPP mode.
ifflags := syscall.IFF_BROADCAST ifflags := syscall.IFF_BROADCAST | syscall.IFF_MULTICAST
tun.operateOnFd(func(fd uintptr) { tun.operateOnFd(func(fd uintptr) {
_, _, errno = unix.Syscall( _, _, errno = unix.Syscall(
unix.SYS_IOCTL, unix.SYS_IOCTL,