summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormallinath@chromium.org <mallinath@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-19 09:40:28 +0000
committermallinath@chromium.org <mallinath@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-19 09:40:28 +0000
commit24db3484576f5128c0584ed8d8777e4ccc5fff17 (patch)
tree8fe1924e9f289b9d4195ef80cda10a309199a6e4
parent17a80d1337ff3c1ce1f6033dbcfa5174e2959a70 (diff)
downloadchromium_src-24db3484576f5128c0584ed8d8777e4ccc5fff17.zip
chromium_src-24db3484576f5128c0584ed8d8777e4ccc5fff17.tar.gz
chromium_src-24db3484576f5128c0584ed8d8777e4ccc5fff17.tar.bz2
Filter virtual network interfaces for p2p sessions.
For WebRTC virtual host scoped network interfaces are not useful, but if present they take processing time and webrtc applications keep sending STUN ping messages from virtual network interfaces. This CL adding a policy for net::GetNetworkList method, which allows users of the method to include or exclude these interfaces. R=agl@chromium.org,sergeyu@chromium.org TBR=bbudge@chromium.org,ananta@chromium.org Review URL: https://codereview.chromium.org/99133020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241830 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/api/dial/dial_service.cc3
-rw-r--r--chrome/browser/extensions/api/socket/socket_api.cc3
-rw-r--r--chrome/browser/extensions/api/system_network/system_network_api.cc3
-rw-r--r--chrome/browser/local_discovery/privet_traffic_detector.cc2
-rw-r--r--chrome/browser/media/webrtc_logging_handler_host.cc3
-rw-r--r--chrome_frame/test/chrome_frame_test_utils.cc3
-rw-r--r--cloud_print/gcp20/prototype/printer.cc3
-rw-r--r--content/browser/renderer_host/p2p/socket_dispatcher_host.cc2
-rw-r--r--content/browser/renderer_host/pepper/pepper_network_monitor_host.cc2
-rw-r--r--net/base/net_util.h9
-rw-r--r--net/base/net_util_posix.cc11
-rw-r--r--net/base/net_util_unittest.cc2
-rw-r--r--net/base/net_util_win.cc12
-rw-r--r--net/dns/mdns_client.cc2
14 files changed, 44 insertions, 16 deletions
diff --git a/chrome/browser/extensions/api/dial/dial_service.cc b/chrome/browser/extensions/api/dial/dial_service.cc
index 773bdc7..c1bbcff 100644
--- a/chrome/browser/extensions/api/dial/dial_service.cc
+++ b/chrome/browser/extensions/api/dial/dial_service.cc
@@ -113,7 +113,8 @@ void GetNetworkListOnFileThread(
const scoped_refptr<base::MessageLoopProxy>& loop,
const base::Callback<void(const NetworkInterfaceList& networks)>& cb) {
NetworkInterfaceList list;
- bool success = net::GetNetworkList(&list);
+ bool success = net::GetNetworkList(
+ &list, net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES);
if (!success)
DVLOG(1) << "Could not retrieve network list!";
diff --git a/chrome/browser/extensions/api/socket/socket_api.cc b/chrome/browser/extensions/api/socket/socket_api.cc
index da173c2..cd17a7f 100644
--- a/chrome/browser/extensions/api/socket/socket_api.cc
+++ b/chrome/browser/extensions/api/socket/socket_api.cc
@@ -661,7 +661,8 @@ bool SocketGetNetworkListFunction::RunImpl() {
void SocketGetNetworkListFunction::GetNetworkListOnFileThread() {
net::NetworkInterfaceList interface_list;
- if (GetNetworkList(&interface_list)) {
+ if (GetNetworkList(&interface_list,
+ net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES)) {
content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
base::Bind(&SocketGetNetworkListFunction::SendResponseOnUIThread,
this, interface_list));
diff --git a/chrome/browser/extensions/api/system_network/system_network_api.cc b/chrome/browser/extensions/api/system_network/system_network_api.cc
index 25621c2..633cea3 100644
--- a/chrome/browser/extensions/api/system_network/system_network_api.cc
+++ b/chrome/browser/extensions/api/system_network/system_network_api.cc
@@ -27,7 +27,8 @@ bool SystemNetworkGetNetworkInterfacesFunction::RunImpl() {
void SystemNetworkGetNetworkInterfacesFunction::GetListOnFileThread() {
net::NetworkInterfaceList interface_list;
- if (net::GetNetworkList(&interface_list)) {
+ if (net::GetNetworkList(
+ &interface_list, net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES)) {
content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
base::Bind(&SystemNetworkGetNetworkInterfacesFunction::
SendResponseOnUIThread,
diff --git a/chrome/browser/local_discovery/privet_traffic_detector.cc b/chrome/browser/local_discovery/privet_traffic_detector.cc
index 602e7f1..0d8f70f 100644
--- a/chrome/browser/local_discovery/privet_traffic_detector.cc
+++ b/chrome/browser/local_discovery/privet_traffic_detector.cc
@@ -24,7 +24,7 @@ void GetNetworkListOnFileThread(
const base::Callback<void(const net::NetworkInterfaceList&)> callback) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
net::NetworkInterfaceList networks;
- if (!GetNetworkList(&networks))
+ if (!GetNetworkList(&networks, net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES))
return;
net::NetworkInterfaceList ip4_networks;
diff --git a/chrome/browser/media/webrtc_logging_handler_host.cc b/chrome/browser/media/webrtc_logging_handler_host.cc
index c912815..bed00cb 100644
--- a/chrome/browser/media/webrtc_logging_handler_host.cc
+++ b/chrome/browser/media/webrtc_logging_handler_host.cc
@@ -325,7 +325,8 @@ void WebRtcLoggingHandlerHost::LogMachineInfo() {
// Network interfaces
net::NetworkInterfaceList network_list;
- net::GetNetworkList(&network_list);
+ net::GetNetworkList(&network_list,
+ net::EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES);
info = "Discovered " + IntToString(network_list.size()) +
" network interfaces:" + '\n';
pcb.Write(info.c_str(), info.length());
diff --git a/chrome_frame/test/chrome_frame_test_utils.cc b/chrome_frame/test/chrome_frame_test_utils.cc
index c614214..8dfc86e 100644
--- a/chrome_frame/test/chrome_frame_test_utils.cc
+++ b/chrome_frame/test/chrome_frame_test_utils.cc
@@ -712,7 +712,8 @@ std::string GetLocalIPv4Address() {
std::string address;
net::NetworkInterfaceList nic_list;
- if (!net::GetNetworkList(&nic_list)) {
+ if (!net::GetNetworkList(&nic_list,
+ net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES)) {
LOG(ERROR) << "GetNetworkList failed to look up non-loopback adapters. "
<< "Tests will be run over the loopback adapter, which may "
<< "result in hangs.";
diff --git a/cloud_print/gcp20/prototype/printer.cc b/cloud_print/gcp20/prototype/printer.cc
index 1d758f7..e5828261 100644
--- a/cloud_print/gcp20/prototype/printer.cc
+++ b/cloud_print/gcp20/prototype/printer.cc
@@ -111,7 +111,8 @@ const char kCdd[] =
net::IPAddressNumber GetLocalIp(const std::string& interface_name,
bool return_ipv6_number) {
net::NetworkInterfaceList interfaces;
- bool success = net::GetNetworkList(&interfaces);
+ bool success = net::GetNetworkList(
+ &interfaces, net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES);
DCHECK(success);
size_t expected_address_size = return_ipv6_number ? net::kIPv6AddressSize
diff --git a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc
index 1608ae0..5038342 100644
--- a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc
+++ b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc
@@ -256,7 +256,7 @@ void P2PSocketDispatcherHost::OnDestroySocket(int socket_id) {
void P2PSocketDispatcherHost::DoGetNetworkList() {
net::NetworkInterfaceList list;
- net::GetNetworkList(&list);
+ net::GetNetworkList(&list, net::EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES);
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE, base::Bind(
&P2PSocketDispatcherHost::SendNetworkList, this, list));
diff --git a/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc b/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc
index b53a60b..32ed3cf 100644
--- a/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc
+++ b/content/browser/renderer_host/pepper/pepper_network_monitor_host.cc
@@ -32,7 +32,7 @@ bool CanUseNetworkMonitor(bool external_plugin,
scoped_ptr<net::NetworkInterfaceList> GetNetworkList() {
scoped_ptr<net::NetworkInterfaceList> list(new net::NetworkInterfaceList());
- net::GetNetworkList(list.get());
+ net::GetNetworkList(list.get(), net::INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES);
return list.Pass();
}
diff --git a/net/base/net_util.h b/net/base/net_util.h
index baa68e3..fe91844 100644
--- a/net/base/net_util.h
+++ b/net/base/net_util.h
@@ -528,11 +528,18 @@ struct NET_EXPORT NetworkInterface {
typedef std::vector<NetworkInterface> NetworkInterfaceList;
+// Policy settings to include/exclude VMWare host only network interfaces.
+enum HostScopeVirtualInterfacePolicy {
+ INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES,
+ EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES,
+};
+
// Returns list of network interfaces except loopback interface. If an
// interface has more than one address, a separate entry is added to
// the list for each address.
// Can be called only on a thread that allows IO.
-NET_EXPORT bool GetNetworkList(NetworkInterfaceList* networks);
+NET_EXPORT bool GetNetworkList(NetworkInterfaceList* networks,
+ HostScopeVirtualInterfacePolicy policy);
// General category of the IEEE 802.11 (wifi) physical layer operating mode.
enum WifiPHYLayerProtocol {
diff --git a/net/base/net_util_posix.cc b/net/base/net_util_posix.cc
index 5e1042b..0045938 100644
--- a/net/base/net_util_posix.cc
+++ b/net/base/net_util_posix.cc
@@ -63,7 +63,8 @@ bool FileURLToFilePath(const GURL& url, base::FilePath* path) {
return !file_path_str.empty();
}
-bool GetNetworkList(NetworkInterfaceList* networks) {
+bool GetNetworkList(NetworkInterfaceList* networks,
+ HostScopeVirtualInterfacePolicy policy) {
#if defined(OS_ANDROID)
std::string network_list = android::GetNetworkList();
base::StringTokenizer network_interfaces(network_list, "\n");
@@ -138,8 +139,14 @@ bool GetNetworkList(NetworkInterfaceList* networks) {
continue;
}
+ const std::string& name = interface->ifa_name;
+ // Filter out VMware interfaces, typically named vmnet1 and vmnet8.
+ if (policy == EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES &&
+ ((name.find("vmnet") != std::string::npos) ||
+ (name.find("vnic") != std::string::npos))) {
+ continue;
+ }
IPEndPoint address;
- std::string name = interface->ifa_name;
if (address.FromSockAddr(addr, addr_size)) {
uint8 net_mask = 0;
if (interface->ifa_netmask) {
diff --git a/net/base/net_util_unittest.cc b/net/base/net_util_unittest.cc
index 2259629..5d5137a 100644
--- a/net/base/net_util_unittest.cc
+++ b/net/base/net_util_unittest.cc
@@ -3299,7 +3299,7 @@ TEST(NetUtilTest, IsLocalhost) {
// Verify GetNetworkList().
TEST(NetUtilTest, GetNetworkList) {
NetworkInterfaceList list;
- ASSERT_TRUE(GetNetworkList(&list));
+ ASSERT_TRUE(GetNetworkList(&list, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES));
for (NetworkInterfaceList::iterator it = list.begin();
it != list.end(); ++it) {
// Verify that the name is not empty.
diff --git a/net/base/net_util_win.cc b/net/base/net_util_win.cc
index d0efe39..b15337b 100644
--- a/net/base/net_util_win.cc
+++ b/net/base/net_util_win.cc
@@ -138,7 +138,8 @@ bool FileURLToFilePath(const GURL& url, base::FilePath* file_path) {
return true;
}
-bool GetNetworkList(NetworkInterfaceList* networks) {
+bool GetNetworkList(NetworkInterfaceList* networks,
+ HostScopeVirtualInterfacePolicy policy) {
// GetAdaptersAddresses() may require IO operations.
base::ThreadRestrictions::AssertIOAllowed();
bool is_xp = base::win::GetVersion() < base::win::VERSION_VISTA;
@@ -170,7 +171,14 @@ bool GetNetworkList(NetworkInterfaceList* networks) {
continue;
}
- std::string name = adapter->AdapterName;
+ // Ignore any HOST side vmware adapters with a description like:
+ // VMware Virtual Ethernet Adapter for VMnet1
+ // but don't ignore any GUEST side adapters with a description like:
+ // VMware Accelerated AMD PCNet Adapter #2
+ if (policy == EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES &&
+ strstr(adapter->AdapterName, "VMnet") != NULL) {
+ continue;
+ }
for (IP_ADAPTER_UNICAST_ADDRESS* address = adapter->FirstUnicastAddress;
address; address = address->Next) {
diff --git a/net/dns/mdns_client.cc b/net/dns/mdns_client.cc
index 93f1d61..c55de6e 100644
--- a/net/dns/mdns_client.cc
+++ b/net/dns/mdns_client.cc
@@ -67,7 +67,7 @@ IPEndPoint GetMDnsIPEndPoint(AddressFamily address_family) {
InterfaceIndexFamilyList GetMDnsInterfacesToBind() {
NetworkInterfaceList network_list;
InterfaceIndexFamilyList interfaces;
- if (!GetNetworkList(&network_list))
+ if (!GetNetworkList(&network_list, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES))
return interfaces;
for (size_t i = 0; i < network_list.size(); ++i) {
AddressFamily family = GetAddressFamily(network_list[i].address);