Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
rte_ip6.h(3)			     DPDK			  rte_ip6.h(3)

NAME
       rte_ip6.h

SYNOPSIS
       #include	<stdint.h>
       #include	<string.h>
       #include	<sys/socket.h>
       #include	<sys/types.h>
       #include	<netinet/in.h>
       #include	<arpa/inet.h>
       #include	<netinet/ip6.h>
       #include	<rte_byteorder.h>
       #include	<rte_cksum.h>
       #include	<rte_ether.h>
       #include	<rte_mbuf.h>

   Data	Structures
       struct rte_ipv6_addr

   Macros
       #define RTE_IPV6_ADDR_SIZE   16
       #define RTE_IPV6_MAX_DEPTH   (RTE_IPV6_ADDR_SIZE	* CHAR_BIT)
       #define RTE_IPV6_U16_SPLIT(x)
       #define RTE_IPV6(a,  b,	c,  d,	e,  f,	g,  h)
       #define RTE_IPV6_ADDR_FMT
	     '%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x'
       #define RTE_IPV6_ADDR_SPLIT(ip)
       #define RTE_IPV6_MASK_FULL    RTE_IPV6(0xffff, 0xffff, 0xffff, 0xffff,
	   0xffff, 0xffff, 0xffff, 0xffff)
       #define RTE_IPV6_ADDR_UNSPEC   RTE_IPV6(0, 0, 0,	0, 0, 0, 0, 0)
       #define RTE_IPV6_ADDR_LOOPBACK	RTE_IPV6(0, 0, 0, 0, 0,	0, 0, 1)
       #define RTE_IPV6_MIN_MTU	  1280
       #define RTE_IPV6_EHDR_MF_SHIFT	0

       Well known multicast addresses

	   #define RTE_IPV6_ADDR_ALLNODES_IFACE_LOCAL	RTE_IPV6(0xff01, 0, 0,
	       0, 0, 0,	0, 1)
	   #define RTE_IPV6_ADDR_ALLNODES_LINK_LOCAL   RTE_IPV6(0xff02,	0, 0,
	       0, 0, 0,	0, 1)
	   #define RTE_IPV6_ADDR_ALLROUTERS_IFACE_LOCAL	  RTE_IPV6(0xff01, 0,
	       0, 0, 0,	0, 0, 2)
	   #define RTE_IPV6_ADDR_ALLROUTERS_LINK_LOCAL	 RTE_IPV6(0xff02, 0,
	       0, 0, 0,	0, 0, 2)
	   #define RTE_IPV6_ADDR_ALLROUTERS_SITE_LOCAL	 RTE_IPV6(0xff05, 0,
	       0, 0, 0,	0, 0, 2)

   Enumerations
       enum rte_ipv6_mc_scope {	RTE_IPV6_MC_SCOPE_NONE = 0x00,
	   RTE_IPV6_MC_SCOPE_IFACELOCAL	= 0x01,	RTE_IPV6_MC_SCOPE_LINKLOCAL =
	   0x02, RTE_IPV6_MC_SCOPE_SITELOCAL = 0x05,
	   RTE_IPV6_MC_SCOPE_ORGLOCAL =	0x08, RTE_IPV6_MC_SCOPE_GLOBAL = 0x0e
	   }

   Functions
       static bool rte_ipv6_addr_eq (const struct rte_ipv6_addr	*a, const
	   struct rte_ipv6_addr	*b)
       static void rte_ipv6_addr_mask (struct rte_ipv6_addr *ip, uint8_t
	   depth)
       static bool rte_ipv6_addr_eq_prefix (const struct rte_ipv6_addr *a,
	   const struct	rte_ipv6_addr *b, uint8_t depth)
       static uint8_t rte_ipv6_mask_depth (const struct	rte_ipv6_addr *mask)
       static bool rte_ipv6_addr_is_unspec (const struct rte_ipv6_addr *ip)
       static bool rte_ipv6_addr_is_loopback (const struct rte_ipv6_addr *ip)
       static bool rte_ipv6_addr_is_linklocal (const struct rte_ipv6_addr *ip)
       static bool rte_ipv6_addr_is_sitelocal (const struct rte_ipv6_addr *ip)
       static bool rte_ipv6_addr_is_v4compat (const struct rte_ipv6_addr *ip)
       static bool rte_ipv6_addr_is_v4mapped (const struct rte_ipv6_addr *ip)
       static bool rte_ipv6_addr_is_mcast (const struct	rte_ipv6_addr *ip)
       static enum rte_ipv6_mc_scope rte_ipv6_mc_scope (const struct
	   rte_ipv6_addr *ip)
       static void rte_ipv6_solnode_from_addr (struct rte_ipv6_addr *sol,
	   const struct	rte_ipv6_addr *ip)
       static void rte_ether_mcast_from_ipv6 (struct rte_ether_addr *mac,
	   const struct	rte_ipv6_addr *ip)
       struct __rte_aligned (2)	__rte_packed_begin rte_ipv6_hdr
       static int rte_ipv6_check_version (const	struct rte_ipv6_hdr *ip)
       static uint16_t rte_ipv6_phdr_cksum (const struct rte_ipv6_hdr
	   *ipv6_hdr, uint64_t ol_flags)
       static uint16_t rte_ipv6_udptcp_cksum (const struct rte_ipv6_hdr
	   *ipv6_hdr, const void *l4_hdr)
       static uint16_t rte_ipv6_udptcp_cksum_mbuf (const struct	rte_mbuf *m,
	   const struct	rte_ipv6_hdr *ipv6_hdr,	uint16_t l4_off)
       static int rte_ipv6_udptcp_cksum_verify (const struct rte_ipv6_hdr
	   *ipv6_hdr, const void *l4_hdr)
       static int rte_ipv6_udptcp_cksum_mbuf_verify (const struct rte_mbuf *m,
	   const struct	rte_ipv6_hdr *ipv6_hdr,	uint16_t l4_off)
       static int rte_ipv6_get_next_ext	(const uint8_t *p, int proto, size_t
	   *ext_len)

