wind_core/
interface.rs

1use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Clone)]
6pub struct Iface {
7	pub name:  String,
8	pub ipv4:  Option<Ipv4Addr>,
9	pub ipv6:  Option<Ipv6Addr>,
10	pub index: u32,
11}
12
13#[derive(Debug, Clone, Default)]
14pub enum Stack {
15	#[default]
16	V4,
17	V6,
18}
19impl From<&SocketAddr> for Stack {
20	fn from(value: &SocketAddr) -> Self {
21		match value {
22			SocketAddr::V4(..) => Self::V4,
23			SocketAddr::V6(..) => Self::V6,
24		}
25	}
26}
27impl From<&IpAddr> for Stack {
28	fn from(value: &IpAddr) -> Self {
29		match value {
30			IpAddr::V4(..) => Self::V4,
31			IpAddr::V6(..) => Self::V6,
32		}
33	}
34}
35
36#[derive(Serialize, Debug, Clone, Copy)]
37pub enum Network {
38	TCP,
39	UDP,
40	ICMPv4,
41	ICMPv6,
42}
43
44#[derive(Debug, Clone, Copy)]
45pub enum StackPrefer {
46	V4,
47	V6,
48	V4V6,
49	V6V4,
50}
51
52impl StackPrefer {
53	pub fn support_v6(&self) -> bool {
54		!matches!(self, StackPrefer::V4)
55	}
56}