#![cfg_attr(docsrs, feature(doc_cfg))]
#![warn(missing_debug_implementations)]
#![warn(rust_2018_idioms)]
#![allow(clippy::type_complexity)]
#![allow(clippy::too_many_arguments)]
#![allow(clippy::module_inception)]
mod accept;
pub mod build;
mod checksum;
mod connect;
mod ethertype;
pub mod fragment;
mod frame;
pub mod icmp;
mod iface;
mod ip;
mod l2hub;
mod l3hub;
pub mod l4;
mod mac;
mod packet;
mod pipe;
mod pool;
mod protocol;
mod rand;
mod stats;
#[cfg(feature = "wg")]
mod zeroize;
pub use accept::{
Cleanup, Done, DoneSignal, L2Acceptor, L2AcceptorWithDone, L2Connector, L3Connector, serve,
serve_with_done,
};
pub use checksum::{
checksum, combine_checksums, incremental_update, pseudo_header_checksum, transport_checksum,
};
pub use connect::{connect_l2, connect_l3};
pub use ethertype::EtherType;
pub use frame::{Frame, build_frame};
pub use iface::{Handler, L2Device, L2Handler, L3Device, L3Handler};
pub use ip::IpPrefix;
pub use l2hub::{L2Hub, L2HubHandle, PortMode, VlanSet};
pub use l3hub::{L3Hub, L3HubHandle};
pub use l4::{FiveTuple, IcmpMessage, TcpFlags, TcpSegment, UdpDatagram};
pub use mac::{BROADCAST_MAC, MacAddr};
pub use packet::Packet;
pub use pipe::{PipeL2, PipeL3};
pub use pool::{BufferPool, DEFAULT_MTU};
pub use protocol::Protocol;
pub use stats::{DeviceStats, HubCounters, HubStats, Stats};
pub type Result<T> = std::io::Result<T>;
#[cfg(all(target_os = "linux", any(feature = "tuntap", feature = "afpacket")))]
mod sys;
#[cfg(feature = "fuzzing")]
#[doc(hidden)]
pub mod fuzz;
#[cfg(feature = "l2adapter")]
#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
pub mod arp;
#[cfg(feature = "l2adapter")]
#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
pub mod ndp;
#[cfg(feature = "l2adapter")]
#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
mod l2adapter;
#[cfg(feature = "l2adapter")]
#[cfg_attr(docsrs, doc(cfg(feature = "l2adapter")))]
pub use l2adapter::{L2Adapter, L2AdapterConfig};
#[cfg(feature = "dhcp")]
#[cfg_attr(docsrs, doc(cfg(feature = "dhcp")))]
pub mod dhcp;
#[cfg(feature = "afpacket")]
#[cfg_attr(docsrs, doc(cfg(feature = "afpacket")))]
pub mod afpacket;
#[cfg(feature = "impair")]
#[cfg_attr(docsrs, doc(cfg(feature = "impair")))]
pub mod impair;
#[cfg(feature = "pcap")]
#[cfg_attr(docsrs, doc(cfg(feature = "pcap")))]
pub mod pcap;
#[cfg(feature = "qemu")]
#[cfg_attr(docsrs, doc(cfg(feature = "qemu")))]
pub mod qemu;
#[cfg(feature = "tuntap")]
#[cfg_attr(docsrs, doc(cfg(feature = "tuntap")))]
pub mod tuntap;
#[cfg(all(feature = "xdp", target_os = "linux"))]
#[cfg_attr(docsrs, doc(cfg(feature = "xdp")))]
pub mod xdp;
#[cfg(all(feature = "afxdp", target_os = "linux"))]
#[cfg_attr(docsrs, doc(cfg(feature = "afxdp")))]
pub mod afxdp;
#[cfg(feature = "vtcp")]
#[cfg_attr(docsrs, doc(cfg(feature = "vtcp")))]
pub mod vtcp;
#[cfg(feature = "slirp")]
#[cfg_attr(docsrs, doc(cfg(feature = "slirp")))]
pub mod slirp;
#[cfg(feature = "vclient")]
#[cfg_attr(docsrs, doc(cfg(feature = "vclient")))]
pub mod vclient;
#[cfg(feature = "nat")]
#[cfg_attr(docsrs, doc(cfg(feature = "nat")))]
pub mod nat;
#[cfg(feature = "wg")]
#[cfg_attr(docsrs, doc(cfg(feature = "wg")))]
pub mod wg;
#[cfg(feature = "ovpn")]
#[cfg_attr(docsrs, doc(cfg(feature = "ovpn")))]
pub mod ovpn;