net_backend_resources/
lib.rs1#![forbid(unsafe_code)]
9
10pub mod mac_address;
11
12pub mod null {
14 use mesh::MeshPayload;
15 use vm_resource::ResourceId;
16 use vm_resource::kind::NetEndpointHandleKind;
17
18 #[derive(MeshPayload)]
21 pub struct NullHandle;
22
23 impl ResourceId<NetEndpointHandleKind> for NullHandle {
24 const ID: &'static str = "null";
25 }
26}
27
28pub mod consomme {
30 use mesh::MeshPayload;
31 use vm_resource::ResourceId;
32 use vm_resource::kind::NetEndpointHandleKind;
33
34 #[derive(Clone, Debug, MeshPayload)]
36 pub enum HostPortProtocol {
37 Tcp,
39 Udp,
41 }
42
43 #[derive(Clone, Debug, MeshPayload)]
45 pub enum HostIpAddress {
46 Ipv4(std::net::Ipv4Addr),
48 Ipv6(std::net::Ipv6Addr),
50 }
51
52 impl From<std::net::IpAddr> for HostIpAddress {
53 fn from(addr: std::net::IpAddr) -> Self {
54 match addr {
55 std::net::IpAddr::V4(v4) => HostIpAddress::Ipv4(v4),
56 std::net::IpAddr::V6(v6) => HostIpAddress::Ipv6(v6),
57 }
58 }
59 }
60
61 impl From<HostIpAddress> for std::net::IpAddr {
62 fn from(addr: HostIpAddress) -> Self {
63 match addr {
64 HostIpAddress::Ipv4(v4) => std::net::IpAddr::V4(v4),
65 HostIpAddress::Ipv6(v6) => std::net::IpAddr::V6(v6),
66 }
67 }
68 }
69
70 #[derive(Clone, Debug, MeshPayload)]
72 pub struct HostPortConfig {
73 pub protocol: HostPortProtocol,
75 pub host_address: Option<HostIpAddress>,
77 pub host_port: u16,
79 pub guest_port: u16,
81 }
82
83 #[derive(MeshPayload)]
85 pub struct ConsommeHandle {
86 pub cidr: Option<String>,
88 pub ports: Vec<HostPortConfig>,
90 }
91
92 impl ResourceId<NetEndpointHandleKind> for ConsommeHandle {
93 const ID: &'static str = "consomme";
94 }
95}
96
97pub mod dio {
99 use guid::Guid;
100 use mesh::MeshPayload;
101 use vm_resource::ResourceId;
102 use vm_resource::kind::NetEndpointHandleKind;
103
104 #[derive(Copy, Clone, MeshPayload)]
106 pub struct SwitchPortId {
107 pub switch: Guid,
109 pub port: Guid,
111 }
112
113 #[derive(MeshPayload)]
115 pub struct WindowsDirectIoHandle {
116 pub switch_port_id: SwitchPortId,
118 }
119
120 impl ResourceId<NetEndpointHandleKind> for WindowsDirectIoHandle {
121 const ID: &'static str = "dio";
122 }
123}
124
125#[cfg(target_os = "linux")]
127pub mod tap {
128 use mesh::MeshPayload;
129 use vm_resource::ResourceId;
130 use vm_resource::kind::NetEndpointHandleKind;
131
132 #[derive(MeshPayload)]
134 pub struct TapHandle {
135 pub fd: std::os::fd::OwnedFd,
138 }
139
140 impl ResourceId<NetEndpointHandleKind> for TapHandle {
141 const ID: &'static str = "tap";
142 }
143}