Skip to main content

BpfExpr

Enum BpfExpr 

Source
pub enum BpfExpr {
    And(Box<Self>, Box<Self>),
    Or(Box<Self>, Box<Self>),
    Not(Box<Self>),
    IpProto(u8),
    Ip,
    Ip6,
    Arp,
    Host {
        dir: Dir,
        net: IpNet,
    },
    Net {
        dir: Dir,
        net: IpNet,
    },
    Port {
        dir: Dir,
        range: PortRange,
    },
    Len {
        op: CmpOp,
        val: u32,
    },
}
Expand description

A compiled BPF expression tree.

Construct with parse and evaluate per-packet with BpfExpr::eval.

Variants§

§

And(Box<Self>, Box<Self>)

Both sub-expressions must match.

§

Or(Box<Self>, Box<Self>)

Either sub-expression must match.

§

Not(Box<Self>)

Sub-expression must not match.

§

IpProto(u8)

IP protocol number (tcp=6, udp=17, icmp=1, icmp6=58, proto N).

§

Ip

IPv4 packet (ip keyword).

§

Ip6

IPv6 packet (ip6 keyword).

§

Arp

ARP frame (arp keyword). Best-effort: matches any non-IP packet (i.e. packets for which etherparse produces no flow key).

§

Host

Exact host or prefix match on one or both endpoints.

Fields

§dir: Dir
§net: IpNet
§

Net

Network prefix (CIDR) match on one or both endpoints.

Fields

§dir: Dir
§net: IpNet
§

Port

Port or port-range match (TCP/UDP only; silently passes other protocols).

Fields

§dir: Dir
§

Len

Captured-length comparison (len > N, len <= N, …).

Fields

§val: u32

Implementations§

Source§

impl BpfExpr

Source

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

Evaluate this expression against packet metadata.

Returns true if the packet passes the filter.

Trait Implementations§

Source§

impl Clone for BpfExpr

Source§

fn clone(&self) -> BpfExpr

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 BpfExpr

Source§

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

Formats the value using the given formatter. 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