Skip to main content

Filter

Struct Filter 

Source
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::Andacc = acc AND rule.matches(pkt) (default)
  • Op::Oracc = acc OR rule.matches(pkt)
  • Op::Notacc = acc AND NOT rule.matches(pkt)

An empty rules list (the default) has no effect.

Fields§

§negate: bool

When 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: bool

When true, flow IDs are computed unidirectionally.

Implementations§

Source§

impl Filter

Source

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.

Source

pub fn matches(&self, meta: &PacketMeta) -> bool

Evaluate the filter against meta.

  1. Evaluate the base flat body.
  2. Apply negate to that result.
  3. Fold over rules using each rule’s Op.

Returns true if the packet passes.

Trait Implementations§

Source§

impl Clone for Filter

Source§

fn clone(&self) -> Filter

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Filter

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Filter

Source§

fn default() -> Filter

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V