1#![cfg_attr(docsrs, feature(doc_cfg))]
40#![warn(missing_debug_implementations)]
41#![warn(rust_2018_idioms)]
42#![allow(clippy::type_complexity)]
47#![allow(clippy::too_many_arguments)]
48#![allow(clippy::module_inception)]
49
50mod accept;
53pub mod build;
54mod checksum;
55mod connect;
56mod ethertype;
57pub mod fragment;
58mod frame;
59pub mod icmp;
60mod iface;
61mod ip;
62mod l2hub;
63mod l3hub;
64pub mod l4;
65mod mac;
66mod packet;
67mod pipe;
68mod pool;
69mod protocol;
70mod rand;
71mod stats;
72#[cfg(feature = "wg")]
73mod zeroize;
74
75pub use accept::{
76 Cleanup, Done, DoneSignal, L2Acceptor, L2AcceptorWithDone, L2Connector, L3Connector, serve,
77 serve_with_done,
78};
79pub use checksum::{
80 checksum, combine_checksums, incremental_update, pseudo_header_checksum, transport_checksum,
81};
82pub use connect::{connect_l2, connect_l3};
83pub use ethertype::EtherType;
84pub use frame::{Frame, build_frame};
85pub use iface::{Handler, L2Device, L2Handler, L3Device, L3Handler};
86pub use ip::IpPrefix;
87pub use l2hub::{L2Hub, L2HubHandle, PortMode, VlanSet};
88pub use l3hub::{L3Hub, L3HubHandle};
89pub use l4::{FiveTuple, IcmpMessage, TcpFlags, TcpSegment, UdpDatagram};
90pub use mac::{BROADCAST_MAC, MacAddr};
91pub use packet::Packet;
92pub use pipe::{PipeL2, PipeL3};
93pub use pool::{BufferPool, DEFAULT_MTU};
94pub use protocol::Protocol;
95pub use stats::{DeviceStats, HubCounters, HubStats, Stats};
96
97pub type Result<T> = std::io::Result<T>;
99
100#[cfg(all(target_os = "linux", any(feature = "tuntap", feature = "afpacket")))]
102mod sys;
103
104#[cfg(feature = "fuzzing")]
106#[doc(hidden)]
107pub mod fuzz;
108
109#[cfg(feature = "l2adapter")]
112#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
113pub mod arp;
114
115#[cfg(feature = "l2adapter")]
116#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
117pub mod ndp;
118
119#[cfg(feature = "l2adapter")]
120#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
121mod l2adapter;
122
123#[cfg(feature = "l2adapter")]
124#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
125pub use l2adapter::{L2Adapter, L2AdapterConfig};
126
127#[cfg(feature = "dhcp")]
128#[cfg_attr(docsrs, doc(cfg(feature = "dhcp")))]
129pub mod dhcp;
130
131#[cfg(feature = "afpacket")]
132#[cfg_attr(docsrs, doc(cfg(feature = "afpacket")))]
133pub mod afpacket;
134
135#[cfg(feature = "impair")]
136#[cfg_attr(docsrs, doc(cfg(feature = "impair")))]
137pub mod impair;
138
139#[cfg(feature = "pcap")]
140#[cfg_attr(docsrs, doc(cfg(feature = "pcap")))]
141pub mod pcap;
142
143#[cfg(feature = "qemu")]
144#[cfg_attr(docsrs, doc(cfg(feature = "qemu")))]
145pub mod qemu;
146
147#[cfg(feature = "tuntap")]
148#[cfg_attr(docsrs, doc(cfg(feature = "tuntap")))]
149pub mod tuntap;
150
151#[cfg(all(feature = "xdp", target_os = "linux"))]
157#[cfg_attr(docsrs, doc(cfg(feature = "xdp")))]
158pub mod xdp;
159
160#[cfg(all(feature = "afxdp", target_os = "linux"))]
161#[cfg_attr(docsrs, doc(cfg(feature = "afxdp")))]
162pub mod afxdp;
163
164#[cfg(feature = "vtcp")]
165#[cfg_attr(docsrs, doc(cfg(feature = "vtcp")))]
166pub mod vtcp;
167
168#[cfg(feature = "slirp")]
169#[cfg_attr(docsrs, doc(cfg(feature = "slirp")))]
170pub mod slirp;
171
172#[cfg(feature = "vclient")]
173#[cfg_attr(docsrs, doc(cfg(feature = "vclient")))]
174pub mod vclient;
175
176#[cfg(feature = "nat")]
177#[cfg_attr(docsrs, doc(cfg(feature = "nat")))]
178pub mod nat;
179
180#[cfg(feature = "wg")]
181#[cfg_attr(docsrs, doc(cfg(feature = "wg")))]
182pub mod wg;
183
184#[cfg(feature = "ovpn")]
185#[cfg_attr(docsrs, doc(cfg(feature = "ovpn")))]
186pub mod ovpn;