Skip to main content

Icmpv4Hdr

Struct Icmpv4Hdr 

Source
#[repr(C)]
pub struct Icmpv4Hdr { pub type_: u8, pub code: u8, pub check: [u8; 2], pub data: [u8; 4], }
Expand description

Represents an ICMP header as defined in RFC 792. The header consists of a type and code field identifying the message type, a checksum for error detection, and a data field whose format depends on the message type.

The type_ field identifies the general category of message, such as:

  • 0: Echo Reply
  • 3: Destination Unreachable
  • 5: Redirect
  • 8: Echo Request
  • 30: Traceroute
  • 40: PHOTURIS

The code field provides additional context for the message type.

The check field contains a checksum calculated over the ICMP header and its payload.

The data field contains type-specific data such as echo identifiers/sequence numbers, redirect gateway addresses, or pointers to errors in received packets.

Fields§

§type_: u8§code: u8§check: [u8; 2]§data: [u8; 4]

Implementations§

Source§

impl Icmpv4Hdr

Source

pub const LEN: usize

Source

pub fn icmp_type(&self) -> Result<Icmpv4Type, IcmpError>

Source

pub fn checksum(&self) -> u16

Returns the ICMP header checksum value in host byte order. This field is used to detect data corruption in the ICMP header and payload.

Source

pub fn set_checksum(&mut self, checksum: u16)

Sets the ICMP header checksum field to the given value. The checksum value should be calculated over the entire ICMP message (header and payload) according to RFC 792. The value will be stored in network byte order.

Source

pub fn data(&self) -> Result<Icmpv4HdrData<'_>, IcmpError>

Returns a type-safe view over the data bytes based on the ICMPv4 type.

Source

pub fn data_mut(&mut self) -> Result<Icmpv4HdrDataMut<'_>, IcmpError>

Returns a mutable type-safe view over the data bytes based on the ICMPv4 type.

Source§

impl Icmpv4Hdr

These are the unsafe alternatives to the safe functions on IcmpHdr that do prevent undefined behavior.

Source

pub unsafe fn id_sequence_unchecked(&self) -> &IcmpIdSequence

Returns a reference to the ID and sequence fields. Only valid for ICMP Types: 0, 8, 13, 14, 15, 16, 17, 18, 37, 38.

§Safety

Caller must ensure that the ICMP type is one of: 0, 8, 13, 14, 15, 16, 17, 18, 37, 38 before calling this function. Calling this method with other ICMP types may result in undefined behavior.

Source

pub unsafe fn id_sequence_mut_unchecked(&mut self) -> &mut IcmpIdSequence

Returns a mutable reference to the ID and sequence fields. Only valid for ICMP Types: 0, 8, 13, 14, 15, 16, 17, 18, 37, 38.

§Safety

Caller must ensure that the ICMP type is one of: 0, 8, 13, 14, 15, 16, 17, 18, 37, 38 before calling this function. Calling this method with other ICMP types may result in undefined behavior.

Source

pub unsafe fn redirect_unchecked(&self) -> &Icmpv4Redirect

Returns a reference to the Redirect message payload (Type 5).

§Safety

Caller must ensure ICMP type is 5 (Redirect) before calling this function.

Source

pub unsafe fn redirect_mut_unchecked(&mut self) -> &mut Icmpv4Redirect

Returns a mutable reference to the Redirect message payload (Type 5).

§Safety

Caller must ensure ICMP type is 5 (Redirect) before calling this function.

Source

pub unsafe fn destination_unreachable_unchecked(&self) -> &IcmpDstUnreachable

Returns a reference to the Destination Unreachable message. Used for Path MTU Discovery (RFC 1191).

§Safety

Caller must ensure ICMP type is 3 (Destination Unreachable) before calling this function. Accessing the dst_unreachable field with other ICMP types may result in undefined behavior.

Source

pub unsafe fn destination_unreachable_mut_unchecked( &mut self, ) -> &mut IcmpDstUnreachable

