pub struct IcmpPacket<I: IcmpIpExt, B: ByteSlice, M: IcmpMessage<I>> { /* private fields */ }
Expand description

An ICMP packet.

An IcmpPacket shares its underlying memory with the byte slice it was parsed from, meaning that no copying or extra allocation is necessary.

Implementations§

source§

impl<I: IcmpIpExt, B: ByteSlice, M: IcmpMessage<I>> IcmpPacket<I, B, M>

source

pub fn message(&self) -> &M

Get the ICMP message.

source

pub fn body(&self) -> &M::Body<B>

Get the ICMP body.

source

pub fn code(&self) -> M::Code

Get the ICMP message code.

The code provides extra details about the message. Each message type has its own set of codes that are allowed.

source

pub fn builder( &self, src_ip: I::Addr, dst_ip: I::Addr ) -> IcmpPacketBuilder<I, M>

Construct a builder with the same contents as this packet.

source§

impl<I: IcmpIpExt, B: ByteSlice, M: IcmpMessage<I, Body<B> = OriginalPacket<B>>> IcmpPacket<I, B, M>

source

pub fn original_packet_body(&self) -> &[u8]

Get the body of the packet that caused this ICMP message.

This ICMP message contains some of the bytes of the packet that caused this message to be emitted. original_packet_body returns as much of the body of that packet as is contained in this message. For IPv4, this is guaranteed to be 8 bytes. For IPv6, there are no guarantees about the length.

source

pub fn original_packet(&self) -> &OriginalPacket<B>

Returns the original packt that caused this ICMP message.

This ICMP message contains some of the bytes of the packet that caused this message to be emitted. original_packet returns as much of the body of that packet as is contained in this message. For IPv4, this is guaranteed to be 8 bytes. For IPv6, there are no guarantees about the length.

source§

impl<B: ByteSlice, M: IcmpMessage<Ipv4, Body<B> = OriginalPacket<B>>> IcmpPacket<Ipv4, B, M>

source

pub fn with_original_packet<O, F: FnOnce(Result<Ipv4PacketRaw<&[u8]>, &[u8]>) -> O>( &self, f: F ) -> O

Attempt to partially parse the original packet as an IPv4 packet.

f will be invoked on the result of calling Ipv4PacketRaw::parse on the original packet.

source§

impl<B: ByteSlice, M: IcmpMessage<Ipv6, Body<B> = OriginalPacket<B>>> IcmpPacket<Ipv6, B, M>

source

pub fn with_original_packet<O, F: FnOnce(Result<Ipv6PacketRaw<&[u8]>, &[u8]>) -> O>( &self, f: F ) -> O

Attempt to partially parse the original packet as an IPv6 packet.

f will be invoked on the result of calling Ipv6PacketRaw::parse on the original packet.

source§

impl<I: IcmpIpExt, B: ByteSlice, M: IcmpMessage<I, Body<B> = Options<B>>> IcmpPacket<I, B, M>

source

pub fn ndp_options(&self) -> &Options<B>

Get the pared list of NDP options from the ICMP message.

Trait Implementations§

source§

impl<I: Debug + IcmpIpExt, B: Debug + ByteSlice, M: Debug + IcmpMessage<I>> Debug for IcmpPacket<I, B, M>
where M::Body<B>: Debug,

source§

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

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

impl<B: ByteSlice, I: IcmpIpExt, M: IcmpMessage<I>> FromRaw<IcmpPacketRaw<I, B, M>, IcmpParseArgs<<I as Ip>::Addr>> for IcmpPacket<I, B, M>

§

type Error = ParseError

The type of error that may happen during validation.
source§

fn try_from_raw_with( raw: IcmpPacketRaw<I, B, M>, args: IcmpParseArgs<I::Addr> ) -> ParseResult<Self>

Attempts to create Self from the raw form in raw with args.
source§

