@@ -245,6 +245,10 @@ struct Peer {
245245 double m_addr_token_bucket{1.0 };
246246 /* * When m_addr_token_bucket was last updated */
247247 std::chrono::microseconds m_addr_token_timestamp{GetTime<std::chrono::microseconds>()};
248+ /* * Total number of addresses that were dropped due to rate limiting. */
249+ std::atomic<uint64_t > m_addr_rate_limited{0 };
250+ /* * Total number of addresses that were processed (excludes rate limited ones). */
251+ std::atomic<uint64_t > m_addr_processed{0 };
248252
249253 /* * Set of txids to reconsider once their parent transactions have been accepted **/
250254 std::set<uint256> m_orphan_work_set GUARDED_BY (g_cs_orphans);
@@ -1251,6 +1255,8 @@ bool PeerManagerImpl::GetNodeStateStats(NodeId nodeid, CNodeStateStats& stats) c
12511255 }
12521256
12531257 stats.m_ping_wait = ping_wait;
1258+ stats.m_addr_processed = peer->m_addr_processed .load ();
1259+ stats.m_addr_rate_limited = peer->m_addr_rate_limited .load ();
12541260
12551261 return true ;
12561262}
@@ -2804,6 +2810,8 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
28042810 peer->m_addr_token_timestamp = current_time;
28052811
28062812 const bool rate_limited = !pfrom.HasPermission (NetPermissionFlags::Addr);
2813+ uint64_t num_proc = 0 ;
2814+ uint64_t num_rate_limit = 0 ;
28072815 Shuffle (vAddr.begin (), vAddr.end (), FastRandomContext ());
28082816 for (CAddress& addr : vAddr)
28092817 {
@@ -2812,7 +2820,10 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
28122820
28132821 // Apply rate limiting.
28142822 if (rate_limited) {
2815- if (peer->m_addr_token_bucket < 1.0 ) break ;
2823+ if (peer->m_addr_token_bucket < 1.0 ) {
2824+ ++num_rate_limit;
2825+ continue ;
2826+ }
28162827 peer->m_addr_token_bucket -= 1.0 ;
28172828 }
28182829 // We only bother storing full nodes, though this may include
@@ -2828,6 +2839,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
28282839 // Do not process banned/discouraged addresses beyond remembering we received them
28292840 continue ;
28302841 }
2842+ ++num_proc;
28312843 bool fReachable = IsReachable (addr);
28322844 if (addr.nTime > nSince && !peer->m_getaddr_sent && vAddr.size () <= 10 && addr.IsRoutable ()) {
28332845 // Relay to a limited number of other nodes
@@ -2837,6 +2849,15 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
28372849 if (fReachable )
28382850 vAddrOk.push_back (addr);
28392851 }
2852+ peer->m_addr_processed += num_proc;
2853+ peer->m_addr_rate_limited += num_rate_limit;
2854+ LogPrint (BCLog::NET, " Received addr: %u addresses (%u processed, %u rate-limited) from peer=%d%s\n " ,
2855+ vAddr.size (),
2856+ num_proc,
2857+ num_rate_limit,
2858+ pfrom.GetId (),
2859+ fLogIPs ? " , peeraddr=" + pfrom.addr .ToString () : " " );
2860+
28402861 m_addrman.Add (vAddrOk, pfrom.addr , 2 * 60 * 60 );
28412862 if (vAddr.size () < 1000 ) peer->m_getaddr_sent = false ;
28422863 if (pfrom.IsAddrFetchConn ()) {
0 commit comments