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