mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 13:05:46 +00:00
fa932fefe7
With #6566 we added an external mechanism for getting the default interface, and used it on macOS and iOS (see tailscale/corp#8201). The goal was to be able to get the default physical interface even when using an exit node (in which case the routing table would say that the Tailscale utun* interface is the default). However, the external mechanism turns out to be unreliable in some cases, e.g. when multiple cellular interfaces are present/toggled (I have occasionally gotten my phone into a state where it reports the pdp_ip1 interface as the default, even though it can't actually route traffic). It was observed that `ifconfig -v` on macOS reports an "effective interface" for the Tailscale utn* interface, which seems promising. By examining the ifconfig source code, it turns out that this is done via a SIOCGIFDELEGATE ioctl syscall. Though this is a private API, it appears to have been around for a long time (e.g. it's in the 10.13 xnu release at https://opensource.apple.com/source/xnu/xnu-4570.41.2/bsd/net/if_types.h.auto.html) and thus is unlikely to go away. We can thus use this ioctl if the routing table says that a utun* interface is the default, and go back to the simpler mechanism that we had before #6566. Updates #7184 Updates #7188 Signed-off-by: Mihai Parparita <mihai@tailscale.com> |
||
---|---|---|
.. | ||
testdata | ||
c2n.go | ||
cert_js.go | ||
cert_test.go | ||
cert.go | ||
dnsconfig_test.go | ||
expiry_test.go | ||
expiry.go | ||
local_test.go | ||
local.go | ||
loglines_test.go | ||
network-lock_test.go | ||
network-lock.go | ||
peerapi_h2c.go | ||
peerapi_macios_ext.go | ||
peerapi_test.go | ||
peerapi.go | ||
profiles_test.go | ||
profiles.go | ||
serve_test.go | ||
serve.go | ||
ssh_stub.go | ||
ssh_test.go | ||
ssh.go | ||
state_test.go |