If adapter type is unknown and interface name is "ipsec", treat as VPN.

This will result in the ipsec interfaces being prioritized below Wi-Fi
and cell interfaces. This makes the most difference when we hit the
default limit for IPv6 interfaces (5), and there are lots of ipsec
interfaces for whatever reason, resulting in the "real" interfaces that
would actually succeed not being used. See the linked bug 7703.

BUG=webrtc:7703, webrtc:3149

Review-Url: https://codereview.webrtc.org/2985133002
Cr-Commit-Position: refs/heads/master@{#19175}
This commit is contained in:
deadbeef 2017-07-27 15:05:29 -07:00 committed by Commit Bot
parent 4c27a96767
commit 4cd599f025
2 changed files with 17 additions and 9 deletions

View File

@ -785,6 +785,9 @@ AdapterType BasicNetworkManager::GetAdapterTypeFromName(
return type;
}
}
if (strncmp(network_name, "ipsec", 5) == 0) {
return ADAPTER_TYPE_VPN;
}
#if defined(WEBRTC_IOS)
// Cell networks are pdp_ipN on iOS.
if (strncmp(network_name, "pdp_ip", 6) == 0) {

View File

@ -828,11 +828,17 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNameMatching) {
std::string ipv6_mask = "FFFF:FFFF:FFFF:FFFF::";
BasicNetworkManager manager;
#if defined(WEBRTC_IOS)
char if_name[20] = "pdp_ip0";
// IPSec interface; name is in form "ipsec<index>".
char if_name[20] = "ipsec11";
ifaddrs* addr_list =
InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager);
EXPECT_EQ(ADAPTER_TYPE_VPN, GetAdapterType(manager));
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
#if defined(WEBRTC_IOS)
strcpy(if_name, "pdp_ip0");
addr_list = InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager);
EXPECT_EQ(ADAPTER_TYPE_CELLULAR, GetAdapterType(manager));
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
@ -844,10 +850,8 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNameMatching) {
ReleaseIfAddrs(addr_list);
#elif defined(WEBRTC_ANDROID)
char if_name[20] = "rmnet0";
ifaddrs* addr_list =
InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager);
strcpy(if_name, "rmnet0");
addr_list = InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager);
EXPECT_EQ(ADAPTER_TYPE_CELLULAR, GetAdapterType(manager));
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
@ -864,9 +868,10 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNameMatching) {
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
#else
char if_name[20] = "wlan0";
ifaddrs* addr_list =
InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager);
// TODO(deadbeef): If not iOS or Android, "wlan0" should be treated as
// "unknown"? Why? This should be fixed if there's no good reason.
strcpy(if_name, "wlan0");
addr_list = InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager);
EXPECT_EQ(ADAPTER_TYPE_UNKNOWN, GetAdapterType(manager));
ClearNetworks(manager);