Treat wlan as a WiFi adapter name on all platforms.

wlan was previously classified as WiFi only on Android, while some
non-Android platforms may use the same name for a WiFi adapter. This
causes a WiFi interface to be assigned a higher network cost than
designed when we rely on the name matching to identify the network
type, which has further implication in the ICE candidate pair selection.

Bug: webrtc:10992
Change-Id: I8d2bb18cf9a0e3a06a104f359a85f802526a2ff9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154464
Commit-Queue: Qingsi Wang <qingsi@webrtc.org>
Reviewed-by: Alex Drake <alexdrake@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29309}
This commit is contained in:
Qingsi Wang
2019-09-25 15:03:19 -07:00
committed by Commit Bot
parent 30c2b66fba
commit c5bc9d6da8
2 changed files with 11 additions and 18 deletions

View File

@ -211,10 +211,15 @@ AdapterType GetAdapterTypeFromName(const char* network_name) {
// an ifaddr struct. See ConvertIfAddrs in this file.
return ADAPTER_TYPE_LOOPBACK;
}
if (MatchTypeNameWithIndexPattern(network_name, "eth")) {
return ADAPTER_TYPE_ETHERNET;
}
if (MatchTypeNameWithIndexPattern(network_name, "wlan")) {
return ADAPTER_TYPE_WIFI;
}
if (MatchTypeNameWithIndexPattern(network_name, "ipsec") ||
MatchTypeNameWithIndexPattern(network_name, "tun") ||
MatchTypeNameWithIndexPattern(network_name, "utun") ||
@ -241,9 +246,6 @@ AdapterType GetAdapterTypeFromName(const char* network_name) {
MatchTypeNameWithIndexPattern(network_name, "clat")) {
return ADAPTER_TYPE_CELLULAR;
}
if (MatchTypeNameWithIndexPattern(network_name, "wlan")) {
return ADAPTER_TYPE_WIFI;
}
#endif
return ADAPTER_TYPE_UNKNOWN;

View File

@ -859,6 +859,12 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNameMatching) {
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
strcpy(if_name, "wlan0");
addr_list = InstallIpv6Network(if_name, ipv6_address1, ipv6_mask, manager);
EXPECT_EQ(ADAPTER_TYPE_WIFI, 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);
@ -879,12 +885,6 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNameMatching) {
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
strcpy(if_name, "wlan1");
addr_list = InstallIpv6Network(if_name, ipv6_address2, ipv6_mask, manager);
EXPECT_EQ(ADAPTER_TYPE_WIFI, GetAdapterType(manager));
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
strcpy(if_name, "v4-rmnet_data0");
addr_list = InstallIpv6Network(if_name, ipv6_address2, ipv6_mask, manager);
EXPECT_EQ(ADAPTER_TYPE_CELLULAR, GetAdapterType(manager));
@ -896,15 +896,6 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNameMatching) {
EXPECT_EQ(ADAPTER_TYPE_CELLULAR, GetAdapterType(manager));
ClearNetworks(manager);
ReleaseIfAddrs(addr_list);
#else
// 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);
ReleaseIfAddrs(addr_list);
#endif
}
#endif // defined(WEBRTC_POSIX)