p2p: add --max-connections-per-ip daemon option

Helps daemons behind a proxy get more than one connection.
Defaults to 1 (no change)
This commit is contained in:
moneromooo-monero 2020-10-11 10:30:45 +00:00
parent c41e087d46
commit d643a865f3
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
3 changed files with 10 additions and 3 deletions

View file

@ -166,6 +166,7 @@ namespace nodetool
const command_line::arg_descriptor<bool> arg_pad_transactions = { const command_line::arg_descriptor<bool> arg_pad_transactions = {
"pad-transactions", "Pad relayed transactions to help defend against traffic volume analysis", false "pad-transactions", "Pad relayed transactions to help defend against traffic volume analysis", false
}; };
const command_line::arg_descriptor<uint32_t> arg_max_connections_per_ip = {"max-connections-per-ip", "Maximum number of connections allowed from the same IP address", 1};
boost::optional<std::vector<proxy>> get_proxies(boost::program_options::variables_map const& vm) boost::optional<std::vector<proxy>> get_proxies(boost::program_options::variables_map const& vm)
{ {

View file

@ -258,7 +258,8 @@ namespace nodetool
m_igd(no_igd), m_igd(no_igd),
m_offline(false), m_offline(false),
is_closing(false), is_closing(false),
m_network_id() m_network_id(),
max_connections(1)
{} {}
virtual ~node_server(); virtual ~node_server();
@ -517,6 +518,8 @@ namespace nodetool
epee::net_utils::ssl_support_t m_ssl_support; epee::net_utils::ssl_support_t m_ssl_support;
bool m_enable_dns_blocklist; bool m_enable_dns_blocklist;
uint32_t max_connections;
}; };
const int64_t default_limit_up = P2P_DEFAULT_LIMIT_RATE_UP; // kB/s const int64_t default_limit_up = P2P_DEFAULT_LIMIT_RATE_UP; // kB/s
@ -551,6 +554,7 @@ namespace nodetool
extern const command_line::arg_descriptor<int64_t> arg_limit_rate_down; extern const command_line::arg_descriptor<int64_t> arg_limit_rate_down;
extern const command_line::arg_descriptor<int64_t> arg_limit_rate; extern const command_line::arg_descriptor<int64_t> arg_limit_rate;
extern const command_line::arg_descriptor<bool> arg_pad_transactions; extern const command_line::arg_descriptor<bool> arg_pad_transactions;
extern const command_line::arg_descriptor<uint32_t> arg_max_connections_per_ip;
} }
POP_WARNINGS POP_WARNINGS

View file

@ -131,6 +131,7 @@ namespace nodetool
command_line::add_arg(desc, arg_limit_rate_down); command_line::add_arg(desc, arg_limit_rate_down);
command_line::add_arg(desc, arg_limit_rate); command_line::add_arg(desc, arg_limit_rate);
command_line::add_arg(desc, arg_pad_transactions); command_line::add_arg(desc, arg_pad_transactions);
command_line::add_arg(desc, arg_max_connections_per_ip);
} }
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
template<class t_payload_net_handler> template<class t_payload_net_handler>
@ -615,6 +616,8 @@ namespace nodetool
return false; return false;
} }
max_connections = command_line::get_arg(vm, arg_max_connections_per_ip);
return true; return true;
} }
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
@ -2846,8 +2849,7 @@ namespace nodetool
if (address.get_zone() != epee::net_utils::zone::public_) if (address.get_zone() != epee::net_utils::zone::public_)
return false; // Unable to determine how many connections from host return false; // Unable to determine how many connections from host
const size_t max_connections = 1; uint32_t count = 0;
size_t count = 0;
m_network_zones.at(epee::net_utils::zone::public_).m_net_server.get_config_object().foreach_connection([&](const p2p_connection_context& cntxt) m_network_zones.at(epee::net_utils::zone::public_).m_net_server.get_config_object().foreach_connection([&](const p2p_connection_context& cntxt)
{ {