Skip to main content

Ipv6PacketRaw

Struct Ipv6PacketRaw 

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

Source

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>

Source

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.

Source

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.

Source

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>

Source

pub fn set_src_ip(&mut self, addr: Ipv6Addr)

Set the source IP address.

Source

pub fn set_dst_ip(&mut self, addr: Ipv6Addr)

Set the destination IP address.

Source

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>

Source§

type Error = Ipv6ParseError

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

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

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

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 Ipv6PacketRaw<B>

Source§

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

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

impl<B: SplitByteSlice> IpPacketRaw<B, Ipv6> for Ipv6PacketRaw<B>

Source§

impl<B: SplitByteSlice> Ipv6Header for Ipv6PacketRaw<B>

Source§

fn get_fixed_header(&self) -> &FixedHeader

Gets a reference to the IPv6 FixedHeader.
Source§

fn hop_limit(&self) -> u8

The Hop Limit.
Source§

fn next_header(&self) -> u8

The Next Header.
Source§

fn src_ip(&self) -> Ipv6Addr

The source IP address.
Source§

fn dst_ip(&self) -> Ipv6Addr

The destination IP address.
Source§

fn dscp_and_ecn(&self) -> DscpAndEcn

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

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

Source§

type Error = Ipv6ParseError

The type of errors returned from parse and parse_mut.
Source§

fn parse<BV: BufferView<B>>(buffer: BV, _args: ()) -> Result<Self, Self::Error>

Parses a packet from a buffer. Read more
Source§

fn parse_metadata(&self) -> ParseMetadata

Gets metadata about this packet required by GrowBuffer::undo_parse. Read more
Source§

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

Parses a packet from a mutable buffer. Read more

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>

§

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>

§

impl<B> UnwindSafe for Ipv6PacketRaw<B>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.