pub struct Ipv6PacketRaw<B> { /* private fields */ }Expand description
A partially parsed and not yet validated IPv6 packet.
Ipv6PacketRaw provides minimal parsing of an IPv6 packet, namely
it only requires that the fixed header part ([HeaderPrefix]) be retrieved,
all the other parts of the packet may be missing when attempting to create
it.
Ipv6Packet provides a FromRaw implementation that can be used to
validate an Ipv6PacketRaw.
Implementations§
Source§impl<B> Ipv6PacketRaw<B>
impl<B> Ipv6PacketRaw<B>
Sourcepub fn body_mut(&mut self) -> Option<&mut B>
pub fn body_mut(&mut self) -> Option<&mut B>
Returns a mutable reference to the body bytes of this Ipv6PacketRaw.
Might not be complete if a full packet was not received.
Source§impl<B: SplitByteSlice> Ipv6PacketRaw<B>
impl<B: SplitByteSlice> Ipv6PacketRaw<B>
Sourcepub fn body_proto(
&self,
) -> Result<(MaybeParsed<&[u8], &[u8]>, Ipv6Proto), ExtHdrParseError>
pub fn body_proto( &self, ) -> Result<(MaybeParsed<&[u8], &[u8]>, Ipv6Proto), ExtHdrParseError>
Returns the body and upper-layer Protocol Number.
If extension headers failed to parse, body_proto returns
Err(ExtHdrParseError). Extension headers must be parsed in order to
find the bounds of the upper-layer payload and to find that last
extension header’s Next Header field, which is the Protocol Number of
the upper-layer payload.
Note that extension header parsing stops after the first Fragment header. For packets with a Fragment header, the returned body is the Fragmentable Part of the packet following the Fragment header, and the returned Protocol Number is the Fragment header’s Next Header value, which may not be an upper-layer protocol (e.g. it may identify another extension header).
The returned body will be MaybeParsed::Complete if all the body
bytes were consumed (as stated by the header’s payload length value) or
MaybeParsed::Incomplete containing the bytes that were present
otherwise.
Sourcepub fn body(&self) -> Result<MaybeParsed<&[u8], &[u8]>, ExtHdrParseError>
pub fn body(&self) -> Result<MaybeParsed<&[u8], &[u8]>, ExtHdrParseError>
Returns the body.
If extension headers failed to parse, body returns
Err(ExtHdrParseError). Extension headers must be parsed in order to
find the bounds of the upper-layer payload.
Note that for packets with a Fragment header, the returned body is the
Fragmentable Part of the packet following the Fragment header. See
Ipv6PacketRaw::body_proto for details.
The returned body will be MaybeParsed::Complete if all the body
bytes were consumed (as stated by the header’s payload length value) or
MaybeParsed::Incomplete containing the bytes that were present
otherwise.
Sourcepub fn proto(&self) -> Result<Ipv6Proto, ExtHdrParseError>
pub fn proto(&self) -> Result<Ipv6Proto, ExtHdrParseError>
Returns the upper-layer Protocol Number.
If extension headers failed to parse, body_proto returns
Err(ExtHdrParseError). Extension headers must be parsed in order to
find the last extension header’s Next Header field, which is the
Protocol Number of the upper-layer payload.
Note that for packets with a Fragment header, the returned Protocol
Number is the Fragment header’s Next Header value, which may not be an
upper-layer protocol. See Ipv6PacketRaw::body_proto for details.
Source§impl<B: SplitByteSliceMut> Ipv6PacketRaw<B>
impl<B: SplitByteSliceMut> Ipv6PacketRaw<B>
Sourcepub fn set_src_ip(&mut self, addr: Ipv6Addr)
pub fn set_src_ip(&mut self, addr: Ipv6Addr)
Set the source IP address.
Sourcepub fn set_dst_ip(&mut self, addr: Ipv6Addr)
pub fn set_dst_ip(&mut self, addr: Ipv6Addr)
Set the destination IP address.
Sourcepub fn set_payload_len(&mut self, payload_len: u16)
pub fn set_payload_len(&mut self, payload_len: u16)
Set the payload length of the IPv6 packet.
Trait Implementations§
Source§impl<B: SplitByteSlice> FromRaw<Ipv6PacketRaw<B>, ()> for Ipv6Packet<B>
impl<B: SplitByteSlice> FromRaw<Ipv6PacketRaw<B>, ()> for Ipv6Packet<B>
Source§type Error = Ipv6ParseError
type Error = Ipv6ParseError
Source§fn try_from_raw_with(
raw: Ipv6PacketRaw<B>,
_args: (),
) -> Result<Self, Self::Error>
fn try_from_raw_with( raw: Ipv6PacketRaw<B>, _args: (), ) -> Result<Self, Self::Error>
Self from the raw form in raw with args.Source§impl<B: SplitByteSlice, I: IpExt> GenericOverIp<I> for Ipv6PacketRaw<B>
impl<B: SplitByteSlice, I: IpExt> GenericOverIp<I> for Ipv6PacketRaw<B>
impl<B: SplitByteSlice> IpPacketRaw<B, Ipv6> for Ipv6PacketRaw<B>
Source§impl<B: SplitByteSlice> Ipv6Header for Ipv6PacketRaw<B>
impl<B: SplitByteSlice> Ipv6Header for Ipv6PacketRaw<B>
Source§fn get_fixed_header(&self) -> &FixedHeader
fn get_fixed_header(&self) -> &FixedHeader
FixedHeader.Source§fn next_header(&self) -> u8
fn next_header(&self) -> u8
Source§fn dscp_and_ecn(&self) -> DscpAndEcn
fn dscp_and_ecn(&self) -> DscpAndEcn
Source§impl<B: SplitByteSlice> ParsablePacket<B, ()> for Ipv6PacketRaw<B>
impl<B: SplitByteSlice> ParsablePacket<B, ()> for Ipv6PacketRaw<B>
Source§fn parse<BV: BufferView<B>>(buffer: BV, _args: ()) -> Result<Self, Self::Error>
fn parse<BV: BufferView<B>>(buffer: BV, _args: ()) -> Result<Self, Self::Error>
Source§fn parse_metadata(&self) -> ParseMetadata
fn parse_metadata(&self) -> ParseMetadata
GrowBuffer::undo_parse. Read moreSource§fn parse_mut<BV>(buffer: BV, args: ParseArgs) -> Result<Self, Self::Error>where
BV: BufferViewMut<B>,
B: SplitByteSliceMut,
fn parse_mut<BV>(buffer: BV, args: ParseArgs) -> Result<Self, Self::Error>where
BV: BufferViewMut<B>,
B: SplitByteSliceMut,
Auto Trait Implementations§
impl<B> Freeze for Ipv6PacketRaw<B>where
Ref<B, FixedHeader>: Freeze,
MaybeParsed<RecordsRaw<B, Ipv6ExtensionHeaderImpl>, B>: Freeze,
Result<(MaybeParsed<B, B>, Ipv6Proto), ExtHdrParseError>: Freeze,
impl<B> RefUnwindSafe for Ipv6PacketRaw<B>where
Ref<B, FixedHeader>: RefUnwindSafe,
MaybeParsed<RecordsRaw<B, Ipv6ExtensionHeaderImpl>, B>: RefUnwindSafe,
Result<(MaybeParsed<B, B>, Ipv6Proto), ExtHdrParseError>: RefUnwindSafe,
impl<B> Send for Ipv6PacketRaw<B>where
Ref<B, FixedHeader>: Send,
MaybeParsed<RecordsRaw<B, Ipv6ExtensionHeaderImpl>, B>: Send,
Result<(MaybeParsed<B, B>, Ipv6Proto), ExtHdrParseError>: Send,
impl<B> Sync for Ipv6PacketRaw<B>where
Ref<B, FixedHeader>: Sync,
MaybeParsed<RecordsRaw<B, Ipv6ExtensionHeaderImpl>, B>: Sync,
Result<(MaybeParsed<B, B>, Ipv6Proto), ExtHdrParseError>: Sync,
impl<B> Unpin for Ipv6PacketRaw<B>where
Ref<B, FixedHeader>: Unpin,
MaybeParsed<RecordsRaw<B, Ipv6ExtensionHeaderImpl>, B>: Unpin,
Result<(MaybeParsed<B, B>, Ipv6Proto), ExtHdrParseError>: Unpin,
impl<B> UnsafeUnpin for Ipv6PacketRaw<B>where
Ref<B, FixedHeader>: UnsafeUnpin,
MaybeParsed<RecordsRaw<B, Ipv6ExtensionHeaderImpl>, B>: UnsafeUnpin,
Result<(MaybeParsed<B, B>, Ipv6Proto), ExtHdrParseError>: UnsafeUnpin,
impl<B> UnwindSafe for Ipv6PacketRaw<B>where
Ref<B, FixedHeader>: UnwindSafe,
MaybeParsed<RecordsRaw<B, Ipv6ExtensionHeaderImpl>, B>: UnwindSafe,
Result<(MaybeParsed<B, B>, Ipv6Proto), ExtHdrParseError>: 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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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