Returns a mutable reference to the Destination Unreachable message. Used for Path MTU Discovery (RFC 1191).

§Safety

Caller must ensure ICMP type is 3 (Destination Unreachable) before calling this function. Accessing the dst_unreachable field with other ICMP types may result in undefined behavior.

Source

pub unsafe fn parameter_problem_unchecked(&self) -> &Icmpv4ParamProblem

Returns a reference to the Parameter Problem message (Type 12)

§Safety

Caller must ensure ICMP type is 12 (Parameter Problem) before calling this function. Accessing the param_problem field with other ICMP types may result in undefined behavior.

Source

pub unsafe fn parameter_problem_mut_unchecked( &mut self, ) -> &mut Icmpv4ParamProblem

Returns a reference to the Parameter Problem message (Type 12)

§Safety

Caller must ensure ICMP type is 12 (Parameter Problem) before calling this function. Accessing the param_problem field with other ICMP types may result in undefined behavior.

Source

pub unsafe fn traceroute_unchecked(&self) -> &IcmpTraceroute

Returns a reference the Traceroute message (Type 30). This is only valid for ICMP Type 30 (Traceroute Request).

§Safety

Caller must ensure ICMP type is 30 (Traceroute Request) before calling this function. Accessing the traceroute field with other ICMP types may result in undefined behavior.

Source

pub unsafe fn traceroute_mut_unchecked(&mut self) -> &mut IcmpTraceroute

Returns a mutable reference the Traceroute message (Type 30). This is only valid for ICMP Type 30 (Traceroute Request).

§Safety

Caller must ensure ICMP type is 30 (Traceroute Request) before calling this function. Accessing the traceroute field with other ICMP types may result in undefined behavior.

Source

pub unsafe fn photuris_unchecked(&self) -> &IcmpHdrPhoturis

Returns a reference to the PHOTURIS message (Type 40).

§Safety

Caller must ensure ICMP type is 40 (PHOTURIS) before calling this function. Accessing the photuris field with other ICMP types may result in undefined behavior.

Source

pub unsafe fn photuris_mut_unchecked(&mut self) -> &mut IcmpHdrPhoturis

Returns a mutable reference to the PHOTURIS message (Type 40).

§Safety

Caller must ensure ICMP type is 40 (PHOTURIS) before calling this function. Accessing the photuris field with other ICMP types may result in undefined behavior.

Trait Implementations§

Source§

impl Clone for Icmpv4Hdr

Source§

fn clone(&self) -> Icmpv4Hdr

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Icmpv4Hdr

Source§

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

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

impl<'de, WincodeConfig: Config> SchemaRead<'de, WincodeConfig> for Icmpv4Hdr

Source§

const TYPE_META: TypeMeta

Metadata about the type’s serialization. Read more
Source§

type Dst = Icmpv4Hdr

Source§

fn read( reader: impl Reader<'de>, dst: &mut MaybeUninit<Self::Dst>, ) -> ReadResult<()>

Read into dst from reader. Read more
Source§

fn get(reader: impl Reader<'de>) -> Result<Self::Dst, ReadError>

Read Self::Dst from reader into a new Self::Dst.
Source§

impl<WincodeConfig: Config> SchemaWrite<WincodeConfig> for Icmpv4Hdr

Source§

const TYPE_META: TypeMeta

Metadata about the type’s serialization. Read more
Source§

type Src = Icmpv4Hdr

Source§

fn size_of(src: &Self::Src) -> WriteResult<usize>

Get the serialized size of Self::Src. Read more
Source§

fn write(writer: impl Writer, src: &Self::Src) -> WriteResult<()>

Write Self::Src to writer.
Source§

impl<WincodeConfig: Config> ZeroCopy<WincodeConfig> for Icmpv4Hdr
where for<'_wincode_internal, '_wincode_internal> u8: ZeroCopy<WincodeConfig>, for<'_wincode_internal> [u8; 2]: ZeroCopy<WincodeConfig>, for<'_wincode_internal> [u8; 4]: ZeroCopy<WincodeConfig>, for<'_wincode_internal> Assert<{ _ }>: IsTrue,

Source§

fn from_bytes<'de>(bytes: &'de [u8], config: C) -> Result<&'de Self, ReadError>
where Self: Sized + SchemaRead<'de, C, Dst = Self>,

Like crate::ZeroCopy::from_bytes, but allows the caller to provide a custom configuration.
Source§

fn from_bytes_mut<'de>( bytes: &'de mut [u8], config: C, ) -> Result<&'de mut Self, ReadError>
where Self: Sized + SchemaRead<'de, C, Dst = Self>,

