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>
impl<B: SplitByteSlice> 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 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.
Source§impl<B: SplitByteSliceMut> Ipv4Packet<B>
impl<B: SplitByteSliceMut> Ipv4Packet<B>
Sourcepub fn set_src_ip_and_update_checksum(&mut self, addr: Ipv4Addr)
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.
Sourcepub fn set_dst_ip_and_update_checksum(&mut self, addr: Ipv4Addr)
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.
Trait Implementations§
Source§impl<B> Debug for Ipv4Packet<B>where
B: SplitByteSlice,
impl<B> Debug for Ipv4Packet<B>where
B: SplitByteSlice,
Source§impl<B: SplitByteSlice> FromRaw<Ipv4PacketRaw<B>, ()> for Ipv4Packet<B>
impl<B: SplitByteSlice> FromRaw<Ipv4PacketRaw<B>, ()> for Ipv4Packet<B>
Source§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
.§fn try_from_raw(raw: R) -> Result<Self, Self::Error>where
Self: FromRaw<R, (), Error = Self::Error>,
fn try_from_raw(raw: R) -> Result<Self, Self::Error>where
Self: FromRaw<R, (), Error = Self::Error>,
Self
from the raw form in raw
.Source§impl<B: SplitByteSlice, I: IpExt> GenericOverIp<I> for Ipv4Packet<B>
impl<B: SplitByteSlice, I: IpExt> GenericOverIp<I> for Ipv4Packet<B>
Source§impl<B: SplitByteSlice> IpPacket<B, Ipv4> for Ipv4Packet<B>
impl<B: SplitByteSlice> IpPacket<B, Ipv4> for Ipv4Packet<B>
Source§type Builder = Ipv4PacketBuilder
type Builder = Ipv4PacketBuilder
Source§type VersionSpecificMeta = Ipv4OnlyMeta
type VersionSpecificMeta = Ipv4OnlyMeta
Source§fn dscp_and_ecn(&self) -> DscpAndEcn
fn dscp_and_ecn(&self) -> DscpAndEcn
Source§fn set_ttl(&mut self, ttl: u8)where
B: SplitByteSliceMut,
fn set_ttl(&mut self, ttl: u8)where
B: SplitByteSliceMut,
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§impl<B: SplitByteSlice> Ipv4Header for Ipv4Packet<B>
impl<B: SplitByteSlice> Ipv4Header for Ipv4Packet<B>
Source§fn get_header_prefix(&self) -> &HeaderPrefix
fn get_header_prefix(&self) -> &HeaderPrefix
HeaderPrefix
.