diff --git a/src/net_permissions.h b/src/net_permissions.h --- a/src/net_permissions.h +++ b/src/net_permissions.h @@ -32,11 +32,14 @@ PF_NOBAN = (1U << 4) | PF_DOWNLOAD, // Can query the mempool PF_MEMPOOL = (1U << 5), + // Bypass the limit on how many proof INVs are tracked from this peer as + // well as the delay penalty when reaching the the in-flight requests limit + PF_BYPASS_PROOF_REQUEST_LIMITS = (1U << 30), // True if the user did not specifically set fine grained permissions PF_ISIMPLICIT = (1U << 31), PF_ALL = PF_BLOOMFILTER | PF_FORCERELAY | PF_RELAY | PF_NOBAN | PF_MEMPOOL | - PF_DOWNLOAD, + PF_DOWNLOAD | PF_BYPASS_PROOF_REQUEST_LIMITS, }; class NetPermissions { diff --git a/src/net_permissions.cpp b/src/net_permissions.cpp --- a/src/net_permissions.cpp +++ b/src/net_permissions.cpp @@ -19,6 +19,8 @@ "mempool (allow requesting BIP35 mempool contents)", "download (allow getheaders during IBD, no disconnect after " "maxuploadtarget limit)", + "bypass_proof_request_limits (experimental, bypass the limits on avalanche " + "proof downloads)", }; namespace { @@ -69,6 +71,8 @@ NetPermissions::AddFlag(flags, PF_ALL); } else if (permission == "relay") { NetPermissions::AddFlag(flags, PF_RELAY); + } else if (permission == "bypass_proof_request_limits") { + NetPermissions::AddFlag(flags, PF_BYPASS_PROOF_REQUEST_LIMITS); } else if (permission.length() == 0) { // Allow empty entries } else { @@ -107,6 +111,9 @@ if (NetPermissions::HasFlag(flags, PF_DOWNLOAD)) { strings.push_back("download"); } + if (NetPermissions::HasFlag(flags, PF_BYPASS_PROOF_REQUEST_LIMITS)) { + strings.push_back("bypass_proof_request_limits"); + } return strings; } diff --git a/src/test/fuzz/net_permissions.cpp b/src/test/fuzz/net_permissions.cpp --- a/src/test/fuzz/net_permissions.cpp +++ b/src/test/fuzz/net_permissions.cpp @@ -27,6 +27,7 @@ NetPermissionFlags::PF_FORCERELAY, NetPermissionFlags::PF_NOBAN, NetPermissionFlags::PF_MEMPOOL, + NetPermissionFlags::PF_BYPASS_PROOF_REQUEST_LIMITS, NetPermissionFlags::PF_ISIMPLICIT, NetPermissionFlags::PF_ALL, }) diff --git a/src/test/netbase_tests.cpp b/src/test/netbase_tests.cpp --- a/src/test/netbase_tests.cpp +++ b/src/test/netbase_tests.cpp @@ -476,10 +476,11 @@ whitelistPermissions, error)); BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, PF_NOBAN); BOOST_CHECK(NetWhitelistPermissions::TryParse( - "bloom,forcerelay,noban,relay@1.2.3.4/32", whitelistPermissions, - error)); + "bloom,forcerelay,noban,relay,bypass_proof_request_limits@1.2.3.4/32", + whitelistPermissions, error)); BOOST_CHECK_EQUAL(whitelistPermissions.m_flags, - PF_BLOOMFILTER | PF_FORCERELAY | PF_NOBAN | PF_RELAY); + PF_BLOOMFILTER | PF_FORCERELAY | PF_NOBAN | PF_RELAY | + PF_BYPASS_PROOF_REQUEST_LIMITS); BOOST_CHECK(error.empty()); BOOST_CHECK_EQUAL(whitelistPermissions.m_subnet.ToString(), "1.2.3.4/32"); BOOST_CHECK(NetWhitelistPermissions::TryParse( @@ -487,7 +488,7 @@ error)); const auto strings = NetPermissions::ToStrings(PF_ALL); - BOOST_CHECK_EQUAL(strings.size(), 6U); + BOOST_CHECK_EQUAL(strings.size(), 7U); BOOST_CHECK(std::find(strings.begin(), strings.end(), "bloomfilter") != strings.end()); BOOST_CHECK(std::find(strings.begin(), strings.end(), "forcerelay") != @@ -500,6 +501,8 @@ strings.end()); BOOST_CHECK(std::find(strings.begin(), strings.end(), "download") != strings.end()); + BOOST_CHECK(std::find(strings.begin(), strings.end(), + "bypass_proof_request_limits") != strings.end()); } BOOST_AUTO_TEST_CASE( diff --git a/test/functional/p2p_permissions.py b/test/functional/p2p_permissions.py --- a/test/functional/p2p_permissions.py +++ b/test/functional/p2p_permissions.py @@ -93,7 +93,14 @@ self.checkpermission( # all permission added ["-whitelist=all@127.0.0.1"], - ["forcerelay", "noban", "mempool", "bloomfilter", "relay", "download"], + ["forcerelay", "noban", "mempool", "bloomfilter", + "relay", "download", "bypass_proof_request_limits"], + False) + + self.checkpermission( + # bypass_proof_request_limits permission + ["-whitelist=bypass_proof_request_limits@127.0.0.1"], + ["bypass_proof_request_limits"], False) self.stop_node(1)