Skip to main content

Extracted

Struct Extracted 

Source
#[non_exhaustive]
pub struct Extracted<K> { pub key: K, pub orientation: Orientation, pub l4: Option<L4Proto>, pub tcp: Option<TcpInfo>, pub l4_meta: Option<L4Meta>, }
Expand description

Result of extracting one packet.

key identifies the flow. orientation says whether view was in the canonical direction or reversed. l4, tcp and l4_meta carry pre-parsed protocol data that the tracker, the reassemblers and the session engines reuse without re-parsing.

Offsets in tcp and l4_meta are relative to the frame the outermost extractor was called with — decap combinators (crate::extract::InnerVxlan, …) rebase the inner extractor’s offsets with Extracted::rebased, so the tracker can slice the original frame.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§key: K

The flow this packet belongs to.

§orientation: Orientation

Orientation of this packet relative to the canonical form of key. Forward if the natural src→dst direction matches the key’s a→b ordering; Reverse if the extractor swapped to canonicalize.

The tracker translates this into crate::FlowSide (Initiator / Responder) based on which orientation it saw first.

§l4: Option<L4Proto>

L4 protocol if the extractor identified one. Drives the tracker’s choice of timeout and whether to engage TCP state.

§tcp: Option<TcpInfo>

Pre-parsed TCP info for TCP packets. If Some, the tracker runs the TCP state machine without re-parsing; if None, TCP-specific events (Established, history string) won’t fire for this flow.

Built-in extractors fill this for ~zero extra cost; custom extractors that don’t care about TCP can leave it None.

§l4_meta: Option<L4Meta>

Ports and L4 payload location, when known. The session engines use it for port-based slot selection and to hand datagram parsers their payload without re-parsing the frame. None makes them fall back to parsing the frame as plain Ethernet (wrong for tunnelled traffic). Built-in extractors fill it. New in 0.25.0.

Implementations§

Source§

impl<K> Extracted<K>

Source

pub fn new( key: K, orientation: Orientation, l4: Option<L4Proto>, tcp: Option<TcpInfo>, ) -> Self

Construct an extraction result (no L4Meta; add it with Self::with_l4_meta).

Source

pub fn with_l4_meta(self, meta: L4Meta) -> Self

Attach ports / L4 payload location. New in 0.25.0.

Source

pub fn rebased(self, delta: isize) -> Self

Shift every frame offset (tcp.payload_offset, l4_meta.payload_offset) by delta bytes. Decap combinators call this to translate offsets from the inner (or synthetic) frame they handed their inner extractor into offsets in the frame they were given. An offset that would become negative drops the TCP payload / L4 meta rather than pointing at the wrong bytes. New in 0.25.0.

Trait Implementations§

Source§

impl<K: Clone> Clone for Extracted<K>

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<K: Debug> Debug for Extracted<K>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<K> Freeze for Extracted<K>
where K: Freeze,

§

impl<K> RefUnwindSafe for Extracted<K>
where K: RefUnwindSafe,

§

impl<K> Send for Extracted<K>
where K: Send,

§

impl<K> Sync for Extracted<K>
where K: Sync,

§

impl<K> Unpin for Extracted<K>
where K: Unpin,

§

impl<K> UnsafeUnpin for Extracted<K>
where K: UnsafeUnpin,

§

impl<K> UnwindSafe for Extracted<K>
where K: UnwindSafe,

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> 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