| // Copyright (c) 2012 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. | |
| #ifndef NET_BASE_NETWORK_INTERFACES_H_ | |
| #define NET_BASE_NETWORK_INTERFACES_H_ | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| #include "base/macros.h" | |
| #include "net/base/ip_address.h" | |
| #include "net/base/net_export.h" | |
| #include "net/base/network_change_notifier.h" | |
| #include "starboard/types.h" | |
| namespace net { | |
| // A subset of IP address attributes which are actionable by the | |
| // application layer. Currently unimplemented for all hosts; | |
| // IP_ADDRESS_ATTRIBUTE_NONE is always returned. | |
| enum IPAddressAttributes { | |
| IP_ADDRESS_ATTRIBUTE_NONE = 0, | |
| // A temporary address is dynamic by nature and will not contain MAC | |
| // address. Presence of MAC address in IPv6 addresses can be used to | |
| // track an endpoint and cause privacy concern. Please refer to | |
| // RFC4941. | |
| IP_ADDRESS_ATTRIBUTE_TEMPORARY = 1 << 0, | |
| // A temporary address could become deprecated once the preferred | |
| // lifetime is reached. It is still valid but shouldn't be used to | |
| // create new connections. | |
| IP_ADDRESS_ATTRIBUTE_DEPRECATED = 1 << 1, | |
| // Anycast address. | |
| IP_ADDRESS_ATTRIBUTE_ANYCAST = 1 << 2, | |
| // Tentative address. | |
| IP_ADDRESS_ATTRIBUTE_TENTATIVE = 1 << 3, | |
| // DAD detected duplicate. | |
| IP_ADDRESS_ATTRIBUTE_DUPLICATED = 1 << 4, | |
| // May be detached from the link. | |
| IP_ADDRESS_ATTRIBUTE_DETACHED = 1 << 5, | |
| }; | |
| // struct that is used by GetNetworkList() to represent a network | |
| // interface. | |
| struct NET_EXPORT NetworkInterface { | |
| NetworkInterface(); | |
| NetworkInterface(const std::string& name, | |
| const std::string& friendly_name, | |
| uint32_t interface_index, | |
| NetworkChangeNotifier::ConnectionType type, | |
| const IPAddress& address, | |
| uint32_t prefix_length, | |
| int ip_address_attributes); | |
| NetworkInterface(const NetworkInterface& other); | |
| ~NetworkInterface(); | |
| std::string name; | |
| std::string friendly_name; // Same as |name| on non-Windows. | |
| uint32_t interface_index; // Always 0 on Android. | |
| NetworkChangeNotifier::ConnectionType type; | |
| IPAddress address; | |
| uint32_t prefix_length; | |
| int ip_address_attributes; // Combination of |IPAddressAttributes|. | |
| }; | |
| typedef std::vector<NetworkInterface> NetworkInterfaceList; | |
| // Policy settings to include/exclude network interfaces. | |
| enum HostAddressSelectionPolicy { | |
| INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES = 0x0, | |
| EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES = 0x1, | |
| }; | |
| // 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, | |
| int policy); | |
| // Gets the SSID of the currently associated WiFi access point if there is one, | |
| // and it is available. SSID may not be available if the app does not have | |
| // permissions to access it. On Android M+, the app accessing SSID needs to have | |
| // ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION. If there is no WiFi access | |
| // point or its SSID is unavailable, an empty string is returned. | |
| // Currently only implemented on Linux, ChromeOS, Android and Windows. | |
| NET_EXPORT std::string GetWifiSSID(); | |
| // General category of the IEEE 802.11 (wifi) physical layer operating mode. | |
| enum WifiPHYLayerProtocol { | |
| // No wifi support or no associated AP. | |
| WIFI_PHY_LAYER_PROTOCOL_NONE, | |
| // An obsolete modes introduced by the original 802.11, e.g. IR, FHSS. | |
| WIFI_PHY_LAYER_PROTOCOL_ANCIENT, | |
| // 802.11a, OFDM-based rates. | |
| WIFI_PHY_LAYER_PROTOCOL_A, | |
| // 802.11b, DSSS or HR DSSS. | |
| WIFI_PHY_LAYER_PROTOCOL_B, | |
| // 802.11g, same rates as 802.11a but compatible with 802.11b. | |
| WIFI_PHY_LAYER_PROTOCOL_G, | |
| // 802.11n, HT rates. | |
| WIFI_PHY_LAYER_PROTOCOL_N, | |
| // Unclassified mode or failure to identify. | |
| WIFI_PHY_LAYER_PROTOCOL_UNKNOWN | |
| }; | |
| // Characterize the PHY mode of the currently associated access point. | |
| // Currently only available on Windows. | |
| NET_EXPORT WifiPHYLayerProtocol GetWifiPHYLayerProtocol(); | |
| enum WifiOptions { | |
| // Disables background SSID scans. | |
| WIFI_OPTIONS_DISABLE_SCAN = 1 << 0, | |
| // Enables media streaming mode. | |
| WIFI_OPTIONS_MEDIA_STREAMING_MODE = 1 << 1 | |
| }; | |
| class NET_EXPORT ScopedWifiOptions { | |
| public: | |
| ScopedWifiOptions() {} | |
| virtual ~ScopedWifiOptions(); | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(ScopedWifiOptions); | |
| }; | |
| // Set temporary options on all wifi interfaces. | |
| // |options| is an ORed bitfield of WifiOptions. | |
| // Options are automatically disabled when the scoped pointer | |
| // is freed. Currently only available on Windows. | |
| NET_EXPORT std::unique_ptr<ScopedWifiOptions> SetWifiOptions(int options); | |
| // Returns the hostname of the current system. Returns empty string on failure. | |
| NET_EXPORT std::string GetHostName(); | |
| } // namespace net | |
| #endif // NET_BASE_NETWORK_INTERFACES_H_ |