Struct packet_formats::ipv4::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: ByteSlice> Ipv4Packet<B>
impl<B: ByteSlice> Ipv4Packet<B>
sourcepub fn iter_options(&self) -> impl Iterator<Item = Ipv4Option<'_>>
pub fn iter_options(&self) -> impl Iterator<Item = Ipv4Option<'_>>
Iterate over the IPv4 header options.
sourcepub fn header_len(&self) -> usize
pub fn header_len(&self) -> usize
The size of the header prefix and options.
sourcepub fn copy_header_bytes_for_fragment(&self) -> Vec<u8>
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.
sourcepub fn builder(&self) -> Ipv4PacketBuilder
pub fn builder(&self) -> Ipv4PacketBuilder
Construct a builder with the same contents as this packet.
sourcepub fn nat64_translate(
&self,
v6_src_addr: Ipv6Addr,
v6_dst_addr: Ipv6Addr
) -> Nat64TranslationResult<impl Serializer<Buffer = EmptyBuf> + Debug + '_, Nat64Error>
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.
Trait Implementations§
source§impl<B> Debug for Ipv4Packet<B>where
B: ByteSlice,
impl<B> Debug for Ipv4Packet<B>where
B: ByteSlice,
source§impl<B: ByteSlice> FromRaw<Ipv4PacketRaw<B>, ()> for Ipv4Packet<B>
impl<B: ByteSlice> FromRaw<Ipv4PacketRaw<B>, ()> for Ipv4Packet<B>
§type Error = IpParseError<Ipv4>
type Error = IpParseError<Ipv4>
source§fn try_from_raw_with(
raw: Ipv4PacketRaw<B>,
_args: ()
) -> Result<Self, Self::Error>
fn try_from_raw_with( raw: Ipv4PacketRaw<B>, _args: () ) -> Result<Self, Self::Error>
Self
from the raw form in raw
with args
.source§impl<B: ByteSlice> IpPacket<B, Ipv4> for Ipv4Packet<B>
impl<B: ByteSlice> IpPacket<B, Ipv4> for Ipv4Packet<B>
§type Builder = Ipv4PacketBuilder
type Builder = Ipv4PacketBuilder
§type VersionSpecificMeta = Ipv4OnlyMeta
type VersionSpecificMeta = Ipv4OnlyMeta
source§fn set_ttl(&mut self, ttl: u8)where
B: ByteSliceMut,
fn set_ttl(&mut self, ttl: u8)where
B: ByteSliceMut,
source§fn version_specific_meta(&self) -> Ipv4OnlyMeta
fn version_specific_meta(&self) -> Ipv4OnlyMeta
source§fn as_ip_addr_ref(&self) -> IpAddr<&Self, &Ipv6Packet<B>>
fn as_ip_addr_ref(&self) -> IpAddr<&Self, &Ipv6Packet<B>>
source§fn reassemble_fragmented_packet<BV: BufferViewMut<B>, IT: Iterator<Item = Vec<u8>>>(
buffer: BV,
header: Vec<u8>,
body_fragments: IT
) -> IpParseResult<Ipv4, Ipv4Packet<B>>where
B: ByteSliceMut,
fn reassemble_fragmented_packet<BV: BufferViewMut<B>, IT: Iterator<Item = Vec<u8>>>(
buffer: BV,
header: Vec<u8>,
body_fragments: IT
) -> IpParseResult<Ipv4, Ipv4Packet<B>>where
B: ByteSliceMut,
source§impl<B: ByteSlice> Ipv4Header for Ipv4Packet<B>
impl<B: ByteSlice> Ipv4Header for Ipv4Packet<B>
source§fn get_header_prefix(&self) -> &HeaderPrefix
fn get_header_prefix(&self) -> &HeaderPrefix
HeaderPrefix
.source§fn fragment_offset(&self) -> u16
fn fragment_offset(&self) -> u16
source§fn fragment_type(&self) -> Ipv4FragmentType
fn fragment_type(&self) -> Ipv4FragmentType
source§impl<B: ByteSlice> ParsablePacket<B, ()> for Ipv4Packet<B>
impl<B: ByteSlice> ParsablePacket<B, ()> for Ipv4Packet<B>
source§fn parse_metadata(&self) -> ParseMetadata
fn parse_metadata(&self) -> ParseMetadata
GrowBuffer::undo_parse
]. Read more