1pub mod icmp;
8pub mod tcp;
9pub mod udp;
10
11use std::net::{IpAddr, SocketAddr};
12
13#[derive(Debug, Clone, Copy, PartialEq, Eq)]
15pub enum SocketFamily {
16 IPV4,
17 IPV6,
18}
19
20impl SocketFamily {
21 pub fn from_ip(ip: &IpAddr) -> Self {
23 match ip {
24 IpAddr::V4(_) => SocketFamily::IPV4,
25 IpAddr::V6(_) => SocketFamily::IPV6,
26 }
27 }
28
29 pub fn from_socket_addr(addr: &SocketAddr) -> Self {
31 match addr {
32 SocketAddr::V4(_) => SocketFamily::IPV4,
33 SocketAddr::V6(_) => SocketFamily::IPV6,
34 }
35 }
36
37 pub fn is_v4(&self) -> bool {
39 matches!(self, SocketFamily::IPV4)
40 }
41
42 pub fn is_v6(&self) -> bool {
44 matches!(self, SocketFamily::IPV6)
45 }
46
47 pub(crate) fn to_domain(&self) -> socket2::Domain {
49 match self {
50 SocketFamily::IPV4 => socket2::Domain::IPV4,
51 SocketFamily::IPV6 => socket2::Domain::IPV6,
52 }
53 }
54}