Detailed Description
       IPv6-related defines

       Definition in file rte_ip6.h.

Macro Definition Documentation
   #define RTE_IPV6_ADDR_SIZE	16
       Maximum IPv6 address size in bytes.

       Definition at line 43 of	file rte_ip6.h.

   #define RTE_IPV6_MAX_DEPTH	(RTE_IPV6_ADDR_SIZE * CHAR_BIT)
       Maximum IPv6 address size in bits.

       Definition at line 48 of	file rte_ip6.h.

   #define RTE_IPV6_U16_SPLIT(x)
       Value:.PP
	   (uint8_t)((uint16_t)(x) & UINT16_C(0xff)), \
	   (uint8_t)(((uint16_t)(x) >> 8) & UINT16_C(0xff))
       Split a literal 16 bit unsigned integer into two	bytes separated	by a
       comma according to the platform endianness.

       Parameters
	   x A uint16_t	literal	value.

       Returns
	   Two uint8_t literals	separated by a coma.

       Definition at line 162 of file rte_ip6.h.

   #define RTE_IPV6(a, b, c, d,	e, f, g, h)
       Value:.PP
	   {{ \
	       RTE_IPV6_U16_SPLIT(a), \
	       RTE_IPV6_U16_SPLIT(b), \
	       RTE_IPV6_U16_SPLIT(c), \
	       RTE_IPV6_U16_SPLIT(d), \
	       RTE_IPV6_U16_SPLIT(e), \
	       RTE_IPV6_U16_SPLIT(f), \
	       RTE_IPV6_U16_SPLIT(g), \
	       RTE_IPV6_U16_SPLIT(h) \
	   }}
       Shorthand to define a literal IPv6 address based	on 16bit unsigned
       integers.

       Parameters
	   a,b,c,d,e,f,g,h uint8_t literals that will be passed	to
	   RTE_IPV6_U16_SPLIT(x).

       Returns
	   A literal rte_ipv6_addr value suitable for static initialization.

       Definition at line 179 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_FMT
	 '%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x'

       printf()	format element for rte_ipv6_addr structures. To	be used	along
       with RTE_IPV6_ADDR_SPLIT(ip).

       Definition at line 195 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_SPLIT(ip)
       Value:.PP
	   ((uint8_t)(ip)->a[0]), \
	   ((uint8_t)(ip)->a[1]), \
	   ((uint8_t)(ip)->a[2]), \
	   ((uint8_t)(ip)->a[3]), \
	   ((uint8_t)(ip)->a[4]), \
	   ((uint8_t)(ip)->a[5]), \
	   ((uint8_t)(ip)->a[6]), \
	   ((uint8_t)(ip)->a[7]), \
	   ((uint8_t)(ip)->a[8]), \
	   ((uint8_t)(ip)->a[9]), \
	   ((uint8_t)(ip)->a[10]), \
	   ((uint8_t)(ip)->a[11]), \
	   ((uint8_t)(ip)->a[12]), \
	   ((uint8_t)(ip)->a[13]), \
	   ((uint8_t)(ip)->a[14]), \
	   ((uint8_t)(ip)->a[15])
       For use with RTE_IPV6_ADDR_FMT. E.g.:

       printf(RTE_IPV6_ADDR_FMT	"\n", RTE_IPV6_ADDR_SPLIT(&ip));

       Parameters
	   ip A	struct rte_ipv6_addr pointer.

       Returns
	   A set of 16 uint8_t values separated	by comas for use in printf().

       Definition at line 210 of file rte_ip6.h.

   #define RTE_IPV6_MASK_FULL	 RTE_IPV6(0xffff, 0xffff, 0xffff, 0xffff,
       0xffff, 0xffff, 0xffff, 0xffff)
       Full IPv6 mask. NB: this	is not a valid/routable	IPv6 address.

       Definition at line 229 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_UNSPEC	  RTE_IPV6(0, 0, 0, 0, 0, 0, 0,	0)
       Unspecified IPv6	address	as defined in RFC 4291,	section	2.5.2.

       Definition at line 233 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_LOOPBACK   RTE_IPV6(0,	0, 0, 0, 0, 0, 0, 1)
       Loopback	IPv6 address as	defined	in RFC 4291, section 2.5.3.

       Definition at line 251 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_ALLNODES_IFACE_LOCAL	RTE_IPV6(0xff01, 0, 0, 0, 0,
       0, 0, 1)
       Interface-local all-nodes multicast address as defined in RFC 4291,
       section 2.7.1.

       Definition at line 383 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_ALLNODES_LINK_LOCAL   RTE_IPV6(0xff02,	0, 0, 0, 0, 0,
       0, 1)
       Link-local all-nodes multicast address as defined in RFC	4291, section
       2.7.1.

       Definition at line 385 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_ALLROUTERS_IFACE_LOCAL	  RTE_IPV6(0xff01, 0, 0, 0, 0,
       0, 0, 2)
       Interface-local all-routers multicast address as	defined	in RFC 4291,
       section 2.7.1.

       Definition at line 387 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_ALLROUTERS_LINK_LOCAL	 RTE_IPV6(0xff02, 0, 0,	0, 0,
       0, 0, 2)
       Link-local all-routers multicast	address	as defined in RFC 4291,
       section 2.7.1.

       Definition at line 389 of file rte_ip6.h.

   #define RTE_IPV6_ADDR_ALLROUTERS_SITE_LOCAL	 RTE_IPV6(0xff05, 0, 0,	0, 0,
       0, 0, 2)
       Site-local all-routers multicast	address	as defined in RFC 4291,
       section 2.7.1.

       Definition at line 391 of file rte_ip6.h.

   #define RTE_IPV6_MIN_MTU   1280
       Minimum MTU for IPv6, see RFC 8200.

       Definition at line 542 of file rte_ip6.h.

   #define RTE_IPV6_EHDR_MF_SHIFT   0
       IPv6 fragment extension header.

       Definition at line 746 of file rte_ip6.h.