impl<B: ByteSlice, I: IcmpIpExt, M: IcmpMessage<I>> ParsablePacket<B, IcmpParseArgs<<I as Ip>::Addr>> for IcmpPacket<I, B, M>

§

type Error = ParseError

The type of errors returned from parse and parse_mut.
source§

fn parse_metadata(&self) -> ParseMetadata

Gets metadata about this packet required by [GrowBuffer::undo_parse]. Read more
source§

fn parse<BV: BufferView<B>>( buffer: BV, args: IcmpParseArgs<I::Addr> ) -> ParseResult<Self>

Parses a packet from a buffer. Read more

Auto Trait Implementations§

§

impl<I, B, M> Freeze for IcmpPacket<I, B, M>
where M: Unaligned + NoCell + IntoBytes + FromBytes + FromZeros + Copy + Clone, B: ByteSliceSealed + Deref<Target = [u8]> + Freeze, I: IpProtoExt + Ip + Sealed + Sync + Send + PartialOrd + PartialEq + Ord + Hash + Eq + Default + Debug + Copy + Clone + 'static, <M as IcmpMessage<I>>::Body<B>: Freeze,

§

impl<I, B, M> RefUnwindSafe for IcmpPacket<I, B, M>
where M: Unaligned + NoCell + IntoBytes + FromBytes + FromZeros + Copy + Clone + RefUnwindSafe, B: ByteSliceSealed + Deref<Target = [u8]> + RefUnwindSafe, I: IpProtoExt + Ip + Sealed + Sync + Send + PartialOrd + PartialEq + Ord + Hash + Eq + Default + Debug + Copy + Clone + 'static + RefUnwindSafe, <M as IcmpMessage<I>>::Body<B>: RefUnwindSafe,

§

impl<I, B, M> Send for IcmpPacket<I, B, M>
where M: Unaligned + NoCell + IntoBytes + FromBytes + FromZeros + Copy + Clone + Send, B: ByteSliceSealed + Deref<Target = [u8]> + Send, I: IpProtoExt + Ip + Sealed + Sync + Send + PartialOrd + PartialEq + Ord + Hash + Eq + Default + Debug + Copy + Clone + 'static, <M as IcmpMessage<I>>::Body<B>: Send,

§

impl<I, B, M> Sync for IcmpPacket<I, B, M>
where M: Unaligned + NoCell + IntoBytes + FromBytes + FromZeros + Copy + Clone + Sync, B: ByteSliceSealed + Deref<Target = [u8]> + Sync, I: IpProtoExt + Ip + Sealed + Sync + Send + PartialOrd + PartialEq + Ord + Hash + Eq + Default + Debug + Copy + Clone + 'static, <M as IcmpMessage<I>>::Body<B>: Sync,

§

impl<I, B, M> Unpin for IcmpPacket<I, B, M>
where M: Unaligned + NoCell + IntoBytes + FromBytes + FromZeros + Copy + Clone + Unpin, B: ByteSliceSealed + Deref<Target = [u8]> + Unpin, I: IpProtoExt + Ip + Sealed + Sync + Send + PartialOrd + PartialEq + Ord + Hash + Eq + Default + Debug + Copy + Clone + 'static + Unpin, <M as IcmpMessage<I>>::Body<B>: Unpin,

§

impl<I, B, M> UnwindSafe for IcmpPacket<I, B, M>
where M: Unaligned + NoCell + IntoBytes + FromBytes + FromZeros + Copy + Clone + UnwindSafe, B: ByteSliceSealed + Deref<Target = [u8]> + UnwindSafe, I: IpProtoExt + Ip + Sealed + Sync + Send + PartialOrd + PartialEq + Ord + Hash + Eq + Default + Debug + Copy + Clone + 'static + UnwindSafe, <M as IcmpMessage<I>>::Body<B>: 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<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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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, U> TryFrom<U> for T
where U: Into<T>,

§

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

§

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

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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