IPv4Packet

Struct IPv4Packet 

Source
pub struct IPv4Packet<'a, T: 'a> { /* private fields */ }
Expand description

Interprets the inner bytes as an IPv4 packet.

Implementations§

Source§

impl<T: NetworkBytes + Debug> IPv4Packet<'_, T>

Source

pub fn from_bytes_unchecked(bytes: T) -> Self

Interpret bytes as an IPv4Packet without checking the validity of the header fields, and the length of the inner byte sequence.

§Panics

This method does not panic, but further method calls on the resulting object may panic if bytes contains invalid input.

Source

pub fn from_bytes(bytes: T, verify_checksum: bool) -> Result<Self, Ipv4Error>

Attempts to interpret bytes as an IPv4 packet, checking the validity of the header fields and the length of the inner byte sequence.

Source

pub fn version_and_header_len(&self) -> (u8, u8)

Returns the value of the version header field, and the header length.

This method returns the actual length (in bytes) of the header, and not the value of the ihl header field).

Source

pub fn header_len(&self) -> u8

Returns the packet header length (in bytes).

Source

pub fn dscp_and_ecn(&self) -> (u8, u8)

Returns the values of the dscp and ecn header fields.

Source

pub fn total_len(&self) -> u16

Returns the value of the ‘total length’ header field.

Source

pub fn identification(&self) -> u16

Returns the value of the identification header field.

Source

pub fn flags_and_fragment_offset(&self) -> (u8, u16)

Returns the values of the flags and fragment offset header fields.

Source

pub fn ttl(&self) -> u8

Returns the value of the ttl header field.

Source

pub fn protocol(&self) -> u8

Returns the value of the protocol header field.

Source

pub fn header_checksum(&self) -> u16

Returns the value of the header checksum header field.

Source

pub fn source_address(&self) -> Ipv4Addr

Returns the source IPv4 address of the packet.

Source

pub fn destination_address(&self) -> Ipv4Addr

Returns the destination IPv4 address of the packet.

Source

pub fn payload_unchecked(&self, header_len: usize) -> &[u8]

Returns a byte slice containing the payload, using the given header length value to compute the payload offset.

§Panics

This method may panic if the value of header_len is invalid.

Source

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

Returns a byte slice that contains the payload of the packet.

Source

pub fn len(&self) -> usize

Returns the length of the inner byte sequence.

This is equal to the output of the total_len() method for properly constructed instances of IPv4Packet.

Source

pub fn compute_checksum_unchecked(&self, header_len: usize) -> u16

Computes and returns the packet header checksum using the provided header length.

A nice description of how this works can be found here. May panic for invalid values of header_len.

§Panics

This method may panic if the value of header_len is invalid.

Source

pub fn compute_checksum(&self) -> u16

Computes and returns the packet header checksum.

Source§

impl<T: NetworkBytesMut + Debug> IPv4Packet<'_, T>

Source

pub fn write_header( buf: T, protocol: u8, src_addr: Ipv4Addr, dst_addr: Ipv4Addr, ) -> Result<Incomplete<Self>, Ipv4Error>

Attempts to write an IPv4 packet header to buf, making sure there is enough space.

This method returns an incomplete packet, because the size of the payload might be unknown at this point. IP options are not allowed, which means header_len == OPTIONS_OFFSET. The dscp, ecn, identification, flags, and fragment_offset fields are set to 0. The ttl is set to a default value. The total_len and checksum fields will be set when the length of the incomplete packet is determined.

Source

pub fn set_version_and_header_len( &mut self, version: u8, header_len: u8, ) -> &mut Self

Sets the values of the version and ihl header fields (the latter is computed from the value of header_len).

Source

pub fn set_dscp_and_ecn(&mut self, dscp: u8, ecn: u8) -> &mut Self

Sets the values of the dscp and ecn header fields.

Source

pub fn set_total_len(&mut self, value: u16) -> &mut Self

Sets the value of the total length header field.

Source

pub fn set_identification(&mut self, value: u16) -> &mut Self

Sets the value of the identification header field.

Source

pub fn set_flags_and_fragment_offset( &mut self, flags: u8, fragment_offset: u16, ) -> &mut Self

Sets the values of the flags and fragment offset header fields.

Source

pub fn set_ttl(&mut self, value: u8) -> &mut Self

Sets the value of the ttl header field.

Source

pub fn set_protocol(&mut self, value: u8) -> &mut Self

Sets the value of the protocol header field.

Source

pub fn set_header_checksum(&mut self, value: u16) -> &mut Self

Sets the value of the header checksum header field.

Source

pub fn set_source_address(&mut self, addr: Ipv4Addr) -> &mut Self

Sets the source address of the packet.

Source

pub fn set_destination_address(&mut self, addr: Ipv4Addr) -> &mut Self

Sets the destination address of the packet.

Source

pub fn payload_mut_unchecked(&mut self, header_len: usize) -> &mut [u8]

Returns a mutable byte slice representing the payload of the packet, using the provided header length to compute the payload offset.

§Panics

This method may panic if the value of header_len is invalid.

Source

pub fn payload_mut(&mut self) -> &mut [u8]

Returns a mutable byte slice representing the payload of the packet.

Trait Implementations§

Source§

impl<'a, T: Debug + 'a> Debug for IPv4Packet<'a, T>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, T> Freeze for IPv4Packet<'a, T>
where T: Freeze,

§

impl<'a, T> RefUnwindSafe for IPv4Packet<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Send for IPv4Packet<'a, T>
where T: Send + Sync,

§

impl<'a, T> Sync for IPv4Packet<'a, T>
where T: Sync,

§

impl<'a, T> Unpin for IPv4Packet<'a, T>
where T: Unpin,

§

impl<'a, T> UnwindSafe for IPv4Packet<'a, T>

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> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Return the immutable any encapsulated object.
Source§

fn as_mut_any(&mut self) -> &mut (dyn Any + 'static)

Return the mutable encapsulated any object.
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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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.

§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V