You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/ipn/ipnlocal
Mihai Parparita fa932fefe7 net/interfaces: redo how we get the default interface on macOS and iOS
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>
1 year ago
..
testdata ipn/ipnlocal: fix the path for writing cert files (#7203) 1 year ago
c2n.go all: update copyright and license headers 1 year ago
cert.go ipn/ipnlocal: fix the path for writing cert files (#7203) 1 year ago
cert_js.go all: update copyright and license headers 1 year ago
cert_test.go ipn/ipnlocal: fix the path for writing cert files (#7203) 1 year ago
dnsconfig_test.go all: update copyright and license headers 1 year ago
expiry.go ipn/ipnlocal: handle more edge cases in netmap expiry timer 1 year ago
expiry_test.go ipn/ipnlocal: handle more edge cases in netmap expiry timer 1 year ago
local.go net/interfaces: redo how we get the default interface on macOS and iOS 1 year ago
local_test.go ipn/ipnlocal: drop not required StateKey parameter 1 year ago
loglines_test.go ipn/ipnlocal: drop not required StateKey parameter 1 year ago
network-lock.go all: update copyright and license headers 1 year ago
network-lock_test.go ipn/ipnlocal: drop not required StateKey parameter 1 year ago
peerapi.go ipn/ipnlocal: fix passthrough of formatting arguments in PeerAPI doctor output 1 year ago
peerapi_h2c.go all: update copyright and license headers 1 year ago
peerapi_macios_ext.go all: update copyright and license headers 1 year ago
peerapi_test.go ipn/ipnlocal: drop not required StateKey parameter 1 year ago
profiles.go ipn/ipnlocal: use presence of NodeID to identify logins 1 year ago
profiles_test.go ipn/ipnlocal: use presence of NodeID to identify logins 1 year ago
serve.go all: update to Go 1.20, use strings.CutPrefix/Suffix instead of our fork 1 year ago
serve_test.go all: update copyright and license headers 1 year ago
ssh.go all: update copyright and license headers 1 year ago
ssh_stub.go all: update copyright and license headers 1 year ago
ssh_test.go ipn/ipnlocal: drop not required StateKey parameter 1 year ago
state_test.go ipn/ipnlocal: use presence of NodeID to identify logins 1 year ago