Compare commits

...

3 Commits

Author SHA1 Message Date
dr7ana 575494c3da actually have rid in command registration 2023-12-13 13:27:00 -08:00
dr7ana 2c3763b61c libquic vbump 2023-12-13 11:50:56 -08:00
dr7ana 08c2c26c29 bootstrap tweaking 2023-12-13 11:13:22 -08:00
8 changed files with 45 additions and 34 deletions

@ -1 +1 @@
Subproject commit 0e431b912eb4bf76a9219861afc06cd8ceafa781 Subproject commit 0060e9b9fa1d8fc75ad882d1764e032f65d19cdc

View File

@ -123,12 +123,9 @@ namespace llarp
} }
void void
LinkManager::register_commands(std::shared_ptr<oxen::quic::BTRequestStream>& s) LinkManager::register_commands(std::shared_ptr<oxen::quic::BTRequestStream>& s, const RouterID& router_id)
{ {
log::critical(logcat, "{} called", __PRETTY_FUNCTION__); log::critical(logcat, "{} called", __PRETTY_FUNCTION__);
const RouterID& router_id {s->conn.remote_key()};
log::critical(logcat, "Registering commands (RID:{})", router_id);
s->register_command("bfetch_rcs"s, [this](oxen::quic::message m) { s->register_command("bfetch_rcs"s, [this](oxen::quic::message m) {
_router.loop()->call( _router.loop()->call(
@ -209,7 +206,7 @@ namespace llarp
if (_router.is_bootstrap_seed()) if (_router.is_bootstrap_seed())
{ {
// FIXME: remove "|| true", this is just for local testing! // FIXME: remove "|| true", this is just for local testing!
if (node_db->whitelist().count(other) || true) if (node_db->whitelist().count(other) || true)
{ {
log::critical(logcat, "Saving bootstrap seed requester..."); log::critical(logcat, "Saving bootstrap seed requester...");
@ -218,8 +215,10 @@ namespace llarp
} }
log::critical( log::critical(
logcat, logcat,
"Bootstrap seed node was {} to confirm fetch requester is white-listed; {}successfully saved RID", "Bootstrap seed node was {} to confirm fetch requester is white-listed; {}successfully "
result ? "able" : "unable", result ? "" : "un"); "saved RID",
result ? "able" : "unable",
result ? "" : "un");
return result; return result;
} }
@ -236,7 +235,6 @@ namespace llarp
[&](oxen::quic::Connection& c, [&](oxen::quic::Connection& c,
oxen::quic::Endpoint& e, oxen::quic::Endpoint& e,
std::optional<int64_t> id) -> std::shared_ptr<oxen::quic::Stream> { std::optional<int64_t> id) -> std::shared_ptr<oxen::quic::Stream> {
if (id && *id == 0) if (id && *id == 0)
{ {
log::critical(logcat, "Stream constructor constructing BTStream (ID:{})", id); log::critical(logcat, "Stream constructor constructing BTStream (ID:{})", id);
@ -248,7 +246,7 @@ namespace llarp
error_code); error_code);
s.conn.close_connection(error_code); s.conn.close_connection(error_code);
}); });
register_commands(s); // register_commands(s);
return s; return s;
} }
@ -279,7 +277,7 @@ namespace llarp
log::critical(logcat, "Queued BTStream to be opened ID:{}", control_stream->stream_id()); log::critical(logcat, "Queued BTStream to be opened ID:{}", control_stream->stream_id());
assert(control_stream->stream_id() == 0); assert(control_stream->stream_id() == 0);
// register_commands(control_stream); register_commands(control_stream, rid);
itr->second = std::make_shared<link::Connection>(ci.shared_from_this(), control_stream); itr->second = std::make_shared<link::Connection>(ci.shared_from_this(), control_stream);
log::critical(logcat, "Successfully configured inbound connection fom {}...", rid); log::critical(logcat, "Successfully configured inbound connection fom {}...", rid);
@ -368,6 +366,9 @@ namespace llarp
if (auto p_itr = pending_conn_msg_queue.find(rid); p_itr != pending_conn_msg_queue.end()) if (auto p_itr = pending_conn_msg_queue.find(rid); p_itr != pending_conn_msg_queue.end())
pending_conn_msg_queue.erase(p_itr); pending_conn_msg_queue.erase(p_itr);
if (auto c_itr = ep.pending_conns.find(rid); c_itr != ep.pending_conns.end())
ep.pending_conns.erase(c_itr);
if (auto m_itr = ep.active_conns.find(rid); m_itr != ep.active_conns.end()) if (auto m_itr = ep.active_conns.find(rid); m_itr != ep.active_conns.end())
ep.active_conns.erase(m_itr); ep.active_conns.erase(m_itr);
@ -378,7 +379,6 @@ namespace llarp
}); });
} }
bool bool
LinkManager::send_control_message( LinkManager::send_control_message(
const RouterID& remote, const RouterID& remote,
@ -421,23 +421,24 @@ namespace llarp
body = std::move(body), body = std::move(body),
f = std::move(func)]() { f = std::move(func)]() {
auto pending = PendingMessage(std::move(body), std::move(endpoint), std::move(f)); auto pending = PendingMessage(std::move(body), std::move(endpoint), std::move(f));
if (auto it1 = ep.pending_conns.find(remote); it1 != ep.pending_conns.end()) if (auto it1 = ep.pending_conns.find(remote); it1 != ep.pending_conns.end())
{ {
if (auto it2 = pending_conn_msg_queue.find(remote); it2 != pending_conn_msg_queue.end()) if (auto it2 = pending_conn_msg_queue.find(remote); it2 != pending_conn_msg_queue.end())
{ {
it2->second.push_back(std::move(pending)); it2->second.push_back(std::move(pending));
log::critical(logcat, "Connection (RID:{}) is pending; message appended to send queue!", remote); log::critical(
logcat, "Connection (RID:{}) is pending; message appended to send queue!", remote);
} }
} }
else else
{ {
log::critical(logcat, "Connection (RID:{}) not found in pending conns; creating send queue!", remote); log::critical(
logcat, "Connection (RID:{}) not found in pending conns; creating send queue!", remote);
auto [itr, b] = pending_conn_msg_queue.emplace(remote, MessageQueue()); auto [itr, b] = pending_conn_msg_queue.emplace(remote, MessageQueue());
itr->second.push_back(std::move(pending)); itr->second.push_back(std::move(pending));
connect_to(remote); connect_to(remote);
} }
}); });
return false; return false;
@ -713,7 +714,7 @@ namespace llarp
oxenc::bt_dict_consumer btdc{m.body()}; oxenc::bt_dict_consumer btdc{m.body()};
btdc.required("local"); btdc.required("local");
auto rc_dict = btdc.consume_dict_data(); auto rc_dict = btdc.consume_dict_data();
log::critical(logcat, "incoming dict data: {}", oxenc::to_hex(rc_dict)); // log::critical(logcat, "incoming dict data: {}", oxenc::to_hex(rc_dict));
remote = RemoteRC{rc_dict}; remote = RemoteRC{rc_dict};
quantity = btdc.require<size_t>("quantity"); quantity = btdc.require<size_t>("quantity");
} }

