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.
Sourcepub fn set_ttl(&mut self, ttl: u8)
pub fn set_ttl(&mut self, ttl: u8)
Set the Time To Live (TTL).
Set the TTL and update the header checksum accordingly.
Sourcepub fn parts_with_body_mut(&mut self) -> (&HeaderPrefix, &Options<B>, &mut [u8])
pub fn parts_with_body_mut(&mut self) -> (&HeaderPrefix, &Options<B>, &mut [u8])
Provides simultaneous access to header prefix, options, and mutable body.
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§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,
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,
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
.Source§fn dscp_and_ecn(&self) -> DscpAndEcn
fn dscp_and_ecn(&self) -> DscpAndEcn
Source§fn fragment_offset(&self) -> FragmentOffset
fn fragment_offset(&self) -> FragmentOffset
Source§fn fragment_type(&self) -> Ipv4FragmentType
fn fragment_type(&self) -> Ipv4FragmentType
Source§fn builder(&self) -> Ipv4PacketBuilder
fn builder(&self) -> Ipv4PacketBuilder
Source§impl<B: SplitByteSlice> ParsablePacket<B, ()> for Ipv4Packet<B>
impl<B: SplitByteSlice> ParsablePacket<B, ()> for Ipv4Packet<B>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more