net/netns: add TS_FORCE_LINUX_BIND_TO_DEVICE for Linux

For debugging a macOS-specific magicsock issue. macOS runs in
bind-to-interface mode always. This lets me force Linux into the same
mode as macOS, even if the Linux kernel supports SO_MARK, as it
usually does.

Updates #2331 etc

Change-Id: Iac9e4a7429c1781337e716ffc914443b7aa2869d
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
pull/5595/head
Brad Fitzpatrick 2 years ago committed by Brad Fitzpatrick
parent f3ce1e2536
commit 81bc4992f2

@ -15,6 +15,7 @@ import (
"syscall" "syscall"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"tailscale.com/envknob"
"tailscale.com/net/interfaces" "tailscale.com/net/interfaces"
"tailscale.com/types/logger" "tailscale.com/types/logger"
) )
@ -62,9 +63,14 @@ func socketMarkWorks() bool {
return true return true
} }
var forceBindToDevice = envknob.Bool("TS_FORCE_LINUX_BIND_TO_DEVICE")
// useSocketMark reports whether SO_MARK works. // useSocketMark reports whether SO_MARK works.
// If it doesn't, we have to use SO_BINDTODEVICE on our sockets instead. // If it doesn't, we have to use SO_BINDTODEVICE on our sockets instead.
func useSocketMark() bool { func useSocketMark() bool {
if forceBindToDevice {
return false
}
socketMarkWorksOnce.Do(func() { socketMarkWorksOnce.Do(func() {
socketMarkWorksOnce.v = socketMarkWorks() socketMarkWorksOnce.v = socketMarkWorks()
}) })

Loading…
Cancel
Save