Detect Tailscale interfaces as VPN Tailscale uses tailscale<index> on Linux, which GetAdapterTypeFromName did not match, so the tunnel was reported as ADAPTER_TYPE_UNKNOWN. On macOS and iOS it uses utun<index> and was already detected, so the same tunnel was classified differently depending on the platform. See also https://github.com/tailscale/tailscale/blob/cd34d441be2f277221e81672125f73ec3e8cb16d/cmd/tailscaled/tailscaled.go#L71 Bug: chromium:474435503 Change-Id: I5ac3c7d00891ad74a640c3b74443095e82ac13f0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/491340 Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org> Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com> Cr-Commit-Position: refs/heads/main@{#48235}
diff --git a/rtc_base/network.cc b/rtc_base/network.cc index e023bc8..ec8e8a3 100644 --- a/rtc_base/network.cc +++ b/rtc_base/network.cc
@@ -284,7 +284,11 @@ if (MatchTypeNameWithIndexPattern(network_name, "ipsec") || MatchTypeNameWithIndexPattern(network_name, "tun") || MatchTypeNameWithIndexPattern(network_name, "utun") || - MatchTypeNameWithIndexPattern(network_name, "tap")) { + MatchTypeNameWithIndexPattern(network_name, "tap") || + // Tailscale on Linux; on macOS and iOS it uses utun<index>. + MatchTypeNameWithIndexPattern(network_name, "tailscale") || + // Tailscale on Windows. + MatchTypeNameWithIndexPattern(network_name, "Tailscale")) { return ADAPTER_TYPE_VPN; } #if defined(WEBRTC_IOS)
diff --git a/rtc_base/network_unittest.cc b/rtc_base/network_unittest.cc index 2baef17..0759523 100644 --- a/rtc_base/network_unittest.cc +++ b/rtc_base/network_unittest.cc
@@ -964,6 +964,13 @@ ClearNetworks(manager); ReleaseIfAddrs(addr_list); + // Tailscale interface; name is in form "tailscale<index>". + strcpy(if_name, "tailscale0"); + addr_list = InstallIpv4Network(if_name, ipv4_address1, ipv4_mask, manager); + EXPECT_EQ(ADAPTER_TYPE_VPN, GetAdapterType(manager)); + ClearNetworks(manager); + ReleaseIfAddrs(addr_list); + strcpy(if_name, "lo0"); addr_list = InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager); EXPECT_EQ(ADAPTER_TYPE_LOOPBACK, GetAdapterType(manager));