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}
diff --git a/rtc_base/network.cc b/rtc_base/network.cc
index 4670ab0..369c582 100644
--- a/rtc_base/network.cc
+++ b/rtc_base/network.cc
@@ -211,10 +211,15 @@
// 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 @@
MatchTypeNameWithIndexPattern(network_name, "clat")) {
return ADAPTER_TYPE_CELLULAR;
}
- if (MatchTypeNameWithIndexPattern(network_name, "wlan")) {
- return ADAPTER_TYPE_WIFI;
- }
#endif
return ADAPTER_TYPE_UNKNOWN;
diff --git a/rtc_base/network_unittest.cc b/rtc_base/network_unittest.cc
index d07feb6..024115a 100644
--- a/rtc_base/network_unittest.cc
+++ b/rtc_base/network_unittest.cc
@@ -859,6 +859,12 @@
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 @@
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 @@
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)