diff options
author | Bertrand Jacquin <bertrand@jacquin.bzh> | 2024-04-09 22:47:23 +0100 |
---|---|---|
committer | Bertrand Jacquin <bertrand@jacquin.bzh> | 2024-04-09 23:05:23 +0100 |
commit | ab4f187397accc65b0f5fedf5d01f0412415dd27 (patch) | |
tree | 8c7f2d5425ab20ecd7384898fc7f5c914d5670b2 /net-p2p/monero/files/monero-9999-dns-perform-AAAA-resolution.patch | |
parent | net-p2p/monero: add 9999 (diff) | |
download | portage-ab4f187397accc65b0f5fedf5d01f0412415dd27.tar.xz |
net-p2p/monero: enable ipv6 by default
Diffstat (limited to 'net-p2p/monero/files/monero-9999-dns-perform-AAAA-resolution.patch')
-rw-r--r-- | net-p2p/monero/files/monero-9999-dns-perform-AAAA-resolution.patch | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/net-p2p/monero/files/monero-9999-dns-perform-AAAA-resolution.patch b/net-p2p/monero/files/monero-9999-dns-perform-AAAA-resolution.patch new file mode 100644 index 00000000..9deea952 --- /dev/null +++ b/net-p2p/monero/files/monero-9999-dns-perform-AAAA-resolution.patch @@ -0,0 +1,101 @@ +From a57141b6aabf44c33cfa57677774defb1f40c64a Mon Sep 17 00:00:00 2001 +From: Bertrand Jacquin <bertrand@jacquin.bzh> +Date: Sun, 17 Jul 2022 23:52:34 +0100 +Subject: [PATCH] dns: perform AAAA resolution + +Address backlog item to resolve IPv6 address in addition to IPv4 +address. + +See: https://github.com/monero-project/monero/issues/8818 +--- + src/debug_utilities/dns_checks.cpp | 4 +++- + src/p2p/net_node.inl | 27 ++++++++++++++++++++++++--- + 2 files changed, 27 insertions(+), 4 deletions(-) + +diff --git a/src/debug_utilities/dns_checks.cpp b/src/debug_utilities/dns_checks.cpp +index a59a08209901..eebb35fc5be1 100644 +--- a/src/debug_utilities/dns_checks.cpp ++++ b/src/debug_utilities/dns_checks.cpp +@@ -42,7 +42,7 @@ + + namespace po = boost::program_options; + +-enum lookup_t { LOOKUP_A, LOOKUP_TXT }; ++enum lookup_t { LOOKUP_A, LOOKUP_AAAA, LOOKUP_TXT }; + + static std::vector<std::string> lookup(lookup_t type, const char *hostname) + { +@@ -51,6 +51,7 @@ static std::vector<std::string> lookup(lookup_t type, const char *hostname) + switch (type) + { + case LOOKUP_A: res = tools::DNSResolver::instance().get_ipv4(hostname, dnssec_available, dnssec_valid); break; ++ case LOOKUP_AAAA: res = tools::DNSResolver::instance().get_ipv6(hostname, dnssec_available, dnssec_valid); break; + case LOOKUP_TXT: res = tools::DNSResolver::instance().get_txt_record(hostname, dnssec_available, dnssec_valid); break; + default: MERROR("Invalid lookup type: " << (int)type); return {}; + } +@@ -130,6 +131,7 @@ int main(int argc, char* argv[]) + mlog_set_categories("+" MONERO_DEFAULT_LOG_CATEGORY ":INFO"); + + lookup(LOOKUP_A, {"seeds.moneroseeds.se", "seeds.moneroseeds.ae.org", "seeds.moneroseeds.ch", "seeds.moneroseeds.li"}); ++ lookup(LOOKUP_AAAA, {"seeds.moneroseeds.se", "seeds.moneroseeds.ae.org", "seeds.moneroseeds.ch", "seeds.moneroseeds.li"}); + + lookup(LOOKUP_TXT, {"updates.moneropulse.org", "updates.moneropulse.net", "updates.moneropulse.co", "updates.moneropulse.se", "updates.moneropulse.fr", "updates.moneropulse.de", "updates.moneropulse.no", "updates.moneropulse.ch"}); + +diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl +index 1a43c8ac2ad1..f357c6037800 100644 +--- a/src/p2p/net_node.inl ++++ b/src/p2p/net_node.inl +@@ -779,8 +779,6 @@ namespace nodetool + + // for each hostname in the seed nodes list, attempt to DNS resolve and + // add the result addresses as seed nodes +- // TODO: at some point add IPv6 support, but that won't be relevant +- // for some time yet. + + std::vector<std::vector<std::string>> dns_results; + dns_results.resize(m_seed_nodes_list.size()); +@@ -802,10 +800,12 @@ namespace nodetool + // TODO: care about dnssec avail/valid + bool avail, valid; + std::vector<std::string> addr_list; ++ std::vector<std::string> addr_list_ipv4; ++ std::vector<std::string> addr_list_ipv6; + + try + { +- addr_list = tools::DNSResolver::instance().get_ipv4(addr_str, avail, valid); ++ addr_list_ipv4 = tools::DNSResolver::instance().get_ipv4(addr_str, avail, valid); + MDEBUG("dns_threads[" << result_index << "] DNS resolve done"); + boost::this_thread::interruption_point(); + } +@@ -815,9 +815,30 @@ namespace nodetool + // even if we now have results, finish thread without setting + // result variables, which are now out of scope in main thread + MWARNING("dns_threads[" << result_index << "] interrupted"); ++ } ++ ++ try ++ { ++ addr_list_ipv6 = tools::DNSResolver::instance().get_ipv6(addr_str, avail, valid); ++ MDEBUG("dns_threads[" << result_index << "] DNS resolve done"); ++ boost::this_thread::interruption_point(); ++ } ++ catch(const boost::thread_interrupted&) ++ { ++ // thread interruption request ++ // even if we now have results, finish thread without setting ++ // result variables, which are now out of scope in main thread ++ MWARNING("dns_threads[" << result_index << "] interrupted"); ++ } ++ ++ if (addr_list_ipv4.empty() && addr_list_ipv6.empty()) ++ { + return; + } + ++ addr_list.insert(addr_list.end(), addr_list_ipv4.begin(), addr_list_ipv4.end()); ++ addr_list.insert(addr_list.end(), addr_list_ipv6.begin(), addr_list_ipv6.end()); ++ + MINFO("dns_threads[" << result_index << "] addr_str: " << addr_str << " number of results: " << addr_list.size()); + dns_results[result_index] = addr_list; + }); |