mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 22:18:54 +01:00
[net] Move asmap into NetGroupManager
This commit is contained in:
@@ -5,9 +5,41 @@
|
||||
#ifndef BITCOIN_NETGROUP_H
|
||||
#define BITCOIN_NETGROUP_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* Netgroup manager
|
||||
*/
|
||||
class NetGroupManager {};
|
||||
class NetGroupManager {
|
||||
public:
|
||||
explicit NetGroupManager(std::vector<bool> asmap)
|
||||
: m_asmap{std::move(asmap)}
|
||||
{}
|
||||
|
||||
/* Get a reference to (const) asmap. May be held as long as NetGroupManager
|
||||
* exists, since the data is const. */
|
||||
const std::vector<bool>& GetAsmap() const { return 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. */
|
||||
const std::vector<bool> m_asmap;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_NETGROUP_H
|
||||
|
||||
Reference in New Issue
Block a user