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(Debug, MeshPayload)]
72 pub enum HostPort {
73 Fixed(u16),
75 Dynamic(mesh::OneshotSender<u16>),
78 }
79
80 #[derive(Debug, MeshPayload)]
82 pub struct HostPortConfig {
83 pub protocol: HostPortProtocol,
85 pub host_address: Option<HostIpAddress>,
87 pub host_port: HostPort,
89 pub guest_port: u16,
91 }
92
93 #[derive(MeshPayload)]
95 pub enum ConsommeRequest {
96 Bind(mesh::rpc::FailableRpc<HostPortConfig, ()>),
98 Unbind(mesh::rpc::FailableRpc<HostPortConfig, ()>),
100 }
101
102 #[derive(MeshPayload)]
104 pub struct ConsommeHandle {
105 pub cidr: Option<String>,
107 pub ports: Vec<HostPortConfig>,
109 pub recv: Option<mesh::Receiver<ConsommeRequest>>,
111 }
112
113 impl ResourceId<NetEndpointHandleKind> for ConsommeHandle {
114 const ID: &'static str = "consomme";
115 }
116}
117
118pub mod dio {
120 use guid::Guid;
121 use mesh::MeshPayload;
122 use vm_resource::ResourceId;
123 use vm_resource::kind::NetEndpointHandleKind;
124
125 #[derive(Copy, Clone, MeshPayload)]
127 pub struct SwitchPortId {
128 pub switch: Guid,
130 pub port: Guid,
132 }
133
134 #[derive(MeshPayload)]
136 pub struct WindowsDirectIoHandle {
137 pub switch_port_id: SwitchPortId,
139 }
140
141 impl ResourceId<NetEndpointHandleKind> for WindowsDirectIoHandle {
142 const ID: &'static str = "dio";
143 }
144}
145
146#[cfg(target_os = "linux")]
148pub mod tap {
149 use mesh::MeshPayload;
150 use vm_resource::ResourceId;
151 use vm_resource::kind::NetEndpointHandleKind;
152
153 #[derive(MeshPayload)]
155 pub struct TapHandle {
156 pub fd: std::os::fd::OwnedFd,
159 }
160
161 impl ResourceId<NetEndpointHandleKind> for TapHandle {
162 const ID: &'static str = "tap";
163 }
164}