Bitcoin Core  24.99.0
P2P Digital Currency
Public Member Functions | Private Attributes | List of all members
NetGroupManager Class Reference

Netgroup manager. More...

#include <netgroup.h>

Public Member Functions

 NetGroupManager (std::vector< bool > asmap)
 
uint256 GetAsmapChecksum () const
 Get a checksum identifying the asmap being used. More...
 
std::vector< unsigned char > GetGroup (const CNetAddr &address) const
 Get the canonical identifier of the network group for address. More...
 
uint32_t GetMappedAS (const CNetAddr &address) const
 Get the autonomous system on the BGP path to address. More...
 

Private Attributes

const std::vector< bool > m_asmap
 Compressed IP->ASN mapping, loaded from a file when a node starts. More...
 

Detailed Description

Netgroup manager.

Definition at line 16 of file netgroup.h.

Constructor & Destructor Documentation

◆ NetGroupManager()

NetGroupManager::NetGroupManager ( std::vector< bool >  asmap)
inlineexplicit

Definition at line 18 of file netgroup.h.

Member Function Documentation

◆ GetAsmapChecksum()

uint256 NetGroupManager::GetAsmapChecksum ( ) const

Get a checksum identifying the asmap being used.

Definition at line 10 of file netgroup.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetGroup()

std::vector< unsigned char > NetGroupManager::GetGroup ( const CNetAddr address) const

Get the canonical identifier of the network group for address.

The groups are assigned in a way where it should be costly for an attacker to obtain addresses with many different group identifiers, even if it is cheap to obtain addresses with the same identifier.

Note
No two connections will be attempted to addresses with the same network group.

Definition at line 17 of file netgroup.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetMappedAS()

uint32_t NetGroupManager::GetMappedAS ( const CNetAddr address) const

Get the autonomous system on the BGP path to address.

The ip->AS mapping depends on how asmap is constructed.

Definition at line 80 of file netgroup.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_asmap

const std::vector<bool> NetGroupManager::m_asmap
private

Compressed IP->ASN mapping, loaded from a file when a node starts.

This mapping is then used for bucketing nodes in Addrman and for ensuring we connect to a diverse set of peers in Connman. The map is empty if no file was provided.

If asmap is provided, nodes will be bucketed by AS they belong to, in order to make impossible for a node to connect to several nodes hosted in a single AS. This is done in response to Erebus attack, but also to generally diversify the connections every node creates, especially useful when a large fraction of nodes operate under a couple of cloud providers.

If a new asmap is provided, the existing addrman records are re-bucketed.

This is initialized in the constructor, const, and therefore is thread-safe.

Definition at line 63 of file netgroup.h.


The documentation for this class was generated from the following files: