Skip to main content

MemcapPolicy

Enum MemcapPolicy 

Source
#[non_exhaustive]
pub enum MemcapPolicy { Ignore, DropFlow, DropPacket, PassThrough, }
Available on crate feature tracker only.
Expand description

Tracker-wide memcap policy — what to do when the total reassembly buffering across all flows trips the configured memcap. Mirrors Suricata’s stream.reassembly.memcap-policy vocabulary, collapsed to the four behaviors that make sense for a passive analyzer.

Set on crate::FlowTrackerConfig::reassembly_memcap_policy; the cap itself is crate::FlowTrackerConfig::reassembly_memcap.

#[non_exhaustive] — additive forever.

New in 0.18.0 (issue #17 close).

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Ignore

Default. Count the violation and change nothing — buffering continues past the cap. Matches Suricata’s memcap-policy: ignore, which is likewise a reporting mode rather than an enforcement one.

A single AnomalyKind::GlobalMemcapHit fires per tick on the first violation; later violations in the same tick coalesce into it.

This does not bound memory. Choose DropPacket to actually enforce the cap, or PassThrough / DropFlow to reclaim what is already buffered.

§

DropFlow

Stop reassembling the violating flow — both sides are released (ReassemblyStop::Memcap) — while the flow stays tracked until its transport end (so its later packets are not mistaken for a new connection). Session parsers on the flow stop reading both sides (two side stops with EndReason::BufferOverflow), then close once (detail "both sides stopped"). Released whether or not a side had a reassembler yet, and whatever the reassembler’s release does: the driver drops it and keeps only its final counters. Use when you’d rather lose one flow’s L7 than corrupt analysis on it.

Before 0.25 this ended the flow with Ended { reason: BufferOverflow } and forgot it.

§

DropPacket

Refuse the segment that would push past the memcap, keeping the flow and everything already buffered. The reassembler stays usable; the refused bytes surface as a gap (crate::SessionParser::on_gap) once later data arrives.

The decision is made before the segment is handed to the reassembler — Reassembler::segment cannot be undone — so it is conservative: a reassembler that would have deduplicated the payload is still charged its full length.

§

PassThrough

Stop reassembling the offending side only (ReassemblyStop::Memcap) and release what it holds, but keep the flow in the tracker. Flow accounting continues; session parsers stop reading that side (EndReason::BufferOverflow); the other side goes on.

Since 0.25 crate::FlowDriver drops the side’s reassembler (keeping only its final counters), so the memory is freed whatever Reassembler::release does.

Implementations§

Source§

impl MemcapPolicy

Source

pub fn as_str(&self) -> &'static str

Stable slug for metric labels.

Trait Implementations§

Source§

impl Clone for MemcapPolicy

Source§

fn clone(&self) -> Self

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 Copy for MemcapPolicy

Source§

impl Debug for MemcapPolicy

Source§

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

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

impl Default for MemcapPolicy

Source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for MemcapPolicy

Available on crate feature serde only.
Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for MemcapPolicy

Source§

impl Hash for MemcapPolicy

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for MemcapPolicy

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for MemcapPolicy

Available on crate feature serde only.
Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for MemcapPolicy

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more