mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-06 14:19:59 -05:00
[net] Add connection type to NodeEvictionCandidate
This commit is contained in:
parent
42aa5d5b62
commit
a3c2707039
4 changed files with 15 additions and 2 deletions
14
src/net.cpp
14
src/net.cpp
|
@ -957,6 +957,15 @@ void ProtectNoBanConnections(std::vector<NodeEvictionCandidate>& eviction_candid
|
||||||
eviction_candidates.end());
|
eviction_candidates.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProtectOutboundConnections(std::vector<NodeEvictionCandidate>& eviction_candidates)
|
||||||
|
{
|
||||||
|
eviction_candidates.erase(std::remove_if(eviction_candidates.begin(), eviction_candidates.end(),
|
||||||
|
[](NodeEvictionCandidate const& n) {
|
||||||
|
return n.m_conn_type != ConnectionType::INBOUND;
|
||||||
|
}),
|
||||||
|
eviction_candidates.end());
|
||||||
|
}
|
||||||
|
|
||||||
void ProtectEvictionCandidatesByRatio(std::vector<NodeEvictionCandidate>& eviction_candidates)
|
void ProtectEvictionCandidatesByRatio(std::vector<NodeEvictionCandidate>& eviction_candidates)
|
||||||
{
|
{
|
||||||
// Protect the half of the remaining nodes which have been connected the longest.
|
// Protect the half of the remaining nodes which have been connected the longest.
|
||||||
|
@ -1036,6 +1045,8 @@ void ProtectEvictionCandidatesByRatio(std::vector<NodeEvictionCandidate>& evicti
|
||||||
|
|
||||||
ProtectNoBanConnections(vEvictionCandidates);
|
ProtectNoBanConnections(vEvictionCandidates);
|
||||||
|
|
||||||
|
ProtectOutboundConnections(vEvictionCandidates);
|
||||||
|
|
||||||
// Deterministically select 4 peers to protect by netgroup.
|
// Deterministically select 4 peers to protect by netgroup.
|
||||||
// An attacker cannot predict which netgroups will be protected
|
// An attacker cannot predict which netgroups will be protected
|
||||||
EraseLastKElements(vEvictionCandidates, CompareNetGroupKeyed, 4);
|
EraseLastKElements(vEvictionCandidates, CompareNetGroupKeyed, 4);
|
||||||
|
@ -1107,8 +1118,6 @@ bool CConnman::AttemptToEvictConnection()
|
||||||
|
|
||||||
LOCK(m_nodes_mutex);
|
LOCK(m_nodes_mutex);
|
||||||
for (const CNode* node : m_nodes) {
|
for (const CNode* node : m_nodes) {
|
||||||
if (!node->IsInboundConn())
|
|
||||||
continue;
|
|
||||||
if (node->fDisconnect)
|
if (node->fDisconnect)
|
||||||
continue;
|
continue;
|
||||||
NodeEvictionCandidate candidate{
|
NodeEvictionCandidate candidate{
|
||||||
|
@ -1125,6 +1134,7 @@ bool CConnman::AttemptToEvictConnection()
|
||||||
Desig(m_is_local) node->addr.IsLocal(),
|
Desig(m_is_local) node->addr.IsLocal(),
|
||||||
Desig(m_network) node->ConnectedThroughNetwork(),
|
Desig(m_network) node->ConnectedThroughNetwork(),
|
||||||
Desig(m_noban) node->HasPermission(NetPermissionFlags::NoBan),
|
Desig(m_noban) node->HasPermission(NetPermissionFlags::NoBan),
|
||||||
|
Desig(m_conn_type) node->m_conn_type,
|
||||||
};
|
};
|
||||||
vEvictionCandidates.push_back(candidate);
|
vEvictionCandidates.push_back(candidate);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1262,6 +1262,7 @@ struct NodeEvictionCandidate
|
||||||
bool m_is_local;
|
bool m_is_local;
|
||||||
Network m_network;
|
Network m_network;
|
||||||
bool m_noban;
|
bool m_noban;
|
||||||
|
ConnectionType m_conn_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -33,6 +33,7 @@ FUZZ_TARGET(node_eviction)
|
||||||
/*m_is_local=*/fuzzed_data_provider.ConsumeBool(),
|
/*m_is_local=*/fuzzed_data_provider.ConsumeBool(),
|
||||||
/*m_network=*/fuzzed_data_provider.PickValueInArray(ALL_NETWORKS),
|
/*m_network=*/fuzzed_data_provider.PickValueInArray(ALL_NETWORKS),
|
||||||
/*m_noban=*/fuzzed_data_provider.ConsumeBool(),
|
/*m_noban=*/fuzzed_data_provider.ConsumeBool(),
|
||||||
|
/*m_conn_type=*/fuzzed_data_provider.PickValueInArray(ALL_CONNECTION_TYPES),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Make a copy since eviction_candidates may be in some valid but otherwise
|
// Make a copy since eviction_candidates may be in some valid but otherwise
|
||||||
|
|
|
@ -59,6 +59,7 @@ std::vector<NodeEvictionCandidate> GetRandomNodeEvictionCandidates(int n_candida
|
||||||
/*m_is_local=*/random_context.randbool(),
|
/*m_is_local=*/random_context.randbool(),
|
||||||
/*m_network=*/ALL_NETWORKS[random_context.randrange(ALL_NETWORKS.size())],
|
/*m_network=*/ALL_NETWORKS[random_context.randrange(ALL_NETWORKS.size())],
|
||||||
/*m_noban=*/false,
|
/*m_noban=*/false,
|
||||||
|
/*m_conn_type=*/ConnectionType::INBOUND,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return candidates;
|
return candidates;
|
||||||
|
|
Loading…
Add table
Reference in a new issue