View File

@ -213,7 +213,7 @@ namespace llarp
startup_endpoint(); startup_endpoint();
void void
register_commands(std::shared_ptr<oxen::quic::BTRequestStream>& s); register_commands(std::shared_ptr<oxen::quic::BTRequestStream>& s, const RouterID& rid);
public: public:
const link::Endpoint& const link::Endpoint&
@ -416,7 +416,7 @@ namespace llarp
s.conn.close_connection(error_code); s.conn.close_connection(error_code);
}); });
link_manager.register_commands(control_stream); link_manager.register_commands(control_stream, rid);
itr->second = std::make_shared<link::Connection>(conn_interface, control_stream); itr->second = std::make_shared<link::Connection>(conn_interface, control_stream);
log::critical(logcat, "Connection to RID:{} added to pending connections...", rid); log::critical(logcat, "Connection to RID:{} added to pending connections...", rid);

View File

@ -339,9 +339,11 @@ namespace llarp
void void
NodeDB::fetch_initial() NodeDB::fetch_initial()
{ {
if (known_rids.empty()) auto sz = num_rcs();
if (num_rcs() < MIN_ACTIVE_RCS)
{ {
log::critical(logcat, "No RouterID's held locally... BOOTSTRAP TIME"); log::critical(logcat, "{}/{} RCs held locally... BOOTSTRAP TIME", sz, MIN_ACTIVE_RCS);
fallback_to_bootstrap(); fallback_to_bootstrap();
} }
else else
@ -728,7 +730,12 @@ namespace llarp
// const auto& num = rids.size(); // const auto& num = rids.size();
log::critical(logcat, "BootstrapRC fetch response from {} returned {}/{} needed RCs", fetch_source, num, BOOTSTRAP_SOURCE_COUNT); log::critical(
logcat,
"BootstrapRC fetch response from {} returned {}/{} needed RCs",
fetch_source,
num,
BOOTSTRAP_SOURCE_COUNT);
// known_rids.merge(rids); // known_rids.merge(rids);
fetch_initial(); fetch_initial();
@ -964,6 +971,9 @@ namespace llarp
{ {
const auto& rid = rc.router_id(); const auto& rid = rc.router_id();
if (rid == _router.local_rid())
return false;
known_rcs.erase(rc); known_rcs.erase(rc);
rc_lookup.erase(rid); rc_lookup.erase(rid);

View File

@ -23,6 +23,7 @@ namespace llarp
struct Router; struct Router;
/* RC Fetch Constants */ /* RC Fetch Constants */
inline constexpr size_t MIN_ACTIVE_RCS{6};
// max number of attempts we make in non-bootstrap fetch requests // max number of attempts we make in non-bootstrap fetch requests
inline constexpr int MAX_FETCH_ATTEMPTS{10}; inline constexpr int MAX_FETCH_ATTEMPTS{10};
// the total number of returned rcs that are held locally should be at least this // the total number of returned rcs that are held locally should be at least this

View File

@ -776,7 +776,7 @@ namespace llarp
if (is_service_node()) if (is_service_node())
{ {
log::critical( log::info(
logcat, logcat,
"Local service node has {} client connections since last RC update ({} to expiry)", "Local service node has {} client connections since last RC update ({} to expiry)",
num_client_connections(), num_client_connections(),
@ -911,11 +911,12 @@ namespace llarp
// (client-only) periodically fetch updated RCs // (client-only) periodically fetch updated RCs
if (now_timepoint - last_rc_fetch > RC_UPDATE_INTERVAL) if (now_timepoint - last_rc_fetch > RC_UPDATE_INTERVAL)
{ {
log::critical(logcat, "Time to fetch RCs!");
node_db()->fetch_rcs(); node_db()->fetch_rcs();
} }
// (client-only) periodically fetch updated RouterID list // (client-only) periodically fetch updated RouterID list
if (now_timepoint - last_rid_fetch > ROUTERID_UPDATE_INTERVAL) if (not is_snode and now_timepoint - last_rid_fetch > ROUTERID_UPDATE_INTERVAL)
{ {
node_db()->fetch_rids(); node_db()->fetch_rids();
} }
@ -1139,7 +1140,7 @@ namespace llarp
log::info(logcat, "Loading NodeDB from disk..."); log::info(logcat, "Loading NodeDB from disk...");
_node_db->load_from_disk(); _node_db->load_from_disk();
// _node_db->store_bootstraps(); _node_db->store_bootstraps();
oxen::log::flush(); oxen::log::flush();

View File

@ -48,7 +48,7 @@ namespace llarp
static constexpr size_t INTROSET_STORAGE_REDUNDANCY = static constexpr size_t INTROSET_STORAGE_REDUNDANCY =
(INTROSET_RELAY_REDUNDANCY * INTROSET_REQS_PER_RELAY); (INTROSET_RELAY_REDUNDANCY * INTROSET_REQS_PER_RELAY);
static const std::chrono::seconds RC_UPDATE_INTERVAL = 5min; static const std::chrono::seconds RC_UPDATE_INTERVAL = 4min;
static const std::chrono::seconds ROUTERID_UPDATE_INTERVAL = 1h; static const std::chrono::seconds ROUTERID_UPDATE_INTERVAL = 1h;
struct Contacts; struct Contacts;
@ -105,7 +105,6 @@ namespace llarp
std::shared_ptr<NodeDB> _node_db; std::shared_ptr<NodeDB> _node_db;
llarp_time_t _started_at; llarp_time_t _started_at;
const oxenmq::TaggedThreadID _disk_thread; const oxenmq::TaggedThreadID _disk_thread;
// oxen::quic::Network _net; // DISCUSS: we don't use this anywhere..?
llarp_time_t _last_stats_report = 0s; llarp_time_t _last_stats_report = 0s;
llarp_time_t _next_decomm_warning = time_now_ms() + 15s; llarp_time_t _next_decomm_warning = time_now_ms() + 15s;
@ -158,6 +157,12 @@ namespace llarp
std::chrono::system_clock::time_point next_bootstrap_attempt{last_rc_gossip}; std::chrono::system_clock::time_point next_bootstrap_attempt{last_rc_gossip};
public: public:
bool
testnet() const
{
return _testnet;
}
bool bool
is_bootstrap_seed() const is_bootstrap_seed() const
{ {

View File

@ -46,13 +46,6 @@ namespace llarp
throw std::runtime_error{err}; throw std::runtime_error{err};
} }
log::error(
log::Cat("FIXME"),
"ABOUT TO VERIFY THIS: {}, WITH SIG {}, SIGNED BY {}",
oxenc::to_hex(msg),
oxenc::to_hex(sig),
router_id().ToHex());
if (not crypto::verify(router_id(), msg, sig)) if (not crypto::verify(router_id(), msg, sig))
throw std::runtime_error{"Failed to verify RemoteRC signature"}; throw std::runtime_error{"Failed to verify RemoteRC signature"};
}); });