aboutsummaryrefslogtreecommitdiff
path: root/p2p
diff options
context:
space:
mode:
authorDaniel Lazarenko <daniel.lazarenko@videxio.com>2018-01-25 10:30:22 +0100
committerCommit Bot <commit-bot@chromium.org>2018-02-06 19:12:04 +0000
commit2870b0a57e68be61331ba9b8b38e762d41a242ba (patch)
treec5fbf5671c4dabda9ad30246a02c9575108547b0 /p2p
parent5dfde18c77d96918ec0c18c9496a2253a049a253 (diff)
downloadwebrtc-2870b0a57e68be61331ba9b8b38e762d41a242ba.tar.gz
Expose a link-local network interfaces enumeration option
The bug 8432 is caused by trying to connect through a "link-local" interface (IP address 169.254.0.x/16), which is listed among the iPhone network interfaces. The bug is not happening if the link-local network interfaces are skipped in the ICE candidate gethering process. To control this behaviour an option - disable_link_local_networks - is added inside the RTCConfiguration. It is used to set the new BasicPortAllocatorSession flag - PORTALLOCATOR_DISABLE_LINK_LOCAL_NETWORKS. The port allocator flag is added if the configuration option is set. IPIsLinkLocal IPAddress function and its friends (IPIsLoopback, IPIsPrivate) are refactored to work on both IPv4 and IPv6. Unit test IPIsLinkLocal. Bonus: fix a bug in IPIsLinkLocalV6: take into account just 10 network mask bits instead of 16. Bug: webrtc:8432 Change-Id: Ibe8f677a36098057b7fcad5c798380727b23359b Reviewed-on: https://webrtc-review.googlesource.com/36380 Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org> Reviewed-by: Peter Thatcher <pthatcher@webrtc.org> Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Reviewed-by: Zhi Huang <zhihuang@webrtc.org> Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21922}
Diffstat (limited to 'p2p')
-rw-r--r--p2p/base/portallocator.h4
-rw-r--r--p2p/client/basicportallocator.cc8
2 files changed, 12 insertions, 0 deletions
diff --git a/p2p/base/portallocator.h b/p2p/base/portallocator.h
index f8e813f502..1081448918 100644
--- a/p2p/base/portallocator.h
+++ b/p2p/base/portallocator.h
@@ -87,6 +87,10 @@ enum {
// the application to work in a wider variety of environments, at the expense
// of having to allocate additional candidates.
PORTALLOCATOR_ENABLE_ANY_ADDRESS_PORTS = 0x8000,
+
+ // Exclude link-local network interfaces
+ // from considertaion after adapter enumeration.
+ PORTALLOCATOR_DISABLE_LINK_LOCAL_NETWORKS = 0x10000,
};
// Defines various reasons that have caused ICE regathering.
diff --git a/p2p/client/basicportallocator.cc b/p2p/client/basicportallocator.cc
index 339e007766..86cec8fb34 100644
--- a/p2p/client/basicportallocator.cc
+++ b/p2p/client/basicportallocator.cc
@@ -633,6 +633,14 @@ std::vector<rtc::Network*> BasicPortAllocatorSession::GetNetworks() {
network_manager->GetAnyAddressNetworks(&networks);
}
}
+ // Filter out link-local networks if needed.
+ if (flags() & PORTALLOCATOR_DISABLE_LINK_LOCAL_NETWORKS) {
+ networks.erase(std::remove_if(networks.begin(), networks.end(),
+ [](rtc::Network* network) {
+ return IPIsLinkLocal(network->prefix());
+ }),
+ networks.end());
+ }
// Do some more filtering, depending on the network ignore mask and "disable
// costly networks" flag.
networks.erase(std::remove_if(networks.begin(), networks.end(),