pub struct Ipv6Packet<B> { /* private fields */ }
Expand description

An IPv6 packet.

An Ipv6Packet shares its underlying memory with the byte slice it was parsed from or serialized to, meaning that no copying or extra allocation is necessary.

Implementations§

source§

impl<B: ByteSlice> Ipv6Packet<B>

source

pub fn iter_extension_hdrs( &self ) -> impl Iterator<Item = Ipv6ExtensionHeader<'_>>

Returns an iterator over the extension headers.

source

pub fn body(&self) -> &[u8]

The packet body.

source

pub fn ds(&self) -> u8

The Differentiated Services (DS) field.

source

pub fn ecn(&self) -> u8

The Explicit Congestion Notification (ECN).

source

pub fn flowlabel(&self) -> u32

The flow label.

source

pub fn proto(&self) -> Ipv6Proto

The Upper layer protocol for this packet.

This is found in the fixed header’s Next Header if there are no extension headers, or the Next Header value in the last extension header if there are. This also uses the same codes, encoded by the Rust type Ipv6Proto.

source

pub fn src_ipv6(&self) -> Option<Ipv6SourceAddr>

The source IP address represented as an Ipv6SourceAddr.

Unlike [IpHeader::src_ip], src_ipv6 returns an Ipv6SourceAddr, which represents the valid values that a source address can take (namely, a unicast or unspecified address) or None if the address is invalid (namely, a multicast address or an ipv4-mapped-ipv6 address).

source

pub fn copy_header_bytes_for_fragment(&self) -> Vec<u8>

Return a buffer that is a copy of the header bytes in this packet, including the fixed and extension headers, but without the first fragment extension header.

Note, if there are multiple fragment extension headers, only the first fragment extension header will be removed.

§Panics

Panics if there is no fragment extension header in this packet.

source

pub fn builder(&self) -> Ipv6PacketBuilder

Construct a builder with the same contents as this packet.

source

pub fn nat64_translate( &self, v4_src_addr: Ipv4Addr, v4_dst_addr: Ipv4Addr ) -> 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 IPv4 equivalent of this IPv6 packet. If the payload is a TCP segment or a UDP packet, its checksum will be updated. If the payload is an ICMPv6 packet, it will be converted to the equivalent ICMPv4 packet. For all other payloads, the payload will be unchanged, and the 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 IPv4 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 translating a particular IP protocol.

source§

impl<B: ByteSliceMut> Ipv6Packet<B>

source

pub fn set_hop_limit(&mut self, hlim: u8)

Set the hop limit.

Trait Implementations§

source§

impl<B: ByteSlice> Debug for Ipv6Packet<B>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl<B: ByteSlice> FromRaw<Ipv6PacketRaw<B>, ()> for Ipv6Packet<B>

§

type Error = IpParseError<Ipv6>

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§

impl<B: ByteSlice> IpPacket<B, Ipv6> for Ipv6Packet<B>

§

type Builder = Ipv6PacketBuilder

A builder for this packet type.
§

type VersionSpecificMeta = ()

Metadata which is only present in the packet format of a specific version of the IP protocol.
source§

fn src_ip(&self) -> Ipv6Addr

The source IP address.
source§

fn dst_ip(&self) -> Ipv6Addr

The destination IP address.
source§

fn proto(&self) -> Ipv6Proto

The protocol number.
source§

fn ttl(&self) -> u8

The Time to Live (TTL) (IPv4) or Hop Limit (IPv6) field.
source§

fn set_ttl(&mut self, ttl: u8)
where B: ByteSliceMut,

Set the Time to Live (TTL) (IPv4) or Hop Limit (IPv6) field. Read more
source§

fn body(&self) -> &[u8]

Get the body.
source§

fn version_specific_meta(&self)

Gets packet metadata relevant only for this version of the IP protocol.
source§

fn as_ip_addr_ref(&self) -> IpAddr<&Ipv4Packet<B>, &Self>

Converts a packet reference into a dynamically-typed reference.
source§

fn reassemble_fragmented_packet<BV: BufferViewMut<B>, IT: Iterator<Item = Vec<u8>>>( buffer: BV, header: Vec<u8>, body_fragments: IT ) -> IpParseResult<Ipv6, Ipv6Packet<B>>
where B: ByteSliceMut,

Reassembles a fragmented packet into a parsed IP packet.
source§

fn into_metadata(self) -> (I::Addr, I::Addr, I::Proto, ParseMetadata)

Consume the packet and return some metadata. Read more
source§

impl<B: ByteSlice> Ipv6Header for Ipv6Packet<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§

impl<B: ByteSlice> ParsablePacket<B, ()> for Ipv6Packet<B>

§

type Error = IpParseError<Ipv6>

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

fn parse_metadata(&self) -> ParseMetadata

Gets metadata about this packet required by [GrowBuffer::undo_parse]. Read more
source§

fn parse<BV: BufferView<B>>(buffer: BV, _args: ()) -> IpParseResult<Ipv6, Self>

Parses a packet from a buffer. Read more

Auto Trait Implementations§

§

impl<B> Freeze for Ipv6Packet<B>
where B: Freeze,

§

impl<B> RefUnwindSafe for Ipv6Packet<B>
where B: RefUnwindSafe,

§

impl<B> Send for Ipv6Packet<B>
where B: Send,

§

impl<B> Sync for Ipv6Packet<B>
where B: Sync,

§

impl<B> Unpin for Ipv6Packet<B>
where B: Unpin,

§

impl<B> UnwindSafe for Ipv6Packet<B>
where B: UnwindSafe,

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

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

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

§

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.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more