Enumeration Type Documentation
   enum	rte_ipv6_mc_scope
       IPv6 multicast scope values as defined in RFC 4291, section 2.7.

       Enumerator

       RTE_IPV6_MC_SCOPE_NONE
	      Invalid multicast	scope.

       RTE_IPV6_MC_SCOPE_IFACELOCAL
	      Interface-local multicast	scope.

       RTE_IPV6_MC_SCOPE_LINKLOCAL
	      Link-local multicast scope.

       RTE_IPV6_MC_SCOPE_SITELOCAL
	      Site-local multicast scope.

       RTE_IPV6_MC_SCOPE_ORGLOCAL
	      Organizational-local multicast scope.

       RTE_IPV6_MC_SCOPE_GLOBAL
	      Global multicast scope.

       Definition at line 348 of file rte_ip6.h.

Function Documentation
   static  bool	rte_ipv6_addr_eq (const	struct rte_ipv6_addr * a, const	struct
       rte_ipv6_addr * b) [inline],  [static]
       Check if	two IPv6 Addresses are equal.

       Parameters
	   a The first address.
	   b The second	address.

       Returns
	   true	if both	addresses are identical.

       Definition at line 68 of	file rte_ip6.h.

   static void rte_ipv6_addr_mask (struct rte_ipv6_addr	* ip,  uint8_t	depth)
       [inline],  [static]
       Mask an IPv6 address using the specified	depth.

       Leave untouched one bit per unit	in the depth variable and set the rest
       to 0.

       Parameters
	   ip The address to mask.
	   depth All bits starting from	this bit number	will be	set to zero.

       Definition at line 84 of	file rte_ip6.h.

   static  bool	rte_ipv6_addr_eq_prefix	(const struct rte_ipv6_addr * a, const
       struct rte_ipv6_addr * b, uint8_t depth)	[inline],  [static]
       Check if	two IPv6 addresses belong to the same network prefix.

       Parameters
	   a The first address or network.
	   b The second	address	or network.
	   depth The network prefix length.

       Returns
	   true	if the first depth bits	of both	addresses are identical.

       Definition at line 109 of file rte_ip6.h.

   static uint8_t rte_ipv6_mask_depth  (const  struct  rte_ipv6_addr  *	 mask)
       [inline],  [static]
       Get the depth of	a given	IPv6 address mask.

       Parameters
	   mask	The address mask.

       Returns
	   The number of consecutive bits set to 1 starting from the beginning
	   of the mask.

       Definition at line 132 of file rte_ip6.h.

   static  bool	 rte_ipv6_addr_is_unspec  (const  struct  rte_ipv6_addr	 * ip)
       [inline],  [static]
       Check if	an IPv6	address	is unspecified as defined in RFC 4291, section
       2.5.2.

       Parameters
	   ip The address to check.

       Returns
	   true	if the address is the unspecified address (all zeroes).

       Definition at line 244 of file rte_ip6.h.

   static bool rte_ipv6_addr_is_loopback (const	 struct	 rte_ipv6_addr	*  ip)
       [inline],  [static]
       Check  if  an  IPv6  address  is	the loopback address as	defined	in RFC
       4291, section 2.5.3.

       Parameters
	   ip The address to check.

       Returns
	   true	if the address is the loopback address (all zeroes except  the
	   last	bit).

       Definition at line 263 of file rte_ip6.h.

   static  bool	 rte_ipv6_addr_is_linklocal  (const struct rte_ipv6_addr * ip)
       [inline],  [static]
       Check if	an IPv6	address	is link-local as defined in RFC	4291,  section
       2.5.6.

       Parameters
	   ip The address to check.

       Returns
	   true	if the address is a link-local address.

       Definition at line 278 of file rte_ip6.h.

   static  bool	 rte_ipv6_addr_is_sitelocal  (const struct rte_ipv6_addr * ip)
       [inline],  [static]
       Check if	an IPv6	address	is site-local as defined in RFC	4291,  section
       2.5.7.

       Parameters
	   ip The address to check.

       Returns
	   true	if the address is a site-local address.

       Definition at line 292 of file rte_ip6.h.

   static  bool	 rte_ipv6_addr_is_v4compat  (const  struct rte_ipv6_addr * ip)
       [inline],  [static]
       Check if	an IPv6	address	is an IPv4-compatible address  as  defined  in
       RFC 4291, section 2.5.5.1.

       Parameters
	   ip The address to check.

       Returns
	   true	if the address is an IPv4-compatible address.

       Definition at line 307 of file rte_ip6.h.

   static  bool	 rte_ipv6_addr_is_v4mapped  (const  struct rte_ipv6_addr * ip)
       [inline],  [static]
       Check if	an IPv6	address	is an IPv4-mapped address as  defined  in  RFC
       4291, section 2.5.5.2.

       Parameters
	   ip The address to check.

       Returns
	   true	if the address is an IPv4-mapped address.

       Definition at line 325 of file rte_ip6.h.

   static  bool	 rte_ipv6_addr_is_mcast	 (const	 struct	 rte_ipv6_addr	*  ip)
       [inline],  [static]
       Check if	an IPv6	address	is multicast as	defined	in RFC	4291,  section
       2.7.

       Parameters
	   ip The address to check.

       Returns
	   true	if the address is multicast.

       Definition at line 340 of file rte_ip6.h.

   static enum rte_ipv6_mc_scope rte_ipv6_mc_scope (const struct rte_ipv6_addr
       * ip) [inline],	[static]
       Extract	the IPv6 multicast scope value as defined in RFC 4291, section
       2.7.

       Parameters
	   ip The address from which to	get the	multicast scope.

       Returns
	   The multicast scope of the address,	or  RTE_IPV6_MC_SCOPE_NONE  if
	   the address is not multicast.

       Definition at line 373 of file rte_ip6.h.

   static  void	 rte_ipv6_solnode_from_addr (struct rte_ipv6_addr * sol, const
       struct rte_ipv6_addr * ip) [inline],  [static]
       Convert a unicast or anycast IPv6 address to a solicited-node multicast
       address as defined in RFC 4291, section 2.7.1.

       Parameters
	   sol The IPv6	solicited-node multicast address to generate.
	   ip A	unicast	or anycast address.

       Definition at line 434 of file rte_ip6.h.

   static void rte_ether_mcast_from_ipv6 (struct rte_ether_addr	*  mac,	 const
       struct rte_ipv6_addr * ip) [inline],  [static]
       Generate	 a multicast Ethernet address from a multicast IPv6 address as
       defined in RFC 2464, section 7.

       Parameters
	   mac The multicast Ethernet address to generate.
	   ip A	multicast IPv6 address.

       Definition at line 456 of file rte_ip6.h.

   struct __rte_aligned	(2)
       IPv6 Header

       IPv6 Routing Extension Header < IP version, traffic class & flow	label.

       < Flow label

       < ECN

       < Differentiated	services

       < Version

       < IP payload size, including ext. headers

       < Protocol, next	header.

       < Hop limits.

       < IP address of source host.

       < IP address of destination host(s).

       < Protocol, next	header.

       < Header	length.

       < Extension header type.

       < Valid segments	number.

       < Packet	control	data per type.

       < The last_entry	field of SRH

       < Packet	flag.

       < Packet	tag.

       < Next header type

       < Reserved

       < All fragmentation data

       < Packet	ID

       Definition at line 456 of file rte_ip6.h.

   static  int	rte_ipv6_check_version	(const	struct	rte_ipv6_hdr   *   ip)
       [inline],  [static]
       Check that the IPv6 header version field	is valid according to RFC 8200
       section 3.

       Parameters
	   ip The IPv6 header.

       Returns
	   0 if	the version field is valid. -EINVAL otherwise.

       Definition at line 502 of file rte_ip6.h.

   static  uint16_t rte_ipv6_phdr_cksum	(const struct rte_ipv6_hdr * ipv6_hdr,
       uint64_t	ol_flags) [inline],  [static]
       Process the pseudo-header checksum of an	IPv6 header.

       Depending on the	ol_flags, the pseudo-header checksum expected  by  the
       drivers	is  not	 the same. For instance, when TSO is enabled, the IPv6
       payload length must not be included in the packet.

       When ol_flags is	0, it computes the standard pseudo-header checksum.

       Parameters
	   ipv6_hdr The	pointer	to the contiguous IPv6 header.
	   ol_flags The	ol_flags of the	associated mbuf.

       Returns
	   The non-complemented	checksum to set	in the L4 header.

       Definition at line 561 of file rte_ip6.h.

   static  uint16_t  rte_ipv6_udptcp_cksum  (const   struct   rte_ipv6_hdr   *
       ipv6_hdr, const void * l4_hdr) [inline],	 [static]
       Process the IPv6	UDP or TCP checksum.

       The  IPv6 header	must not be followed by	extension headers. The layer 4
       checksum	must be	set to 0 in the	L4 header by the caller.

       Parameters
	   ipv6_hdr The	pointer	to the contiguous IPv6 header.
	   l4_hdr The pointer to the beginning of the L4 header.

       Returns
	   The complemented checksum to	set in the L4 header.

       Definition at line 615 of file rte_ip6.h.

   static uint16_t rte_ipv6_udptcp_cksum_mbuf  (const  struct  rte_mbuf	 *  m,
       const  struct  rte_ipv6_hdr  *  ipv6_hdr,  uint16_t  l4_off)  [inline],
       [static]
       Process the IPv6	UDP or TCP checksum of a packet.

       The IPv6	header must not	be followed by extension headers. The layer  4
       checksum	must be	set to 0 in the	L4 header by the caller.

       Parameters
	   m The pointer to the	mbuf.
	   ipv6_hdr The	pointer	to the contiguous IPv6 header.
	   l4_off The offset in	bytes to start L4 checksum.

       Returns
	   The complemented checksum to	set in the L4 header.

       Definition at line 672 of file rte_ip6.h.

   static   int	 rte_ipv6_udptcp_cksum_verify  (const  struct  rte_ipv6_hdr  *
       ipv6_hdr, const void * l4_hdr) [inline],	 [static]
       Validate	the IPv6 UDP or	TCP checksum.

       In case of UDP, the caller must first check if udp_hdr->dgram_cksum  is
       0:  this	is either invalid or means no checksum in some situations. See
       8.1 (Upper-Layer	Checksums) in RFC 8200.

       Parameters
	   ipv6_hdr The	pointer	to the contiguous IPv6 header.
	   l4_hdr The pointer to the beginning of the L4 header.

       Returns
	   Return 0 if the checksum is correct,	else -1.

       Definition at line 705 of file rte_ip6.h.

   static int rte_ipv6_udptcp_cksum_mbuf_verify	(const struct  rte_mbuf	 *  m,
       const  struct  rte_ipv6_hdr  *  ipv6_hdr,  uint16_t  l4_off)  [inline],
       [static]
       Validate	the IPv6 UDP or	TCP checksum of	a packet.

       In case of UDP, the caller must first check if udp_hdr->dgram_cksum  is
       0:  this	is either invalid or means no checksum in some situations. See
       8.1 (Upper-Layer	Checksums) in RFC 8200.

       Parameters
	   m The pointer to the	mbuf.
	   ipv6_hdr The	pointer	to the contiguous IPv6 header.
	   l4_off The offset in	bytes to start L4 checksum.

       Returns
	   Return 0 if the checksum is correct,	else -1.

       Definition at line 733 of file rte_ip6.h.

   static int rte_ipv6_get_next_ext (const uint8_t * p,	int  proto,  size_t  *
       ext_len)	[inline],  [static]
       Parse next IPv6 header extension

       This  function  checks if proto number is an IPv6 extensions and	parses
       its data	if so, providing information  on  next	header	and  extension
       length.

       Parameters
	   p Pointer to	an extension raw data.
	   proto  Protocol  number extracted from the 'next header' field from
	   the IPv6 header or the previous extension.
	   ext_len Extension data length.

       Returns
	   next	protocol  number  if  proto  is	 an  IPv6  extension,  -EINVAL
	   otherwise

       Definition at line 787 of file rte_ip6.h.

Author
       Generated automatically by Doxygen for DPDK from	the source code.

Version	25.11.0			Thu Jun	11 2026			  rte_ip6.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=RTE_IPV6_ADDR_ALLNODES_LINK_LOCAL&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help