aboutsummaryrefslogtreecommitdiff
path: root/src/netbase.cpp
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2012-01-04 23:39:45 +0100
committerPieter Wuille <pieter.wuille@gmail.com>2012-02-24 13:41:04 +0100
commit5fee401fe14aa6459428a26a82f764db70a6a0b9 (patch)
tree7920219dabcdd335a7432aa05081d168c98dbf06 /src/netbase.cpp
parent8c12851ed497797684588e09637d80a5abd5725e (diff)
CAddrMan: stochastic address manager
Design goals: * Only keep a limited number of addresses around, so that addr.dat does not grow without bound. * Keep the address tables in-memory, and occasionally write the table to addr.dat. * Make sure no (localized) attacker can fill the entire table with his nodes/addresses. See comments in addrman.h for more detailed information.
Diffstat (limited to 'src/netbase.cpp')
-rw-r--r--src/netbase.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/netbase.cpp b/src/netbase.cpp
index 7799a65972..baf7c412a0 100644
--- a/src/netbase.cpp
+++ b/src/netbase.cpp
@@ -519,15 +519,22 @@ bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const
std::vector<unsigned char> CNetAddr::GetGroup() const
{
std::vector<unsigned char> vchRet;
- int nClass = 0; // 0=IPv6, 1=IPv4, 255=unroutable
+ int nClass = 0; // 0=IPv6, 1=IPv4, 254=local, 255=unroutable
int nStartByte = 0;
int nBits = 16;
- // for unroutable addresses, each address is considered different
+ // all local addresses belong to the same group
+ if (IsLocal())
+ {
+ nClass = 254;
+ nBits = 0;
+ }
+
+ // all unroutable addresses belong to the same group
if (!IsRoutable())
{
nClass = 255;
- nBits = 128;
+ nBits = 0;
}
// for IPv4 addresses, '1' + the 16 higher-order bits of the IP
// includes mapped IPv4, SIIT translated IPv4, and the well-known prefix