Like crate::ZeroCopy::from_bytes_mut, but allows the caller to provide a custom configuration.
Source§

impl Copy for Icmpv4Hdr

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

Source§

fn deserialize(src: &'de [u8]) -> Result<Self::Dst, ReadError>

Deserialize the input src bytes into a new Self::Dst.
Source§

fn deserialize_into( src: &'de [u8], dst: &mut MaybeUninit<Self::Dst>, ) -> Result<(), ReadError>

Deserialize the input src bytes into dst.
Source§

impl<'de, T, C> Deserialize<'de, C> for T
where C: Config, T: SchemaRead<'de, C>,

Source§

fn deserialize(src: &'de [u8], config: C) -> Result<Self::Dst, ReadError>

Deserialize the input bytes into a new Self::Dst.
Source§

fn deserialize_into( src: &'de [u8], dst: &mut MaybeUninit<Self::Dst>, config: C, ) -> Result<(), ReadError>

Deserialize the input bytes into dst.
Source§

impl<T, C> DeserializeOwned<C> for T
where C: Config, T: SchemaReadOwned<C>,

Source§

fn deserialize_from<'de>(src: impl Reader<'de>) -> Result<Self::Dst, ReadError>

Deserialize from the given Reader into a new Self::Dst.
Source§

fn deserialize_from_into<'de>( src: impl Reader<'de>, dst: &mut MaybeUninit<Self::Dst>, ) -> Result<(), ReadError>

Deserialize from the given Reader into dst.
Source§

impl<T> DeserializeOwned for T

Source§

fn deserialize_from<'de>(src: impl Reader<'de>) -> Result<Self::Dst, ReadError>

Deserialize from the given Reader into a new Self::Dst.
Source§

fn deserialize_from_into<'de>( src: impl Reader<'de>, dst: &mut MaybeUninit<Self::Dst>, ) -> Result<(), ReadError>

Deserialize from the given Reader into dst.
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, C> Serialize<C> for T
where C: Config, T: SchemaWrite<C> + ?Sized,

Source§

fn serialize_into( dst: impl Writer, src: &Self::Src, config: C, ) -> Result<(), WriteError>

Serialize a serializable type into the given Writer.
Source§

fn serialized_size(src: &Self::Src, config: C) -> Result<u64, WriteError>

Get the size in bytes of the type when serialized.
Source§

impl<T> Serialize for T

Source§

fn serialize_into(dst: impl Writer, src: &Self::Src) -> Result<(), WriteError>

Serialize a serializable type into the given byte buffer.
Source§

fn serialized_size(src: &Self::Src) -> Result<u64, WriteError>

Get the size in bytes of the type when serialized.
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<T> ZeroCopy for T

Source§

fn from_bytes<'de>(bytes: &'de [u8]) -> Result<&'de Self, ReadError>
where Self: Sized + SchemaRead<'de, Configuration, Dst = Self>,

Get a reference to a type from the given bytes. Read more
Source§

fn from_bytes_mut<'de>(bytes: &'de mut [u8]) -> Result<&'de mut Self, ReadError>
where Self: Sized + SchemaRead<'de, Configuration, Dst = Self>,

Get a mutable reference to a type from the given bytes. Read more
Source§

impl<T, C> SchemaReadOwned<C> for T
where C: ConfigCore, T: for<'de> SchemaRead<'de, C>,