packet_formats::ipv6

Struct Ipv6Packet

Source
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: SplitByteSlice> 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 dscp_and_ecn(&self) -> DscpAndEcn

The Differentiated Services Code Point (DSCP) and 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

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

Copies the packet (Header + Extensions + Body) into a Vec.

Source§

impl<B: SplitByteSliceMut> Ipv6Packet<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_hop_limit(&mut self, hlim: u8)

Set the hop limit.

Source

pub fn body_mut(&mut self) -> &mut [u8]

The packet body.

Trait Implementations§

Source§

impl<B: SplitByteSlice> 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: SplitByteSlice> FromRaw<Ipv6PacketRaw<B>, ()> for Ipv6Packet<B>

Source§

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

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

Source§

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

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

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

Source§

type Builder = Ipv6PacketBuilder

A builder for this packet type.
Source§

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 dscp_and_ecn(&self) -> DscpAndEcn

The Differentiated Services Code Point (DSCP) and the Explicit Congestion Notification (ECN).
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: SplitByteSliceMut,

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, ()>
where B: SplitByteSliceMut,

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

fn to_vec(&self) -> Vec<u8>

Copies the full packet into a Vec.
Source§

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

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

impl<B: SplitByteSlice> 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§

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

Source§

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
§

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

Parses a packet from a mutable 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.

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

Source§

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

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.