Index: net/base/net_util_mac.cc |
diff --git a/net/base/net_util_mac.cc b/net/base/net_util_mac.cc |
deleted file mode 100644 |
index b227fbca88b20c9cf1e67dff7a0c2cf1ff9dcca5..0000000000000000000000000000000000000000 |
--- a/net/base/net_util_mac.cc |
+++ /dev/null |
@@ -1,251 +0,0 @@ |
-// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/base/net_util_mac.h" |
- |
-#include <ifaddrs.h> |
-#include <net/if.h> |
-#include <netinet/in.h> |
-#include <set> |
-#include <sys/types.h> |
- |
-#include "base/files/file_path.h" |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_tokenizer.h" |
-#include "base/strings/string_util.h" |
-#include "base/threading/thread_restrictions.h" |
-#include "net/base/escape.h" |
-#include "net/base/ip_endpoint.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/net_util_posix.h" |
-#include "url/gurl.h" |
- |
-#if !defined(OS_IOS) |
-#include <net/if_media.h> |
-#include <netinet/in_var.h> |
-#include <sys/ioctl.h> |
-#endif // !OS_IOS |
- |
-namespace net { |
- |
-namespace { |
- |
-#if !defined(OS_IOS) |
- |
-// MacOSX implementation of IPAttributesGetterMac which calls ioctl on socket to |
-// retrieve IP attributes. |
-class IPAttributesGetterMacImpl : public internal::IPAttributesGetterMac { |
- public: |
- IPAttributesGetterMacImpl(); |
- ~IPAttributesGetterMacImpl() override; |
- bool IsInitialized() const override; |
- bool GetIPAttributes(const char* ifname, |
- const sockaddr* sock_addr, |
- int* native_attributes) override; |
- |
- private: |
- int ioctl_socket_; |
-}; |
- |
-IPAttributesGetterMacImpl::IPAttributesGetterMacImpl() |
- : ioctl_socket_(socket(AF_INET6, SOCK_DGRAM, 0)) { |
- DCHECK_GE(ioctl_socket_, 0); |
-} |
- |
-bool IPAttributesGetterMacImpl::IsInitialized() const { |
- return ioctl_socket_ >= 0; |
-} |
- |
-IPAttributesGetterMacImpl::~IPAttributesGetterMacImpl() { |
- if (ioctl_socket_ >= 0) { |
- close(ioctl_socket_); |
- } |
-} |
- |
-bool IPAttributesGetterMacImpl::GetIPAttributes(const char* ifname, |
- const sockaddr* sock_addr, |
- int* native_attributes) { |
- struct in6_ifreq ifr = {}; |
- strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1); |
- memcpy(&ifr.ifr_ifru.ifru_addr, sock_addr, sock_addr->sa_len); |
- int rv = ioctl(ioctl_socket_, SIOCGIFAFLAG_IN6, &ifr); |
- if (rv >= 0) { |
- *native_attributes = ifr.ifr_ifru.ifru_flags; |
- } |
- return (rv >= 0); |
-} |
- |
-// When returning true, the platform native IPv6 address attributes were |
-// successfully converted to net IP address attributes. Otherwise, returning |
-// false and the caller should drop the IP address which can't be used by the |
-// application layer. |
-bool TryConvertNativeToNetIPAttributes(int native_attributes, |
- int* net_attributes) { |
- // For MacOSX, we disallow addresses with attributes IN6_IFF_ANYCASE, |
- // IN6_IFF_DUPLICATED, IN6_IFF_TENTATIVE, and IN6_IFF_DETACHED as these are |
- // still progressing through duplicated address detection (DAD) or are not |
- // suitable to be used in an one-to-one communication and shouldn't be used |
- // by the application layer. |
- if (native_attributes & (IN6_IFF_ANYCAST | IN6_IFF_DUPLICATED | |
- IN6_IFF_TENTATIVE | IN6_IFF_DETACHED)) { |
- return false; |
- } |
- |
- if (native_attributes & IN6_IFF_TEMPORARY) { |
- *net_attributes |= IP_ADDRESS_ATTRIBUTE_TEMPORARY; |
- } |
- |
- if (native_attributes & IN6_IFF_DEPRECATED) { |
- *net_attributes |= IP_ADDRESS_ATTRIBUTE_DEPRECATED; |
- } |
- |
- return true; |
-} |
- |
-NetworkChangeNotifier::ConnectionType GetNetworkInterfaceType( |
- int addr_family, |
- const std::string& interface_name) { |
- NetworkChangeNotifier::ConnectionType type = |
- NetworkChangeNotifier::CONNECTION_UNKNOWN; |
- |
- struct ifmediareq ifmr = {}; |
- strncpy(ifmr.ifm_name, interface_name.c_str(), sizeof(ifmr.ifm_name) - 1); |
- |
- int s = socket(addr_family, SOCK_DGRAM, 0); |
- if (s == -1) { |
- return type; |
- } |
- |
- if (ioctl(s, SIOCGIFMEDIA, &ifmr) != -1) { |
- if (ifmr.ifm_current & IFM_IEEE80211) { |
- type = NetworkChangeNotifier::CONNECTION_WIFI; |
- } else if (ifmr.ifm_current & IFM_ETHER) { |
- type = NetworkChangeNotifier::CONNECTION_ETHERNET; |
- } |
- } |
- close(s); |
- return type; |
-} |
- |
-#endif // !OS_IOS |
-} // namespace |
- |
-namespace internal { |
- |
-bool GetNetworkListImpl(NetworkInterfaceList* networks, |
- int policy, |
- const ifaddrs* interfaces, |
- IPAttributesGetterMac* ip_attributes_getter) { |
- // Enumerate the addresses assigned to network interfaces which are up. |
- for (const ifaddrs* interface = interfaces; interface != NULL; |
- interface = interface->ifa_next) { |
- // Skip loopback interfaces, and ones which are down. |
- if (!(IFF_RUNNING & interface->ifa_flags)) |
- continue; |
- if (IFF_LOOPBACK & interface->ifa_flags) |
- continue; |
- // Skip interfaces with no address configured. |
- struct sockaddr* addr = interface->ifa_addr; |
- if (!addr) |
- continue; |
- |
- // Skip unspecified addresses (i.e. made of zeroes) and loopback addresses |
- // configured on non-loopback interfaces. |
- if (IsLoopbackOrUnspecifiedAddress(addr)) |
- continue; |
- |
- const std::string& name = interface->ifa_name; |
- // Filter out VMware interfaces, typically named vmnet1 and vmnet8. |
- if (ShouldIgnoreInterface(name, policy)) { |
- continue; |
- } |
- |
- NetworkChangeNotifier::ConnectionType connection_type = |
- NetworkChangeNotifier::CONNECTION_UNKNOWN; |
- |
- int ip_attributes = IP_ADDRESS_ATTRIBUTE_NONE; |
- |
-#if !defined(OS_IOS) |
- // Retrieve native ip attributes and convert to net version if a getter is |
- // given. |
- if (ip_attributes_getter && ip_attributes_getter->IsInitialized()) { |
- int native_attributes = 0; |
- if (addr->sa_family == AF_INET6 && |
- ip_attributes_getter->GetIPAttributes( |
- interface->ifa_name, interface->ifa_addr, &native_attributes)) { |
- if (!TryConvertNativeToNetIPAttributes(native_attributes, |
- &ip_attributes)) { |
- continue; |
- } |
- } |
- } |
- |
- connection_type = GetNetworkInterfaceType(addr->sa_family, name); |
-#endif // !OS_IOS |
- |
- IPEndPoint address; |
- |
- int addr_size = 0; |
- if (addr->sa_family == AF_INET6) { |
- addr_size = sizeof(sockaddr_in6); |
- } else if (addr->sa_family == AF_INET) { |
- addr_size = sizeof(sockaddr_in); |
- } |
- |
- if (address.FromSockAddr(addr, addr_size)) { |
- uint8 prefix_length = 0; |
- if (interface->ifa_netmask) { |
- // If not otherwise set, assume the same sa_family as ifa_addr. |
- if (interface->ifa_netmask->sa_family == 0) { |
- interface->ifa_netmask->sa_family = addr->sa_family; |
- } |
- IPEndPoint netmask; |
- if (netmask.FromSockAddr(interface->ifa_netmask, addr_size)) { |
- prefix_length = MaskPrefixLength(netmask.address()); |
- } |
- } |
- networks->push_back(NetworkInterface( |
- name, name, if_nametoindex(name.c_str()), connection_type, |
- address.address(), prefix_length, ip_attributes)); |
- } |
- } |
- |
- return true; |
-} |
- |
-} // namespace internal |
- |
-bool GetNetworkList(NetworkInterfaceList* networks, int policy) { |
- if (networks == NULL) |
- return false; |
- |
- // getifaddrs() may require IO operations. |
- base::ThreadRestrictions::AssertIOAllowed(); |
- |
- ifaddrs* interfaces; |
- if (getifaddrs(&interfaces) < 0) { |
- PLOG(ERROR) << "getifaddrs"; |
- return false; |
- } |
- |
- scoped_ptr<internal::IPAttributesGetterMac> ip_attributes_getter; |
- |
-#if !defined(OS_IOS) |
- ip_attributes_getter.reset(new IPAttributesGetterMacImpl()); |
-#endif |
- |
- bool result = internal::GetNetworkListImpl(networks, policy, interfaces, |
- ip_attributes_getter.get()); |
- freeifaddrs(interfaces); |
- return result; |
-} |
- |
-std::string GetWifiSSID() { |
- NOTIMPLEMENTED(); |
- return ""; |
-} |
- |
-} // namespace net |