From 44cde7a939d7ec7a3972371f75025a4b741fddc7 Mon Sep 17 00:00:00 2001 From: John Smith Date: Thu, 4 Aug 2022 10:35:19 -0400 Subject: [PATCH] fix errors on no internet --- veilid-core/src/network_manager/mod.rs | 47 +++++++++++-------- veilid-core/src/network_manager/native/mod.rs | 10 ++-- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/veilid-core/src/network_manager/mod.rs b/veilid-core/src/network_manager/mod.rs index 242cfcbb..dbdd9210 100644 --- a/veilid-core/src/network_manager/mod.rs +++ b/veilid-core/src/network_manager/mod.rs @@ -515,40 +515,49 @@ impl NetworkManager { } pub async fn tick(&self) -> EyreResult<()> { - let (routing_table, net, receipt_manager) = { + let (routing_table, net, receipt_manager, protocol_config) = { let inner = self.inner.lock(); let components = inner.components.as_ref().unwrap(); + let protocol_config = inner.protocol_config.as_ref().unwrap(); ( inner.routing_table.as_ref().unwrap().clone(), components.net.clone(), components.receipt_manager.clone(), + protocol_config.clone(), ) }; // Run the rolling transfers task self.unlocked_inner.rolling_transfers_task.tick().await?; - // Run the relay management task - self.unlocked_inner.relay_management_task.tick().await?; + // Process global peer scope ticks + // These only make sense when connected to the actual internet and not just the local network + // Must have at least one outbound protocol enabled, and one global peer scope address family enabled + let global_peer_scope_enabled = + !protocol_config.outbound.is_empty() && !protocol_config.family_global.is_empty(); + if global_peer_scope_enabled { + // Run the relay management task + self.unlocked_inner.relay_management_task.tick().await?; - // If routing table has no live entries, then add the bootstrap nodes to it - let live_entry_count = routing_table.get_entry_count(BucketEntryState::Unreliable); - if live_entry_count == 0 { - self.unlocked_inner.bootstrap_task.tick().await?; + // If routing table has no live entries, then add the bootstrap nodes to it + let live_entry_count = routing_table.get_entry_count(BucketEntryState::Unreliable); + if live_entry_count == 0 { + self.unlocked_inner.bootstrap_task.tick().await?; + } + + // If we still don't have enough peers, find nodes until we do + let min_peer_count = { + let c = self.config.get(); + c.network.dht.min_peer_count as usize + }; + if live_entry_count < min_peer_count { + self.unlocked_inner.peer_minimum_refresh_task.tick().await?; + } + + // Ping validate some nodes to groom the table + self.unlocked_inner.ping_validator_task.tick().await?; } - // If we still don't have enough peers, find nodes until we do - let min_peer_count = { - let c = self.config.get(); - c.network.dht.min_peer_count as usize - }; - if live_entry_count < min_peer_count { - self.unlocked_inner.peer_minimum_refresh_task.tick().await?; - } - - // Ping validate some nodes to groom the table - self.unlocked_inner.ping_validator_task.tick().await?; - // Run the routing table tick routing_table.tick().await?; diff --git a/veilid-core/src/network_manager/native/mod.rs b/veilid-core/src/network_manager/native/mod.rs index 7489f8e1..9d976539 100644 --- a/veilid-core/src/network_manager/native/mod.rs +++ b/veilid-core/src/network_manager/native/mod.rs @@ -90,9 +90,9 @@ impl Network { tcp_port: 0u16, ws_port: 0u16, wss_port: 0u16, - enable_ipv4: true, - enable_ipv6_global: true, - enable_ipv6_local: true, + enable_ipv4: false, + enable_ipv6_global: false, + enable_ipv6_local: false, bound_first_udp: BTreeMap::new(), inbound_udp_protocol_handlers: BTreeMap::new(), outbound_udpv4_protocol_handler: None, @@ -549,14 +549,18 @@ impl Network { // determine if we have ipv4/ipv6 addresses { let mut inner = self.inner.lock(); + inner.enable_ipv4 = false; for addr in self.unlocked_inner.interfaces.best_addresses() { if addr.is_ipv4() { + log_net!(debug "enable address {:?} as ipv4", addr); inner.enable_ipv4 = true; } else if addr.is_ipv6() { let address = crate::Address::from_ip_addr(addr); if address.is_global() { + log_net!(debug "enable address {:?} as ipv6 global", address); inner.enable_ipv6_global = true; } else if address.is_local() { + log_net!(debug "enable address {:?} as ipv6 local", address); inner.enable_ipv6_local = true; } }