mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-07-26 12:12:50 +02:00
Path/node cleanup stuff, build fixes.
This commit is contained in:
parent
4ca8b30044
commit
94305ae779
6 changed files with 24 additions and 35 deletions
|
@ -157,12 +157,12 @@ unsafe impl<O, F: PoolFactory<O>> Send for Pool<O, F> {}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
|
||||||
use std::ops::DerefMut;
|
use std::ops::DerefMut;
|
||||||
|
use std::sync::Arc;
|
||||||
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use crate::util::pool::*;
|
use crate::util::pool::*;
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
struct TestPoolFactory;
|
struct TestPoolFactory;
|
||||||
|
|
||||||
|
|
|
@ -108,3 +108,6 @@ pub const WHOIS_RETRY_MAX: u16 = 3;
|
||||||
|
|
||||||
/// Maximum number of endpoints allowed in a Locator.
|
/// Maximum number of endpoints allowed in a Locator.
|
||||||
pub const LOCATOR_MAX_ENDPOINTS: usize = 32;
|
pub const LOCATOR_MAX_ENDPOINTS: usize = 32;
|
||||||
|
|
||||||
|
/// Keepalive interval for paths in milliseconds.
|
||||||
|
pub const PATH_KEEPALIVE_INTERVAL: i64 = 20000;
|
||||||
|
|
|
@ -116,6 +116,7 @@ pub trait VL1PacketHandler {
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct BackgroundTaskIntervals {
|
struct BackgroundTaskIntervals {
|
||||||
whois: IntervalGate<{ WhoisQueue::INTERVAL }>,
|
whois: IntervalGate<{ WhoisQueue::INTERVAL }>,
|
||||||
|
paths: IntervalGate<{ Path::INTERVAL }>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Node {
|
pub struct Node {
|
||||||
|
@ -212,6 +213,12 @@ impl Node {
|
||||||
if intervals.whois.gate(tt) {
|
if intervals.whois.gate(tt) {
|
||||||
self.whois.on_interval(self, ci, tt);
|
self.whois.on_interval(self, ci, tt);
|
||||||
}
|
}
|
||||||
|
if intervals.paths.gate(tt) {
|
||||||
|
self.paths.retain(|_, path| {
|
||||||
|
path.on_interval(ci, tt);
|
||||||
|
true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Duration::from_millis(1000)
|
Duration::from_millis(1000)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,10 @@ use crate::vl1::fragmentedpacket::FragmentedPacket;
|
||||||
use crate::vl1::node::{PacketBuffer, VL1CallerInterface};
|
use crate::vl1::node::{PacketBuffer, VL1CallerInterface};
|
||||||
use crate::vl1::protocol::PacketID;
|
use crate::vl1::protocol::PacketID;
|
||||||
|
|
||||||
|
/// A remote endpoint paired with a local socket and a local interface.
|
||||||
|
/// These are maintained in Node and canonicalized so that all unique paths have
|
||||||
|
/// one and only one unique path object. That enables statistics to be tracked
|
||||||
|
/// for them and uniform application of things like keepalives.
|
||||||
pub struct Path {
|
pub struct Path {
|
||||||
pub(crate) endpoint: Endpoint,
|
pub(crate) endpoint: Endpoint,
|
||||||
pub(crate) local_socket: i64,
|
pub(crate) local_socket: i64,
|
||||||
|
@ -20,6 +24,8 @@ pub struct Path {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Path {
|
impl Path {
|
||||||
|
pub(crate) const INTERVAL: i64 = PATH_KEEPALIVE_INTERVAL;
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn new(endpoint: Endpoint, local_socket: i64, local_interface: i64) -> Self {
|
pub fn new(endpoint: Endpoint, local_socket: i64, local_interface: i64) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
@ -42,7 +48,8 @@ impl Path {
|
||||||
self.last_receive_time_ticks.load(Ordering::Relaxed)
|
self.last_receive_time_ticks.load(Ordering::Relaxed)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Receive a fragment and return a FragmentedPacket if the entire packet is assembled.
|
/// Receive a fragment and return a FragmentedPacket if the entire packet was assembled.
|
||||||
|
/// This returns None if more fragments are needed to assemble the packet.
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub(crate) fn receive_fragment(&self, packet_id: PacketID, fragment_no: u8, fragment_expecting_count: u8, packet: PacketBuffer, time_ticks: i64) -> Option<FragmentedPacket> {
|
pub(crate) fn receive_fragment(&self, packet_id: PacketID, fragment_no: u8, fragment_expecting_count: u8, packet: PacketBuffer, time_ticks: i64) -> Option<FragmentedPacket> {
|
||||||
self.last_receive_time_ticks.store(time_ticks, Ordering::Relaxed);
|
self.last_receive_time_ticks.store(time_ticks, Ordering::Relaxed);
|
||||||
|
@ -85,8 +92,7 @@ impl Path {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn do_background_tasks<CI: VL1CallerInterface>(&self, ct: &CI) {
|
pub fn on_interval<CI: VL1CallerInterface>(&self, ct: &CI, time_ticks: i64) {
|
||||||
let time_ticks = ct.time_ticks();
|
|
||||||
self.fragmented_packets.lock().retain(|packet_id, frag| (time_ticks - frag.ts_ticks) < FRAGMENT_EXPIRATION);
|
self.fragmented_packets.lock().retain(|packet_id, frag| (time_ticks - frag.ts_ticks) < FRAGMENT_EXPIRATION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
31
service/Cargo.lock
generated
31
service/Cargo.lock
generated
|
@ -1,5 +1,7 @@
|
||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansi_term"
|
name = "ansi_term"
|
||||||
version = "0.11.0"
|
version = "0.11.0"
|
||||||
|
@ -26,22 +28,6 @@ version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "base64"
|
|
||||||
version = "0.13.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "base64-serde"
|
|
||||||
version = "0.6.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2e964e3e0a930303c7c0bdb28ebf691dd98d9eee4b8b68019d2c995710b58a18"
|
|
||||||
dependencies = [
|
|
||||||
"base64",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "1.2.1"
|
version = "1.2.1"
|
||||||
|
@ -928,18 +914,6 @@ version = "0.9.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "45af6a010d13e4cf5b54c94ba5a2b2eba5596b9e46bf5875612d332a1f2b3f86"
|
checksum = "45af6a010d13e4cf5b54c94ba5a2b2eba5596b9e46bf5875612d332a1f2b3f86"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerotier-core"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"base64",
|
|
||||||
"base64-serde",
|
|
||||||
"hex",
|
|
||||||
"num-derive",
|
|
||||||
"num-traits",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerotier-service"
|
name = "zerotier-service"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -961,5 +935,4 @@ dependencies = [
|
||||||
"socket2",
|
"socket2",
|
||||||
"tokio",
|
"tokio",
|
||||||
"winapi",
|
"winapi",
|
||||||
"zerotier-core",
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -12,7 +12,6 @@ codegen-units = 1
|
||||||
panic = 'abort'
|
panic = 'abort'
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
zerotier-core = { path = "../rust-zerotier-core" }
|
|
||||||
num_cpus = "*"
|
num_cpus = "*"
|
||||||
tokio = { version = "1", features = ["rt", "net", "time", "signal", "macros"] }
|
tokio = { version = "1", features = ["rt", "net", "time", "signal", "macros"] }
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
|
@ -29,6 +28,7 @@ socket2 = { version = "0", features = ["reuseport", "unix", "pair"] }
|
||||||
dialoguer = "0"
|
dialoguer = "0"
|
||||||
digest_auth = "0.2.4"
|
digest_auth = "0.2.4"
|
||||||
colored = "2"
|
colored = "2"
|
||||||
|
#zerotier-core = { path = "../rust-zerotier-core" }
|
||||||
|
|
||||||
[target."cfg(windows)".dependencies]
|
[target."cfg(windows)".dependencies]
|
||||||
winapi = { version = "0.3.9", features = ["handleapi", "ws2ipdef", "ws2tcpip"] }
|
winapi = { version = "0.3.9", features = ["handleapi", "ws2ipdef", "ws2tcpip"] }
|
||||||
|
|
Loading…
Add table
Reference in a new issue