diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-26 04:37:51 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-26 04:37:51 +0000 |
commit | 152f9ae8bdf8e828d016d9d1e58530bc8311bb70 (patch) | |
tree | ceae12c82dfc0c5dc34a8087106000db179bdb7c /net/dns | |
parent | 8609be26ac387460e7035a8422260cdc29486e52 (diff) | |
download | chromium_src-152f9ae8bdf8e828d016d9d1e58530bc8311bb70.zip chromium_src-152f9ae8bdf8e828d016d9d1e58530bc8311bb70.tar.gz chromium_src-152f9ae8bdf8e828d016d9d1e58530bc8311bb70.tar.bz2 |
Revert 225303 "Added NetworkInterface::network_prefix."
> Added NetworkInterface::network_prefix.
>
> BUG=295997
> NOTRY=true
>
> Review URL: https://codereview.chromium.org/23726043
TBR=vitalybuka@chromium.org
Review URL: https://codereview.chromium.org/24530007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@225326 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/dns')
-rw-r--r-- | net/dns/address_sorter_posix.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/net/dns/address_sorter_posix.cc b/net/dns/address_sorter_posix.cc index 514a00f..8d87774 100644 --- a/net/dns/address_sorter_posix.cc +++ b/net/dns/address_sorter_posix.cc @@ -175,6 +175,30 @@ AddressSorterPosix::PolicyEntry kDefaultIPv4ScopeTable[] = { { { }, 0, AddressSorterPosix::SCOPE_GLOBAL }, }; +// Returns number of matching initial bits between the addresses |a1| and |a2|. +unsigned CommonPrefixLength(const IPAddressNumber& a1, + const IPAddressNumber& a2) { + DCHECK_EQ(a1.size(), a2.size()); + for (size_t i = 0; i < a1.size(); ++i) { + unsigned diff = a1[i] ^ a2[i]; + if (!diff) + continue; + for (unsigned j = 0; j < CHAR_BIT; ++j) { + if (diff & (1 << (CHAR_BIT - 1))) + return i * CHAR_BIT + j; + diff <<= 1; + } + NOTREACHED(); + } + return a1.size() * CHAR_BIT; +} + +// Computes the number of leading 1-bits in |mask|. +unsigned MaskPrefixLength(const IPAddressNumber& mask) { + IPAddressNumber all_ones(mask.size(), 0xFF); + return CommonPrefixLength(mask, all_ones); +} + struct DestinationInfo { IPAddressNumber address; AddressSorterPosix::AddressScope scope; |