diff options
Diffstat (limited to 'src/netgroup.h')
-rw-r--r-- | src/netgroup.h | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/netgroup.h b/src/netgroup.h index 1fd3470e0f..fcf46bb2bb 100644 --- a/src/netgroup.h +++ b/src/netgroup.h @@ -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 |