fips_core/node/
session_access_impl.rs1use super::*;
2
3impl Node {
4 #[cfg(test)]
9 pub(crate) fn disable_discovery_forward_rate_limit(&mut self) {
10 self.discovery_forward_limiter
11 .set_interval(std::time::Duration::ZERO);
12 }
13
14 #[cfg(test)]
15 pub(crate) fn get_session(&self, remote: &NodeAddr) -> Option<&SessionEntry> {
16 self.sessions.get(remote)
17 }
18
19 #[cfg(test)]
21 pub(crate) fn remove_session(&mut self, remote: &NodeAddr) -> Option<SessionEntry> {
22 self.sessions.remove(remote)
23 }
24
25 #[cfg(test)]
27 pub(crate) fn path_mtu_lookup_get(&self, fips_addr: &crate::FipsAddress) -> Option<u16> {
28 self.path_mtu_lookup
29 .read()
30 .ok()
31 .and_then(|map| map.get(fips_addr).copied())
32 }
33
34 #[cfg(test)]
36 pub(crate) fn path_mtu_lookup_insert(&self, fips_addr: crate::FipsAddress, mtu: u16) {
37 if let Ok(mut map) = self.path_mtu_lookup.write() {
38 map.insert(fips_addr, mtu);
39 }
40 }
41
42 pub fn session_count(&self) -> usize {
44 self.sessions.len()
45 }
46
47 pub(crate) fn session_entries(&self) -> impl Iterator<Item = (&NodeAddr, &SessionEntry)> {
49 self.sessions.iter()
50 }
51
52 pub(crate) fn session_dataplane_counters(&self, addr: &NodeAddr) -> (u64, u64, u64, u64) {
53 self.dataplane
54 .fsp_owner_activity(addr)
55 .map_or((0, 0, 0, 0), |activity| activity.traffic_counters())
56 }
57
58 pub(crate) fn session_dataplane_activity_ms(&self, addr: &NodeAddr) -> Option<u64> {
59 self.dataplane
60 .fsp_owner_activity(addr)
61 .and_then(|activity| activity.session_idle_activity_ms())
62 }
63
64 pub(crate) fn session_dataplane_epoch(&self, addr: &NodeAddr) -> Option<(u64, bool, bool)> {
65 let activity = self.dataplane.fsp_owner_activity(addr)?;
66 Some((
67 activity.fsp_session_start_ms()?,
68 activity.current_k_bit(),
69 activity.is_draining(),
70 ))
71 }
72
73 pub(crate) fn session_mmp_snapshot(
74 &self,
75 addr: &NodeAddr,
76 ) -> Option<crate::dataplane::DataplaneFspMmpSnapshot> {
77 self.dataplane.fsp_mmp_snapshot(addr)
78 }
79
80 pub(crate) fn register_identity(
84 &mut self,
85 node_addr: NodeAddr,
86 pubkey: secp256k1::PublicKey,
87 ) -> bool {
88 self.identity_cache.register(
92 node_addr,
93 pubkey,
94 Self::now_ms(),
95 self.config.node.cache.identity_size,
96 )
97 }
98
99 pub(crate) fn lookup_by_fips_prefix(
101 &mut self,
102 prefix: &[u8; 15],
103 ) -> Option<(NodeAddr, secp256k1::PublicKey)> {
104 self.identity_cache.lookup_by_prefix(prefix, Self::now_ms())
105 }
106
107 pub(crate) fn has_cached_identity(&self, addr: &NodeAddr) -> bool {
109 self.identity_cache.has_prefix_for(addr)
110 }
111
112 pub fn identity_cache_len(&self) -> usize {
114 self.identity_cache.len()
115 }
116
117 pub fn identity_cache_iter(
122 &self,
123 ) -> impl Iterator<Item = (&NodeAddr, &secp256k1::PublicKey, u64)> {
124 self.identity_cache.iter()
125 }
126
127 pub fn identity_cache_max(&self) -> usize {
129 self.config.node.cache.identity_size
130 }
131
132 pub fn pending_lookup_count(&self) -> usize {
134 self.pending_lookups.len()
135 }
136
137 pub fn pending_lookups_iter(
139 &self,
140 ) -> impl Iterator<Item = (&NodeAddr, &handlers::discovery::PendingLookup)> {
141 self.pending_lookups.iter()
142 }
143
144 pub fn recent_request_count(&self) -> usize {
146 self.recent_requests.len()
147 }
148
149 pub fn pending_tun_destinations(&self) -> usize {
151 self.pending_session_traffic.tun_destination_count()
152 }
153
154 pub fn pending_tun_total_packets(&self) -> usize {
156 self.pending_session_traffic.tun_packet_count()
157 }
158
159 pub fn retry_state_iter(&self) -> impl Iterator<Item = (&NodeAddr, &retry::RetryState)> {
161 self.retry_pending.iter()
162 }
163}