mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
merge bitcoin#27467: skip netgroup diversity follow-up
This commit is contained in:
parent
a52b3a3bf0
commit
1376289b11
19
src/net.cpp
19
src/net.cpp
@ -2460,7 +2460,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect, CDe
|
|||||||
int nOutboundBlockRelay = 0;
|
int nOutboundBlockRelay = 0;
|
||||||
int nOutboundOnionRelay = 0;
|
int nOutboundOnionRelay = 0;
|
||||||
int outbound_privacy_network_peers = 0;
|
int outbound_privacy_network_peers = 0;
|
||||||
std::set<std::vector<unsigned char>> setConnected; // netgroups of our ipv4/ipv6 outbound peers
|
std::set<std::vector<unsigned char>> outbound_ipv46_peer_netgroups;
|
||||||
|
|
||||||
if (!Params().AllowMultipleAddressesFromGroup()) {
|
if (!Params().AllowMultipleAddressesFromGroup()) {
|
||||||
LOCK(m_nodes_mutex);
|
LOCK(m_nodes_mutex);
|
||||||
@ -2483,7 +2483,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect, CDe
|
|||||||
case ConnectionType::MANUAL:
|
case ConnectionType::MANUAL:
|
||||||
case ConnectionType::OUTBOUND_FULL_RELAY:
|
case ConnectionType::OUTBOUND_FULL_RELAY:
|
||||||
case ConnectionType::BLOCK_RELAY:
|
case ConnectionType::BLOCK_RELAY:
|
||||||
CAddress address{pnode->addr};
|
const CAddress address{pnode->addr};
|
||||||
if (address.IsTor() || address.IsI2P() || address.IsCJDNS()) {
|
if (address.IsTor() || address.IsI2P() || address.IsCJDNS()) {
|
||||||
// Since our addrman-groups for these networks are
|
// Since our addrman-groups for these networks are
|
||||||
// random, without relation to the route we
|
// random, without relation to the route we
|
||||||
@ -2494,7 +2494,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect, CDe
|
|||||||
// these networks.
|
// these networks.
|
||||||
++outbound_privacy_network_peers;
|
++outbound_privacy_network_peers;
|
||||||
} else {
|
} else {
|
||||||
setConnected.insert(m_netgroupman.GetGroup(address));
|
outbound_ipv46_peer_netgroups.insert(m_netgroupman.GetGroup(address));
|
||||||
}
|
}
|
||||||
} // no default case, so the compiler can warn about missing cases
|
} // no default case, so the compiler can warn about missing cases
|
||||||
}
|
}
|
||||||
@ -2585,7 +2585,7 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect, CDe
|
|||||||
m_anchors.pop_back();
|
m_anchors.pop_back();
|
||||||
if (!addr.IsValid() || IsLocal(addr) || !IsReachable(addr) ||
|
if (!addr.IsValid() || IsLocal(addr) || !IsReachable(addr) ||
|
||||||
!HasAllDesirableServiceFlags(addr.nServices) ||
|
!HasAllDesirableServiceFlags(addr.nServices) ||
|
||||||
setConnected.count(m_netgroupman.GetGroup(addr))) continue;
|
outbound_ipv46_peer_netgroups.count(m_netgroupman.GetGroup(addr))) continue;
|
||||||
addrConnect = addr;
|
addrConnect = addr;
|
||||||
LogPrint(BCLog::NET, "Trying to make an anchor connection to %s\n", addrConnect.ToStringAddrPort());
|
LogPrint(BCLog::NET, "Trying to make an anchor connection to %s\n", addrConnect.ToStringAddrPort());
|
||||||
break;
|
break;
|
||||||
@ -2628,13 +2628,13 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect, CDe
|
|||||||
auto dmn = mnList.GetMNByService(addr);
|
auto dmn = mnList.GetMNByService(addr);
|
||||||
bool isMasternode = dmn != nullptr;
|
bool isMasternode = dmn != nullptr;
|
||||||
|
|
||||||
// Require outbound connections, other than feelers, to be to distinct network groups
|
// Require outbound IPv4/IPv6 connections, other than feelers, to be to distinct network groups
|
||||||
if (!fFeeler && setConnected.count(m_netgroupman.GetGroup(addr))) {
|
if (!fFeeler && outbound_ipv46_peer_netgroups.count(m_netgroupman.GetGroup(addr))) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we selected an invalid address, restart
|
// if we selected an invalid address, restart
|
||||||
if (!addr.IsValid() || setConnected.count(m_netgroupman.GetGroup(addr)))
|
if (!addr.IsValid() || outbound_ipv46_peer_netgroups.count(m_netgroupman.GetGroup(addr)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// don't try to connect to masternodes that we already have a connection to (most likely inbound)
|
// don't try to connect to masternodes that we already have a connection to (most likely inbound)
|
||||||
@ -2692,8 +2692,9 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect, CDe
|
|||||||
// Record addrman failure attempts when node has at least 2 persistent outbound connections to peers with
|
// Record addrman failure attempts when node has at least 2 persistent outbound connections to peers with
|
||||||
// different netgroups in ipv4/ipv6 networks + all peers in Tor/I2P/CJDNS networks.
|
// different netgroups in ipv4/ipv6 networks + all peers in Tor/I2P/CJDNS networks.
|
||||||
// Don't record addrman failure attempts when node is offline. This can be identified since all local
|
// Don't record addrman failure attempts when node is offline. This can be identified since all local
|
||||||
// network connections(if any) belong in the same netgroup and size of setConnected would only be 1.
|
// network connections (if any) belong in the same netgroup, and the size of `outbound_ipv46_peer_netgroups` would only be 1.
|
||||||
OpenNetworkConnection(addrConnect, (int)setConnected.size() + outbound_privacy_network_peers >= std::min(nMaxConnections - 1, 2), &grant, nullptr, conn_type);
|
const bool count_failures{((int)outbound_ipv46_peer_netgroups.size() + outbound_privacy_network_peers) >= std::min(nMaxConnections - 1, 2)};
|
||||||
|
OpenNetworkConnection(addrConnect, count_failures, &grant, /*strDest=*/nullptr, conn_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user