merge: mesh multiversion and transport pills
# Conflicts: # core/archipelago/src/mesh/listener/decode.rs # core/archipelago/src/mesh/meshtastic.rs
This commit is contained in:
@@ -355,6 +355,9 @@ impl Server {
|
||||
}
|
||||
|
||||
// Initialize transport router (unified routing: mesh > lan > tor)
|
||||
// Hoisted so the FIPS seed-anchor loop below can auto-peer LAN-discovered
|
||||
// federation peers directly over FIPS (see that loop).
|
||||
let mut fips_peer_registry: Option<std::sync::Arc<crate::transport::PeerRegistry>> = None;
|
||||
{
|
||||
let data_dir = config.data_dir.clone();
|
||||
let did =
|
||||
@@ -368,6 +371,7 @@ impl Server {
|
||||
match crate::transport::PeerRegistry::load(&data_dir).await {
|
||||
Ok(registry) => {
|
||||
let registry = std::sync::Arc::new(registry);
|
||||
fips_peer_registry = Some(registry.clone());
|
||||
let mut transports: Vec<Box<dyn crate::transport::NodeTransport>> = Vec::new();
|
||||
|
||||
// Tor transport (always register — availability checked dynamically)
|
||||
@@ -640,6 +644,7 @@ impl Server {
|
||||
// onboarding before we start dialing.
|
||||
{
|
||||
let data_dir = config.data_dir.clone();
|
||||
let fips_peer_registry = fips_peer_registry.clone();
|
||||
tokio::spawn(async move {
|
||||
tokio::time::sleep(Duration::from_secs(30)).await;
|
||||
let mut interval = tokio::time::interval(Duration::from_secs(300));
|
||||
@@ -654,6 +659,23 @@ impl Server {
|
||||
tracing::debug!("Seed-anchor apply: load failed (non-fatal): {}", e)
|
||||
}
|
||||
}
|
||||
|
||||
// Auto-peer federation nodes we've discovered on the LAN
|
||||
// directly over FIPS, so co-located peers don't depend on the
|
||||
// (often flaky) global anchor's spanning tree to route to each
|
||||
// other. For every peer the registry knows both a LAN address
|
||||
// AND a FIPS npub for, dial it on its FIPS UDP transport port
|
||||
// (8668) at its LAN IP. This is FIPS's own transport over the
|
||||
// LAN — NOT Tailscale, NOT the HTTP/LAN messaging port. Pure
|
||||
// FIPS. `fipsctl connect` is idempotent, so re-applying every
|
||||
// tick just keeps the direct link warm; unknown/remote peers
|
||||
// (no LAN address) are left to the anchor as before.
|
||||
if let Some(reg) = fips_peer_registry.as_ref() {
|
||||
let direct = crate::fips::anchors::lan_fips_anchors(®.all_peers().await);
|
||||
if !direct.is_empty() {
|
||||
let _ = crate::fips::anchors::apply(&direct).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user