OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_BASE_IP_ADDRESS_NUMBER_H_ | 5 #ifndef NET_BASE_IP_ADDRESS_NUMBER_H_ |
6 #define NET_BASE_IP_ADDRESS_NUMBER_H_ | 6 #define NET_BASE_IP_ADDRESS_NUMBER_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 const IPAddressNumber& ipv4_number); | 74 const IPAddressNumber& ipv4_number); |
75 | 75 |
76 // Returns true iff |address| is an IPv4-mapped IPv6 address. | 76 // Returns true iff |address| is an IPv4-mapped IPv6 address. |
77 NET_EXPORT_PRIVATE bool IsIPv4Mapped(const IPAddressNumber& address); | 77 NET_EXPORT_PRIVATE bool IsIPv4Mapped(const IPAddressNumber& address); |
78 | 78 |
79 // Converts an IPv4-mapped IPv6 address to IPv4 address. Should only be called | 79 // Converts an IPv4-mapped IPv6 address to IPv4 address. Should only be called |
80 // on IPv4-mapped IPv6 addresses. | 80 // on IPv4-mapped IPv6 addresses. |
81 NET_EXPORT_PRIVATE IPAddressNumber ConvertIPv4MappedToIPv4( | 81 NET_EXPORT_PRIVATE IPAddressNumber ConvertIPv4MappedToIPv4( |
82 const IPAddressNumber& address); | 82 const IPAddressNumber& address); |
83 | 83 |
84 // Parses an IP block specifier from CIDR notation to an | |
85 // (IP address, prefix length) pair. Returns true on success and fills | |
86 // |*ip_number| with the numeric value of the IP address and sets | |
87 // |*prefix_length_in_bits| with the length of the prefix. | |
88 // | |
89 // CIDR notation literals can use either IPv4 or IPv6 literals. Some examples: | |
90 // | |
91 // 10.10.3.1/20 | |
92 // a:b:c::/46 | |
93 // ::1/128 | |
94 NET_EXPORT bool ParseCIDRBlock(const std::string& cidr_literal, | |
95 IPAddressNumber* ip_number, | |
96 size_t* prefix_length_in_bits); | |
97 | |
98 // Compares an IP address to see if it falls within the specified IP block. | 84 // Compares an IP address to see if it falls within the specified IP block. |
99 // Returns true if it does, false otherwise. | 85 // Returns true if it does, false otherwise. |
100 // | 86 // |
101 // The IP block is given by (|ip_prefix|, |prefix_length_in_bits|) -- any | 87 // The IP block is given by (|ip_prefix|, |prefix_length_in_bits|) -- any |
102 // IP address whose |prefix_length_in_bits| most significant bits match | 88 // IP address whose |prefix_length_in_bits| most significant bits match |
103 // |ip_prefix| will be matched. | 89 // |ip_prefix| will be matched. |
104 // | 90 // |
105 // In cases when an IPv4 address is being compared to an IPv6 address prefix | 91 // In cases when an IPv4 address is being compared to an IPv6 address prefix |
106 // and vice versa, the IPv4 addresses will be converted to IPv4-mapped | 92 // and vice versa, the IPv4 addresses will be converted to IPv4-mapped |
107 // (IPv6) addresses. | 93 // (IPv6) addresses. |
108 NET_EXPORT_PRIVATE bool IPNumberMatchesPrefix(const IPAddressNumber& ip_number, | 94 NET_EXPORT_PRIVATE bool IPNumberMatchesPrefix(const IPAddressNumber& ip_number, |
109 const IPAddressNumber& ip_prefix, | 95 const IPAddressNumber& ip_prefix, |
110 size_t prefix_length_in_bits); | 96 size_t prefix_length_in_bits); |
111 | 97 |
112 // Returns number of matching initial bits between the addresses |a1| and |a2|. | 98 // Returns number of matching initial bits between the addresses |a1| and |a2|. |
113 unsigned CommonPrefixLength(const IPAddressNumber& a1, | 99 unsigned CommonPrefixLength(const IPAddressNumber& a1, |
114 const IPAddressNumber& a2); | 100 const IPAddressNumber& a2); |
115 | 101 |
116 // Computes the number of leading 1-bits in |mask|. | 102 // Computes the number of leading 1-bits in |mask|. |
117 unsigned MaskPrefixLength(const IPAddressNumber& mask); | 103 unsigned MaskPrefixLength(const IPAddressNumber& mask); |
118 | 104 |
119 } // namespace net | 105 } // namespace net |
120 | 106 |
121 #endif // NET_BASE_IP_ADDRESS_NUMBER_H_ | 107 #endif // NET_BASE_IP_ADDRESS_NUMBER_H_ |
OLD | NEW |