use super::*;
impl Node {
#[cfg(test)]
pub(crate) fn disable_discovery_forward_rate_limit(&mut self) {
self.discovery_forward_limiter
.set_interval(std::time::Duration::ZERO);
}
#[cfg(test)]
pub(crate) fn get_session(&self, remote: &NodeAddr) -> Option<&SessionEntry> {
self.sessions.get(remote)
}
#[cfg(test)]
pub(crate) fn remove_session(&mut self, remote: &NodeAddr) -> Option<SessionEntry> {
self.sessions.remove(remote)
}
#[cfg(test)]
pub(crate) fn path_mtu_lookup_get(&self, fips_addr: &crate::FipsAddress) -> Option<u16> {
self.path_mtu_lookup
.read()
.ok()
.and_then(|map| map.get(fips_addr).copied())
}
#[cfg(test)]
pub(crate) fn path_mtu_lookup_insert(&self, fips_addr: crate::FipsAddress, mtu: u16) {
if let Ok(mut map) = self.path_mtu_lookup.write() {
map.insert(fips_addr, mtu);
}
}
pub fn session_count(&self) -> usize {
self.sessions.len()
}
pub(crate) fn session_entries(&self) -> impl Iterator<Item = (&NodeAddr, &SessionEntry)> {
self.sessions.iter()
}
pub(crate) fn session_dataplane_counters(&self, addr: &NodeAddr) -> (u64, u64, u64, u64) {
self.dataplane
.fsp_owner_activity(addr)
.map_or((0, 0, 0, 0), |activity| activity.traffic_counters())
}
pub(crate) fn session_dataplane_activity_ms(&self, addr: &NodeAddr) -> Option<u64> {
self.dataplane
.fsp_owner_activity(addr)
.and_then(|activity| activity.session_idle_activity_ms())
}
pub(crate) fn session_dataplane_epoch(&self, addr: &NodeAddr) -> Option<(u64, bool, bool)> {
let activity = self.dataplane.fsp_owner_activity(addr)?;
Some((
activity.fsp_session_start_ms()?,
activity.current_k_bit(),
activity.is_draining(),
))
}
pub(crate) fn session_mmp_snapshot(
&self,
addr: &NodeAddr,
) -> Option<crate::dataplane::DataplaneFspMmpSnapshot> {
self.dataplane.fsp_mmp_snapshot(addr)
}
pub(crate) fn register_identity(
&mut self,
node_addr: NodeAddr,
pubkey: secp256k1::PublicKey,
) -> bool {
self.identity_cache.register(
node_addr,
pubkey,
Self::now_ms(),
self.config.node.cache.identity_size,
)
}
pub(crate) fn lookup_by_fips_prefix(
&mut self,
prefix: &[u8; 15],
) -> Option<(NodeAddr, secp256k1::PublicKey)> {
self.identity_cache.lookup_by_prefix(prefix, Self::now_ms())
}
pub(crate) fn has_cached_identity(&self, addr: &NodeAddr) -> bool {
self.identity_cache.has_prefix_for(addr)
}
pub fn identity_cache_len(&self) -> usize {
self.identity_cache.len()
}
pub fn identity_cache_iter(
&self,
) -> impl Iterator<Item = (&NodeAddr, &secp256k1::PublicKey, u64)> {
self.identity_cache.iter()
}
pub fn identity_cache_max(&self) -> usize {
self.config.node.cache.identity_size
}
pub fn pending_lookup_count(&self) -> usize {
self.pending_lookups.len()
}
pub fn pending_lookups_iter(
&self,
) -> impl Iterator<Item = (&NodeAddr, &handlers::discovery::PendingLookup)> {
self.pending_lookups.iter()
}
pub fn recent_request_count(&self) -> usize {
self.recent_requests.len()
}
pub fn pending_tun_destinations(&self) -> usize {
self.pending_session_traffic.tun_destination_count()
}
pub fn pending_tun_total_packets(&self) -> usize {
self.pending_session_traffic.tun_packet_count()
}
pub fn retry_state_iter(&self) -> impl Iterator<Item = (&NodeAddr, &retry::RetryState)> {
self.retry_pending.iter()
}
}