From 91f0a7fbb79fe81a75370a4b60dcdd2e55edfa81 Mon Sep 17 00:00:00 2001 From: Martin Zumsande Date: Fri, 22 Jul 2022 13:54:35 -0400 Subject: p2p: add only reachable addresses to addrman We will not make outgoing connection to peers that are unreachable (e.g. because of -onlynet configuration). Therefore, it makes no sense to add them to addrman in the first place. While this is already the case for addresses received via p2p addr messages, this commit does the same for addresses received from fixed seeds. --- src/net.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/net.cpp') diff --git a/src/net.cpp b/src/net.cpp index e9aa7ee43b..b7d9829b13 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1635,10 +1635,15 @@ void CConnman::ThreadOpenConnections(const std::vector connect) } if (add_fixed_seeds_now) { + std::vector seed_addrs{ConvertSeeds(Params().FixedSeeds())}; + seed_addrs.erase(std::remove_if(seed_addrs.begin(), seed_addrs.end(), + [](const CAddress& addr) { return !IsReachable(addr); }), + seed_addrs.end()); CNetAddr local; local.SetInternal("fixedseeds"); - addrman.Add(ConvertSeeds(Params().FixedSeeds()), local); + addrman.Add(seed_addrs, local); add_fixed_seeds = false; + LogPrintf("Added %d fixed seeds from reachable networks.\n", seed_addrs.size()); } } -- cgit v1.2.3 From 385f5a4c3feb716fcf3f2b4823535df6da6bb67b Mon Sep 17 00:00:00 2001 From: Martin Zumsande Date: Fri, 22 Jul 2022 14:51:44 -0400 Subject: p2p: Don't query DNS seeds when both IPv4 and IPv6 are unreachable This happens, for example, if the user specified -onlynet=onion or -onlynet=i2p. DNS seeds only resolve to IPv4 / IPv6 addresses, making their answers useless to us, since we don't want to make connections to these. If, within the DNS seed thread, we'd instead do fallback AddrFetch connections to one of the clearnet addresses the DNS seed resolves to, we might get usable addresses from other networks if lucky, but would be violating our -onlynet user preference in doing so. Therefore, in this case it is better to rely on fixed seeds for networks we want to connect to. Co-authored-by: Vasil Dimov --- src/net.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/net.cpp') diff --git a/src/net.cpp b/src/net.cpp index b7d9829b13..5db1b4e1a9 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1630,7 +1630,7 @@ void CConnman::ThreadOpenConnections(const std::vector connect) LOCK2(m_addr_fetches_mutex, m_added_nodes_mutex); if (m_addr_fetches.empty() && m_added_nodes.empty()) { add_fixed_seeds_now = true; - LogPrintf("Adding fixed seeds as -dnsseed=0, -addnode is not provided and all -seednode(s) attempted\n"); + LogPrintf("Adding fixed seeds as -dnsseed=0 (or IPv4/IPv6 connections are disabled via -onlynet), -addnode is not provided and all -seednode(s) attempted\n"); } } -- cgit v1.2.3