aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordergoegge <n.goeggi@gmail.com>2023-04-20 13:05:23 +0200
committerdergoegge <n.goeggi@gmail.com>2023-07-24 18:30:59 +0200
commit8b877259217c6da316153afb136a55c2dbd401c2 (patch)
treec81121551a7123009a4b805d284aab4ab8e989ff
parentd23fda05842ba4539b225bbab01b94df0060f697 (diff)
[net processing] Introduce PeerManager options
-rw-r--r--src/Makefile.am2
-rw-r--r--src/init.cpp12
-rw-r--r--src/net_processing.cpp13
-rw-r--r--src/net_processing.h6
-rw-r--r--src/node/peerman_args.cpp13
-rw-r--r--src/node/peerman_args.h12
-rw-r--r--src/test/denialofservice_tests.cpp12
-rw-r--r--src/test/util/setup_common.cpp6
8 files changed, 59 insertions, 17 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index e1ae049b15..aba6f00756 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -224,6 +224,7 @@ BITCOIN_CORE_H = \
node/miner.h \
node/mini_miner.h \
node/minisketchwrapper.h \
+ node/peerman_args.h \
node/psbt.h \
node/transaction.h \
node/txreconciliation.h \
@@ -421,6 +422,7 @@ libbitcoin_node_a_SOURCES = \
node/miner.cpp \
node/mini_miner.cpp \
node/minisketchwrapper.cpp \
+ node/peerman_args.cpp \
node/psbt.cpp \
node/transaction.cpp \
node/txreconciliation.cpp \
diff --git a/src/init.cpp b/src/init.cpp
index f726fe54ca..5f47b1c0f6 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -50,6 +50,7 @@
#include <node/mempool_args.h>
#include <node/mempool_persist_args.h>
#include <node/miner.h>
+#include <node/peerman_args.h>
#include <node/txreconciliation.h>
#include <node/validation_cache_args.h>
#include <policy/feerate.h>
@@ -1539,9 +1540,16 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
ChainstateManager& chainman = *Assert(node.chainman);
+
+ PeerManager::Options peerman_opts{
+ .ignore_incoming_txs = ignores_incoming_txs,
+ };
+ ApplyArgsManOptions(args, peerman_opts);
+
assert(!node.peerman);
- node.peerman = PeerManager::make(*node.connman, *node.addrman, node.banman.get(),
- chainman, *node.mempool, ignores_incoming_txs);
+ node.peerman = PeerManager::make(*node.connman, *node.addrman,
+ node.banman.get(), chainman,
+ *node.mempool, peerman_opts);
RegisterValidationInterface(node.peerman.get());
// ********************************************************* Step 8: start indexers
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index 8da2c701d3..e438c881e6 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -487,7 +487,7 @@ class PeerManagerImpl final : public PeerManager
public:
PeerManagerImpl(CConnman& connman, AddrMan& addrman,
BanMan* banman, ChainstateManager& chainman,
- CTxMemPool& pool, bool ignore_incoming_txs);
+ CTxMemPool& pool, Options opts);
/** Overridden from CValidationInterface. */
void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected) override
@@ -721,6 +721,8 @@ private:
/** Whether this node is running in -blocksonly mode */
const bool m_ignore_incoming_txs;
+ const Options m_opts;
+
bool RejectIncomingTxs(const CNode& peer) const;
/** Whether we've completed initial sync yet, for determining when to turn
@@ -1809,21 +1811,22 @@ std::optional<std::string> PeerManagerImpl::FetchBlock(NodeId peer_id, const CBl
std::unique_ptr<PeerManager> PeerManager::make(CConnman& connman, AddrMan& addrman,
BanMan* banman, ChainstateManager& chainman,
- CTxMemPool& pool, bool ignore_incoming_txs)
+ CTxMemPool& pool, Options opts)
{
- return std::make_unique<PeerManagerImpl>(connman, addrman, banman, chainman, pool, ignore_incoming_txs);
+ return std::make_unique<PeerManagerImpl>(connman, addrman, banman, chainman, pool, opts);
}
PeerManagerImpl::PeerManagerImpl(CConnman& connman, AddrMan& addrman,
BanMan* banman, ChainstateManager& chainman,
- CTxMemPool& pool, bool ignore_incoming_txs)
+ CTxMemPool& pool, Options opts)
: m_chainparams(chainman.GetParams()),
m_connman(connman),
m_addrman(addrman),
m_banman(banman),
m_chainman(chainman),
m_mempool(pool),
- m_ignore_incoming_txs(ignore_incoming_txs)
+ m_ignore_incoming_txs(opts.ignore_incoming_txs),
+ m_opts{opts}
{
// While Erlay support is incomplete, it must be enabled explicitly via -txreconciliation.
// This argument can go away after Erlay support is complete.
diff --git a/src/net_processing.h b/src/net_processing.h
index deebb24c94..c79987515d 100644
--- a/src/net_processing.h
+++ b/src/net_processing.h
@@ -43,9 +43,13 @@ struct CNodeStateStats {
class PeerManager : public CValidationInterface, public NetEventsInterface
{
public:
+ struct Options {
+ bool ignore_incoming_txs{DEFAULT_BLOCKSONLY};
+ };
+
static std::unique_ptr<PeerManager> make(CConnman& connman, AddrMan& addrman,
BanMan* banman, ChainstateManager& chainman,
- CTxMemPool& pool, bool ignore_incoming_txs);
+ CTxMemPool& pool, Options opts);
virtual ~PeerManager() { }
/**
diff --git a/src/node/peerman_args.cpp b/src/node/peerman_args.cpp
new file mode 100644
index 0000000000..b490d1d079
--- /dev/null
+++ b/src/node/peerman_args.cpp
@@ -0,0 +1,13 @@
+#include <node/peerman_args.h>
+
+#include <common/args.h>
+#include <net_processing.h>
+
+namespace node {
+
+void ApplyArgsManOptions(const ArgsManager& argsman, PeerManager::Options& options)
+{
+}
+
+} // namespace node
+
diff --git a/src/node/peerman_args.h b/src/node/peerman_args.h
new file mode 100644
index 0000000000..73dbdb446c
--- /dev/null
+++ b/src/node/peerman_args.h
@@ -0,0 +1,12 @@
+#ifndef BITCOIN_NODE_PEERMAN_ARGS_H
+#define BITCOIN_NODE_PEERMAN_ARGS_H
+
+#include <net_processing.h>
+
+class ArgsManager;
+
+namespace node {
+void ApplyArgsManOptions(const ArgsManager& argsman, PeerManager::Options& options);
+} // namespace node
+
+#endif // BITCOIN_NODE_PEERMAN_ARGS_H
diff --git a/src/test/denialofservice_tests.cpp b/src/test/denialofservice_tests.cpp
index 13349329ff..9193d9a8b3 100644
--- a/src/test/denialofservice_tests.cpp
+++ b/src/test/denialofservice_tests.cpp
@@ -132,8 +132,7 @@ BOOST_AUTO_TEST_CASE(stale_tip_peer_management)
{
NodeId id{0};
auto connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman);
- auto peerLogic = PeerManager::make(*connman, *m_node.addrman, nullptr,
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic = PeerManager::make(*connman, *m_node.addrman, nullptr, *m_node.chainman, *m_node.mempool, {});
constexpr int max_outbound_full_relay = MAX_OUTBOUND_FULL_RELAY_CONNECTIONS;
CConnman::Options options;
@@ -209,8 +208,7 @@ BOOST_AUTO_TEST_CASE(block_relay_only_eviction)
{
NodeId id{0};
auto connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman);
- auto peerLogic = PeerManager::make(*connman, *m_node.addrman, nullptr,
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic = PeerManager::make(*connman, *m_node.addrman, nullptr, *m_node.chainman, *m_node.mempool, {});
constexpr int max_outbound_block_relay{MAX_BLOCK_RELAY_ONLY_CONNECTIONS};
constexpr int64_t MINIMUM_CONNECT_TIME{30};
@@ -273,8 +271,7 @@ BOOST_AUTO_TEST_CASE(peer_discouragement)
auto banman = std::make_unique<BanMan>(m_args.GetDataDirBase() / "banlist", nullptr, DEFAULT_MISBEHAVING_BANTIME);
auto connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman);
- auto peerLogic = PeerManager::make(*connman, *m_node.addrman, banman.get(),
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic = PeerManager::make(*connman, *m_node.addrman, banman.get(), *m_node.chainman, *m_node.mempool, {});
CNetAddr tor_netaddr;
BOOST_REQUIRE(
@@ -376,8 +373,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
auto banman = std::make_unique<BanMan>(m_args.GetDataDirBase() / "banlist", nullptr, DEFAULT_MISBEHAVING_BANTIME);
auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman);
- auto peerLogic = PeerManager::make(*connman, *m_node.addrman, banman.get(),
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic = PeerManager::make(*connman, *m_node.addrman, banman.get(), *m_node.chainman, *m_node.mempool, {});
banman->ClearBanned();
int64_t nStartTime = GetTime();
diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp
index 6ae2187974..65c657da96 100644
--- a/src/test/util/setup_common.cpp
+++ b/src/test/util/setup_common.cpp
@@ -27,6 +27,7 @@
#include <node/kernel_notifications.h>
#include <node/mempool_args.h>
#include <node/miner.h>
+#include <node/peerman_args.h>
#include <node/validation_cache_args.h>
#include <noui.h>
#include <policy/fees.h>
@@ -251,9 +252,12 @@ TestingSetup::TestingSetup(
m_node.args->GetIntArg("-checkaddrman", 0));
m_node.banman = std::make_unique<BanMan>(m_args.GetDataDirBase() / "banlist", nullptr, DEFAULT_MISBEHAVING_BANTIME);
m_node.connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman); // Deterministic randomness for tests.
+ PeerManager::Options peerman_opts;
+ ApplyArgsManOptions(*m_node.args, peerman_opts);
m_node.peerman = PeerManager::make(*m_node.connman, *m_node.addrman,
m_node.banman.get(), *m_node.chainman,
- *m_node.mempool, false);
+ *m_node.mempool, peerman_opts);
+
{
CConnman::Options options;
options.m_msgproc = m_node.peerman.get();