#![doc = include_str!("../README.md")]
#![deny(unsafe_op_in_unsafe_fn)]
#![warn(missing_docs)]
#[cfg(not(target_os = "linux"))]
compile_error!(
"netring requires Linux — it is built on AF_PACKET (TPACKET_v3) and AF_XDP, \
which are Linux-only kernel interfaces. For cross-platform packet capture, \
use the `pcap` crate instead."
);
pub mod afpacket;
pub mod afxdp;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod anomaly;
pub mod async_adapters;
pub mod bridge;
pub mod config;
#[cfg(feature = "flow")]
pub mod correlate;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod ctx;
pub mod dedup;
#[cfg(all(feature = "flow", feature = "tokio"))]
#[macro_use]
pub mod detector_macro;
pub mod error;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod export;
pub mod interface;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod layer;
#[cfg(feature = "metrics")]
pub mod metrics;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod monitor;
pub mod netns;
pub mod packet;
#[cfg(feature = "pcap")]
pub mod pcap;
#[cfg(all(feature = "pcap", feature = "tokio", feature = "flow"))]
pub mod pcap_flow;
#[cfg(feature = "pcap")]
pub mod pcap_rotate;
#[cfg(all(feature = "pcap", feature = "tokio"))]
pub mod pcap_source;
#[cfg(all(feature = "pcap", feature = "tokio"))]
pub mod pcap_tap;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod prelude;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod protocol;
#[cfg(all(feature = "flow", feature = "tokio"))]
pub mod report;
pub mod stats;
pub mod traits;
#[cfg(feature = "parse")]
pub mod well_known {
pub use flowscope::well_known::LabelTable;
}
pub(crate) mod sockopt;
pub(crate) mod syscall;
pub use afpacket::rx::{Capture, CaptureBuilder, Packets};
pub use afpacket::tx::{Injector, InjectorBuilder, TxSlot};
pub use bridge::{
Bridge, BridgeAction, BridgeBuilder, BridgeDirection, BridgeHandles, BridgeStats,
};
pub use config::{
BpfBuildError, BpfFilter, BpfFilterBuilder, BpfInsn, BusyPollConfig, FanoutFlags, FanoutMode,
IpNet, ParseIpNetError, RingProfile, TimestampSource,
};
pub use dedup::Dedup;
pub use error::Error;
pub use interface::{InterfaceInfo, interface_info};
pub use packet::{
BatchIter, OwnedPacket, Packet, PacketBatch, PacketDirection, PacketStatus, Timestamp,
TimestampClock,
};
pub use flowscope::PacketView;
pub use stats::{CaptureStats, DropBreakdown};
pub use traits::{PacketSetFilter, PacketSink, PacketSource};
#[cfg(feature = "af-xdp")]
pub use afxdp::{XdpBatch, XdpBatchIter, XdpPacket};
pub use afxdp::{XdpMode, XdpSocket, XdpSocketBuilder, XdpStats};
#[cfg(feature = "af-xdp")]
pub mod xdp {
#[cfg(feature = "xdp-loader")]
pub use crate::afxdp::loader::{
LoaderError, XdpAttachment, XdpFlags, XdpProgram, default_program, filter_program,
};
pub use crate::afxdp::{Queues, interface_numa_node, queue_count};
#[cfg(feature = "xdp-loader")]
pub use crate::afxdp::{XdpCapture, XdpCaptureBuilder, XdpCaptureGuard};
pub mod rss {
pub use crate::afxdp::rss::{
RssConfig, RssMode, SYMMETRIC_RSS_KEY, rss_flow_hash, toeplitz,
};
}
pub mod steer {
pub use crate::afxdp::steer::{FlowRule, RxSteer, SteerGuard};
}
}
#[cfg(feature = "channel")]
pub use async_adapters::channel::ChannelCapture;
#[cfg(feature = "tokio")]
pub use async_adapters::dedup_stream::DedupStream;
#[cfg(feature = "tokio")]
pub use async_adapters::tokio_adapter::{AsyncCapture, PacketStream, ReadableGuard};
#[cfg(feature = "tokio")]
pub use async_adapters::tokio_injector::{AsyncInjector, TxPacer};
#[cfg(all(feature = "tokio", feature = "af-xdp"))]
pub use async_adapters::tokio_xdp::{AsyncXdpSocket, XdpReadableGuard, XdpStream};
#[cfg(all(feature = "tokio", feature = "af-xdp", feature = "xdp-loader"))]
pub use async_adapters::tokio_xdp_capture::AsyncXdpCapture;
#[cfg(feature = "tokio")]
pub use traits::AsyncPacketSource;
#[cfg(feature = "parse")]
pub mod flow {
pub use flowscope::extract;
pub use flowscope::{
Extracted, FlowExtractor, L4Proto, Orientation, PacketView, TcpFlags, TcpInfo,
};
pub use flowscope::app_proto::{self, AppProtocol, Transport};
#[cfg(feature = "flow")]
pub use flowscope::tracker::IdleTimeoutFn;
#[cfg(feature = "flow")]
pub use flowscope::{
AnomalyKind, BufferedReassembler, BufferedReassemblerFactory, EndReason, FlowDriver,
FlowEntry, FlowEvent, FlowEvents, FlowSide, FlowState, FlowStats, FlowTracker,
FlowTrackerConfig, FlowTrackerStats, HistoryString, OverflowPolicy, ParserKind,
Reassembler, ReassemblerFactory,
};
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use crate::async_adapters::session_event::SessionEvent;
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use crate::async_adapters::async_reassembler::{
AsyncReassembler, AsyncReassemblerFactory, ChannelFactory, ChannelReassembler,
channel_factory,
};
}
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use async_adapters::conversation::{Conversation, ConversationChunk, ConversationStream};
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use async_adapters::flow_broadcast::{BroadcastRecvError, FlowBroadcast, FlowSubscriber};
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use async_adapters::flow_stream::{AsyncReassemblerSlot, FlowStream, NoReassembler};
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use async_adapters::multi_capture::AsyncMultiCapture;
#[cfg(all(
feature = "tokio",
feature = "flow",
feature = "af-xdp",
feature = "xdp-loader"
))]
pub use async_adapters::multi_capture::AsyncXdpMultiCapture;
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use async_adapters::multi_config::MultiStreamConfig;
#[cfg(all(feature = "tokio", feature = "flow"))]
pub use async_adapters::multi_streams::{
MergedFlowStream, MultiDatagramStream, MultiFlowStream, MultiSessionStream, TaggedEvent,
};
#[cfg(all(
feature = "tokio",
feature = "flow",
feature = "af-xdp",
feature = "xdp-loader"
))]
pub use async_adapters::multi_streams::{
XdpMultiDatagramStream, XdpMultiFlowStream, XdpMultiSessionStream,
};
#[cfg(feature = "tokio")]
pub use async_adapters::stream_capture::{StreamCapture, StreamSetFilter};
#[cfg(all(feature = "pcap", feature = "tokio", feature = "flow"))]
pub use pcap_flow::{PcapDatagramStream, PcapFlowStream, PcapSessionStream};
#[cfg(all(feature = "pcap", feature = "tokio"))]
pub use pcap_source::{AsyncPcapConfig, AsyncPcapSource, PcapFormat};
#[cfg(all(feature = "pcap", feature = "tokio"))]
pub use pcap_tap::{PcapTap, TapErrorPolicy};
#[cfg(all(feature = "flow", feature = "tokio"))]
pub use protocol::{
Dispatch, FlowKey, FlowProtocol, MessageProtocol, Protocol, ProtocolInitError, SignatureMatch,
};
#[cfg(all(feature = "flow", feature = "tokio"))]
pub use anomaly::{Anomaly, AnomalyContext, Severity};