real rtt and new fixed smoltcp
This commit is contained in:
@@ -5,3 +5,4 @@ mod handler;
|
||||
mod muxer;
|
||||
|
||||
pub use connection::{ClientHandler, Connection, ServerHandler, TunnelHandler};
|
||||
pub use muxer::GLOBAL_MIN_RTT;
|
||||
|
||||
@@ -58,6 +58,8 @@ pub struct MuxMessage {
|
||||
pub data: Bytes,
|
||||
}
|
||||
|
||||
pub static GLOBAL_MIN_RTT: AtomicU32 = AtomicU32::new(250);
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Muxer {
|
||||
legs: Arc<DashMap<u32, MuxLeg>>,
|
||||
@@ -169,6 +171,16 @@ impl Muxer {
|
||||
if let Some(leg) = self.legs.get(&leg_id) {
|
||||
leg.stats.rtt_ms.store(rtt, Ordering::Relaxed);
|
||||
trace!(leg_id, rtt, "💓 [Muxer] RTT updated for leg");
|
||||
|
||||
let min_rtt = self
|
||||
.legs
|
||||
.iter()
|
||||
.map(|kv| kv.value().stats.rtt_ms.load(Ordering::Relaxed))
|
||||
.filter(|&r| r > 0)
|
||||
.min()
|
||||
.unwrap_or(250);
|
||||
|
||||
GLOBAL_MIN_RTT.store(min_rtt, Ordering::Relaxed);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -318,6 +330,15 @@ impl Muxer {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_min_rtt(&self) -> u32 {
|
||||
self.legs
|
||||
.iter()
|
||||
.map(|kv| kv.value().stats.rtt_ms.load(Ordering::Relaxed))
|
||||
.filter(|&rtt| rtt > 0)
|
||||
.min()
|
||||
.unwrap_or(250) // Fallback
|
||||
}
|
||||
|
||||
fn format_size(bytes: u64) -> String {
|
||||
const KB: u64 = 1024;
|
||||
const MB: u64 = KB * 1024;
|
||||
|
||||
+1
-1
@@ -3,5 +3,5 @@ mod connection;
|
||||
mod constants;
|
||||
|
||||
pub use config::NetworkConfig;
|
||||
pub use connection::{ClientHandler, Connection, ServerHandler, TunnelHandler};
|
||||
pub use connection::{ClientHandler, Connection, ServerHandler, TunnelHandler, GLOBAL_MIN_RTT};
|
||||
pub use constants::*;
|
||||
|
||||
Reference in New Issue
Block a user