pub struct Filter {Show 16 fields
pub negate: bool,
pub rules: Vec<FilterRule>,
pub protocols: Vec<u8>,
pub src_ips: Vec<IpNet>,
pub dst_ips: Vec<IpNet>,
pub ips: Vec<IpNet>,
pub src_ports: Vec<PortRange>,
pub dst_ports: Vec<PortRange>,
pub ports: Vec<PortRange>,
pub flow_ids: FxHashSet<u64>,
pub from_ns: Option<u64>,
pub to_ns: Option<u64>,
pub tcp_flags: Option<TcpFlagsFilter>,
pub min_len: Option<u32>,
pub max_len: Option<u32>,
pub unidirectional: bool,
}Expand description
Compiled structured packet filter.
§Flat-body composition (within the base filter)
- Multiple values within the same category are OR-ed.
- Values across different categories are AND-ed.
- An empty category places no constraint.
§Global negation
When negate is true the entire result of the flat-body evaluation
(and the rule chain, if any) is inverted. Use --not on the CLI.
§Rule chain
rules is an ordered list of FilterRules evaluated left-to-right
after the base body. Each rule carries an Op that controls how it
combines with the accumulated result:
Op::And—acc = acc AND rule.matches(pkt)(default)Op::Or—acc = acc OR rule.matches(pkt)Op::Not—acc = acc AND NOT rule.matches(pkt)
An empty rules list (the default) has no effect.
Fields§
§negate: boolWhen true, the entire filter result is inverted.
rules: Vec<FilterRule>Additional rules chained after the base body.
protocols: Vec<u8>IP protocol numbers to match. Empty = any protocol.
src_ips: Vec<IpNet>Source IP/CIDR rules (OR-ed within this set).
dst_ips: Vec<IpNet>Destination IP/CIDR rules (OR-ed).
ips: Vec<IpNet>Either-endpoint IP/CIDR rules: matches if src or dst is in range.
src_ports: Vec<PortRange>Source port ranges (OR-ed). Only applied to TCP/UDP.
dst_ports: Vec<PortRange>Destination port ranges (OR-ed). Only applied to TCP/UDP.
ports: Vec<PortRange>Either-endpoint port ranges: matches if src port or dst port is in range.
flow_ids: FxHashSet<u64>Flow IDs (pre-computed) to retain. Empty = any flow.
from_ns: Option<u64>Inclusive lower timestamp bound (nanoseconds). None = no lower bound.
to_ns: Option<u64>Inclusive upper timestamp bound (nanoseconds). None = no upper bound.
tcp_flags: Option<TcpFlagsFilter>TCP control-flags filter.
min_len: Option<u32>Minimum captured length in bytes. None = no minimum.
max_len: Option<u32>Maximum captured length in bytes. None = no maximum.
unidirectional: boolWhen true, flow IDs are computed unidirectionally.
Implementations§
Source§impl Filter
impl Filter
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Return true if the filter places no constraints (matches every packet).
A filter with negate = true or a non-empty rules list is never empty.
Sourcepub fn matches(&self, meta: &PacketMeta) -> bool
pub fn matches(&self, meta: &PacketMeta) -> bool
Evaluate the filter against meta.
- Evaluate the base flat body.
- Apply
negateto that result. - Fold over
rulesusing each rule’sOp.
Returns true if the packet passes.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Filter
impl RefUnwindSafe for Filter
impl Send for Filter
impl Sync for Filter
impl Unpin for Filter
impl UnsafeUnpin for Filter
impl UnwindSafe for Filter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more