From 5fee401fe14aa6459428a26a82f764db70a6a0b9 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 4 Jan 2012 23:39:45 +0100 Subject: 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. --- src/netbase.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/netbase.cpp') diff --git a/src/netbase.cpp b/src/netbase.cpp index 7799a6597..baf7c412a 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -519,15 +519,22 @@ bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const std::vector CNetAddr::GetGroup() const { std::vector 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 -- cgit v1.2.3