solana_streamer/
socket.rs1use std::net::{IpAddr, SocketAddr};
2
3#[derive(Clone, Copy)]
4pub enum SocketAddrSpace {
5 Unspecified,
6 Global,
7}
8
9impl SocketAddrSpace {
10 pub fn new(allow_private_addr: bool) -> Self {
11 if allow_private_addr {
12 SocketAddrSpace::Unspecified
13 } else {
14 SocketAddrSpace::Global
15 }
16 }
17
18 #[inline]
20 #[must_use]
21 pub fn check(&self, addr: &SocketAddr) -> bool {
22 if matches!(self, SocketAddrSpace::Unspecified) {
23 return true;
24 }
25 match addr.ip() {
27 IpAddr::V4(addr) => {
28 !(addr.is_private() || addr.is_loopback())
32 }
33 IpAddr::V6(addr) => {
34 !addr.is_loopback()
37 }
38 }
39 }
40}