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 register_dns_identity(
102 &mut self,
103 node_addr: NodeAddr,
104 pubkey: secp256k1::PublicKey,
105 ) -> bool {
106 self.register_endpoint_identity(node_addr, pubkey)
107 }
108
109 pub(crate) fn register_endpoint_identity(
115 &mut self,
116 node_addr: NodeAddr,
117 pubkey: secp256k1::PublicKey,
118 ) -> bool {
119 self.identity_cache.register_explicit_target(
120 node_addr,
121 pubkey,
122 Self::now_ms(),
123 self.config.node.cache.identity_size,
124 )
125 }
126
127 pub(crate) fn is_explicit_target_identity(&self, node_addr: &NodeAddr) -> bool {
128 self.identity_cache.is_explicit_target(node_addr)
129 }
130
131 pub(crate) fn lookup_by_fips_prefix(
133 &mut self,
134 prefix: &[u8; 15],
135 ) -> Option<(NodeAddr, secp256k1::PublicKey)> {
136 self.identity_cache.lookup_by_prefix(prefix, Self::now_ms())
137 }
138
139 pub(crate) fn has_cached_identity(&self, addr: &NodeAddr) -> bool {
141 self.identity_cache.has_prefix_for(addr)
142 }
143
144 pub fn identity_cache_len(&self) -> usize {
146 self.identity_cache.len()
147 }
148
149 pub fn identity_cache_iter(
154 &self,
155 ) -> impl Iterator<Item = (&NodeAddr, &secp256k1::PublicKey, u64)> {
156 self.identity_cache.iter()
157 }
158
159 pub fn identity_cache_max(&self) -> usize {
161 self.config.node.cache.identity_size
162 }
163
164 pub fn pending_lookup_count(&self) -> usize {
166 self.pending_lookups.len()
167 }
168
169 pub fn pending_lookups_iter(
171 &self,
172 ) -> impl Iterator<Item = (&NodeAddr, &handlers::discovery::PendingLookup)> {
173 self.pending_lookups.iter()
174 }
175
176 pub fn recent_request_count(&self) -> usize {
178 self.recent_requests.len()
179 }
180
181 pub fn pending_tun_destinations(&self) -> usize {
183 self.pending_session_traffic.tun_destination_count()
184 }
185
186 pub fn pending_tun_total_packets(&self) -> usize {
188 self.pending_session_traffic.tun_packet_count()
189 }
190
191 pub fn retry_state_iter(&self) -> impl Iterator<Item = (&NodeAddr, &retry::RetryState)> {
193 self.retry_pending.iter()
194 }
195}