packet_formats::ipv4

Struct Ipv4Packet

Source
pub struct Ipv4Packet<B> { /* private fields */ }
Expand description

An IPv4 packet.

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

An Ipv4Packet - whether parsed using parse or created using Ipv4PacketBuilder - maintains the invariant that the checksum is always valid.

Implementations§

Source§

impl<B: SplitByteSlice> Ipv4Packet<B>

Source

pub fn iter_options(&self) -> impl Iterator<Item = Ipv4Option<'_>>

Iterate over the IPv4 header options.

Source

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

The packet body.

Source

pub fn header_len(&self) -> usize

The size of the header prefix and options.

Source

pub fn copy_header_bytes_for_fragment(&self) -> Vec<u8>

Return a buffer that is a copy of the header bytes in this packet, but patched to be not fragmented.

Return a buffer of this packet’s header and options with the fragment data zeroed out.

Source

pub fn nat64_translate( &self, v6_src_addr: Ipv6Addr, v6_dst_addr: Ipv6Addr, ) -> Nat64TranslationResult<impl Serializer<Buffer = EmptyBuf> + Debug + '_, Nat64Error>

Performs the header translation part of NAT64 as described in RFC 7915.

nat64_translate follows the rules described in RFC 7915 to construct the IPv6 equivalent of this IPv4 packet. If the payload is a TCP segment or a UDP packet, its checksum will be updated. If the payload is an ICMPv4 packet, it will be converted to the equivalent ICMPv6 packet. For all other payloads, the payload will be unchanged, and IP header will be translated. On success, a [Serializer] is returned which describes the new packet to be sent.

Note that the IPv4 TTL/IPv6 Hop Limit field is not modified. It is the caller’s responsibility to decrement and process this field per RFC 7915.

In some cases, the packet has no IPv6 equivalent, in which case the value Nat64TranslationResult::Drop will be returned, instructing the caller to silently drop the packet.

§Errors

nat64_translate will return an error if support has not yet been implemented for translation a particular IP protocol.

Source

pub fn to_vec(&self) -> Vec<u8>

Copies the packet (Header + Options + Body) into a Vec.

Source§

impl<B: SplitByteSliceMut> Ipv4Packet<B>

Source

pub fn set_src_ip_and_update_checksum(&mut self, addr: Ipv4Addr)

Set the source IP address.

Set the source IP address and update the header checksum accordingly.

Source

pub fn set_dst_ip_and_update_checksum(&mut self, addr: Ipv4Addr)

Set the destination IP address.

Set the destination IP address and update the header checksum accordingly.

Source

pub fn set_ttl(&mut self, ttl: u8)

Set the Time To Live (TTL).

Set the TTL and update the header checksum accordingly.

Source

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

The packet body.

Trait Implementations§

Source§

impl<B> Debug for Ipv4Packet<B>
where B: SplitByteSlice,

Source§

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

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

impl<B: SplitByteSlice> FromRaw<Ipv4PacketRaw<B>, ()> for Ipv4Packet<B>

Source§

type Error = IpParseError<Ipv4>

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

fn try_from_raw_with( raw: Ipv4PacketRaw<B>, _args: (), ) -> Result<Self, Self::Error>

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

fn try_from_raw(raw: R) -> Result<Self, Self::Error>
where Self: FromRaw<R, (), Error = Self::Error>,

Attempts to create Self from the raw form in raw.
Source§

impl<B: SplitByteSlice, I: IpExt> GenericOverIp<I> for Ipv4Packet<B>

Source§

type Type = <I as IpExt>::Packet<B>

The type of Self when its IP-generic parameter is replaced with the type NewIp.
Source§

impl<B: SplitByteSlice> IpPacket<B, Ipv4> for Ipv4Packet<B>

Source§

type Builder = Ipv4PacketBuilder

A builder for this packet type.
Source§

type VersionSpecificMeta = Ipv4OnlyMeta

Metadata which is only present in the packet format of a specific version of the IP protocol.
Source§

fn src_ip(&self) -> Ipv4Addr

The source IP address.
Source§

fn dst_ip(&self) -> Ipv4Addr

The destination IP address.
Source§

fn proto(&self) -> Ipv4Proto

The protocol number.
Source§

fn dscp_and_ecn(&self) -> DscpAndEcn

The Differentiated Services Code Point (DSCP) and the Explicit Congestion Notification (ECN).
Source§

fn ttl(&self) -> u8

The Time to Live (TTL) (IPv4) or Hop Limit (IPv6) field.
Source§

fn set_ttl(&mut self, ttl: u8)
where B: SplitByteSliceMut,

Set the Time to Live (TTL) (IPv4) or Hop Limit (IPv6) field. Read more
Source§

fn body(&self) -> &[u8]

Get the body.
Source§

fn version_specific_meta(&self) -> Ipv4OnlyMeta

Gets packet metadata relevant only for this version of the IP protocol.
Source§

fn as_ip_addr_ref(&self) -> IpAddr<&Self, &Ipv6Packet<B>>

Converts a packet reference into a dynamically-typed reference.
Source§

fn reassemble_fragmented_packet<BV: BufferViewMut<B>, IT: Iterator<Item = Vec<u8>>>( buffer: BV, header: Vec<u8>, body_fragments: IT, ) -> IpParseResult<Ipv4, ()>
where B: SplitByteSliceMut,

Reassembles a fragmented packet into a parsed IP packet.
Source§

fn to_vec(&self) -> Vec<u8>

Copies the full packet into a Vec.
Source§

fn into_metadata(self) -> (I::Addr, I::Addr, I::Proto, ParseMetadata)

Consume the packet and return some metadata. Read more
Source§

impl<B: SplitByteSlice> Ipv4Header for Ipv4Packet<B>

Source§

fn get_header_prefix(&self) -> &HeaderPrefix

Gets a reference to the IPv4 HeaderPrefix.
Source§

fn dscp_and_ecn(&self) -> DscpAndEcn

The Differentiated Services Code Point (DSCP) and the Explicit Congestion Notification (ECN).
Source§

fn id(&self) -> u16

The identification.
Source§

fn df_flag(&self) -> bool

The Don’t Fragment (DF) flag.
Source§

fn mf_flag(&self) -> bool

The More Fragments (MF) flag.
Source§

fn fragment_offset(&self) -> FragmentOffset

The fragment offset.
Source§

fn fragment_type(&self) -> Ipv4FragmentType

The fragment type. Read more
Source§

fn ttl(&self) -> u8

The Time To Live (TTL).
Source§

fn proto(&self) -> Ipv4Proto

The IP Protocol. Read more
Source§

fn src_ip(&self) -> Ipv4Addr

The source IP address.
Source§

fn dst_ip(&self) -> Ipv4Addr

The destination IP address.
Source§

fn builder(&self) -> Ipv4PacketBuilder

Construct a builder with the same contents as this header.
Source§

impl<B: SplitByteSlice> ParsablePacket<B, ()> for Ipv4Packet<B>

Source§

type Error = IpParseError<Ipv4>

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: ()) -> IpParseResult<Ipv4, Self>

Parses a packet from a buffer. Read more
§

fn parse_mut<BV>(buffer: BV, args: ParseArgs) -> Result<Self, Self::Error>
where BV: BufferViewMut<B>, B: SplitByteSliceMut,

Parses a packet from a mutable buffer. Read more

Auto Trait Implementations§

§

impl<B> Freeze for Ipv4Packet<B>
where B: Freeze,

§

impl<B> RefUnwindSafe for Ipv4Packet<B>
where B: RefUnwindSafe,

§

impl<B> Send for Ipv4Packet<B>
where B: Send,

§

impl<B> Sync for Ipv4Packet<B>
where B: Sync,

§

impl<B> Unpin for Ipv4Packet<B>
where B: Unpin,

§

impl<B> UnwindSafe for Ipv4Packet<B>
where 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.

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

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.