logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Author

       Generated automatically by Doxygen for DPDK from the source code.

DPDK                                             Version 24.11.2                                    rte_ip6.h(3)

Detailed Description

       IPv6-related defines

       Definition in file rte_ip6.h.

Enumeration Type Documentation

enumrte_ipv6_mc_scope
       IPv6 multicast scope values as defined in RFC 4291, section 2.7.

       EnumeratorRTE_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

staticboolrte_ipv6_addr_eq(conststructrte_ipv6_addr*a,conststructrte_ipv6_addr*b)[inline],[static]
       Check if two IPv6 Addresses are equal.

       Parametersa The first address.
           b The second address.

       Returns
           true if both addresses are identical.

       Definition at line 68 of file rte_ip6.h.

   staticvoidrte_ipv6_addr_mask(structrte_ipv6_addr*ip,uint8_tdepth)[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.

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

   staticboolrte_ipv6_addr_eq_prefix(conststructrte_ipv6_addr*a,conststructrte_ipv6_addr*b,uint8_tdepth)[inline],[static]
       Check if two IPv6 addresses belong to the same network prefix.

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

   staticuint8_trte_ipv6_mask_depth(conststructrte_ipv6_addr*mask)[inline],[static]
       Get the depth of a given IPv6 address mask.

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

   staticboolrte_ipv6_addr_is_unspec(conststructrte_ipv6_addr*ip)[inline],[static]
       Check if an IPv6 address is unspecified as defined in RFC 4291, section 2.5.2.

       Parametersip The address to check.

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

       Definition at line 244 of file rte_ip6.h.

   staticboolrte_ipv6_addr_is_loopback(conststructrte_ipv6_addr*ip)[inline],[static]
       Check if an IPv6 address is the loopback address as defined in RFC 4291, section 2.5.3.

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

   staticboolrte_ipv6_addr_is_linklocal(conststructrte_ipv6_addr*ip)[inline],[static]
       Check if an IPv6 address is link-local as defined in RFC 4291, section 2.5.6.

       Parametersip The address to check.

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

       Definition at line 278 of file rte_ip6.h.

   staticboolrte_ipv6_addr_is_sitelocal(conststructrte_ipv6_addr*ip)[inline],[static]
       Check if an IPv6 address is site-local as defined in RFC 4291, section 2.5.7.

       Parametersip The address to check.

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

       Definition at line 292 of file rte_ip6.h.

   staticboolrte_ipv6_addr_is_v4compat(conststructrte_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.

       Parametersip The address to check.

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

       Definition at line 307 of file rte_ip6.h.

   staticboolrte_ipv6_addr_is_v4mapped(conststructrte_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.

       Parametersip The address to check.

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

       Definition at line 325 of file rte_ip6.h.

   staticboolrte_ipv6_addr_is_mcast(conststructrte_ipv6_addr*ip)[inline],[static]
       Check if an IPv6 address is multicast as defined in RFC 4291, section 2.7.

       Parametersip The address to check.

       Returns
           true if the address is multicast.

       Definition at line 340 of file rte_ip6.h.

   staticenumrte_ipv6_mc_scoperte_ipv6_mc_scope(conststructrte_ipv6_addr*ip)[inline],[static]
       Extract the IPv6 multicast scope value as defined in RFC 4291, section 2.7.

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

   staticvoidrte_ipv6_solnode_from_addr(structrte_ipv6_addr*sol,conststructrte_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.

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

       Definition at line 429 of file rte_ip6.h.

   staticvoidrte_ether_mcast_from_ipv6(structrte_ether_addr*mac,conststructrte_ipv6_addr*ip)[inline],[static]
       Generate a multicast Ethernet address from a multicast IPv6 address as defined in RFC 2464, section 7.

       Parametersmac The multicast Ethernet address to generate.
           ip A multicast IPv6 address.

       Definition at line 451 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 451 of file rte_ip6.h.

   staticintrte_ipv6_check_version(conststructrte_ipv6_hdr*ip)[inline],[static]
       Check that the IPv6 header version field is valid according to RFC 8200 section 3.

       Parametersip The IPv6 header.

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

       Definition at line 497 of file rte_ip6.h.

   staticuint16_trte_ipv6_phdr_cksum(conststructrte_ipv6_hdr*ipv6_hdr,uint64_tol_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.

       Parametersipv6_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 556 of file rte_ip6.h.

   staticuint16_trte_ipv6_udptcp_cksum(conststructrte_ipv6_hdr*ipv6_hdr,constvoid*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.

       Parametersipv6_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 610 of file rte_ip6.h.

   staticuint16_trte_ipv6_udptcp_cksum_mbuf(conststructrte_mbuf*m,conststructrte_ipv6_hdr*ipv6_hdr,uint16_tl4_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.

       Parametersm 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 667 of file rte_ip6.h.

   staticintrte_ipv6_udptcp_cksum_verify(conststructrte_ipv6_hdr*ipv6_hdr,constvoid*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.

       Parametersipv6_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 700 of file rte_ip6.h.

   staticintrte_ipv6_udptcp_cksum_mbuf_verify(conststructrte_mbuf*m,conststructrte_ipv6_hdr*ipv6_hdr,uint16_tl4_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.

       Parametersm 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 728 of file rte_ip6.h.

   staticintrte_ipv6_get_next_ext(constuint8_t*p,intproto,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.

       Parametersp 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 782 of file rte_ip6.h.

Macro Definition Documentation

#defineRTE_IPV6_ADDR_SIZE16
       Maximum IPv6 address size in bytes.

       Definition at line 43 of file rte_ip6.h.

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

       Definition at line 48 of file rte_ip6.h.

   #defineRTE_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.

       Parametersx A uint16_t literal value.

       Returns
           Two uint8_t literals separated by a coma.

       Definition at line 162 of file rte_ip6.h.

   #defineRTE_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.

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

   #defineRTE_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.

   #defineRTE_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));

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

   #defineRTE_IPV6_MASK_FULLRTE_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.

   #defineRTE_IPV6_ADDR_UNSPECRTE_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.

   #defineRTE_IPV6_ADDR_LOOPBACKRTE_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.

   #defineRTE_IPV6_ADDR_ALLNODES_IFACE_LOCALRTE_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.

   #defineRTE_IPV6_ADDR_ALLNODES_LINK_LOCALRTE_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.

   #defineRTE_IPV6_ADDR_ALLROUTERS_IFACE_LOCALRTE_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.

   #defineRTE_IPV6_ADDR_ALLROUTERS_LINK_LOCALRTE_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.

   #defineRTE_IPV6_ADDR_ALLROUTERS_SITE_LOCALRTE_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.

   #defineRTE_IPV6_MIN_MTU1280
       Minimum MTU for IPv6, see RFC 8200.

       Definition at line 537 of file rte_ip6.h.

   #defineRTE_IPV6_EHDR_MF_SHIFT0
       IPv6 fragment extension header.

       Definition at line 741 of file rte_ip6.h.

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>

   DataStructures
       struct rte_ipv6_addrMacros
       #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_FULLRTE_IPV6(0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)
       #define RTE_IPV6_ADDR_UNSPECRTE_IPV6(0, 0, 0, 0, 0, 0, 0, 0)
       #define RTE_IPV6_ADDR_LOOPBACKRTE_IPV6(0, 0, 0, 0, 0, 0, 0, 1)
       #define RTE_IPV6_MIN_MTU   1280
       #define RTE_IPV6_EHDR_MF_SHIFT   0

       Wellknownmulticastaddresses

           #define RTE_IPV6_ADDR_ALLNODES_IFACE_LOCALRTE_IPV6(0xff01, 0, 0, 0, 0, 0, 0, 1)
           #define RTE_IPV6_ADDR_ALLNODES_LINK_LOCALRTE_IPV6(0xff02, 0, 0, 0, 0, 0, 0, 1)
           #define RTE_IPV6_ADDR_ALLROUTERS_IFACE_LOCALRTE_IPV6(0xff01, 0, 0, 0, 0, 0, 0, 2)
           #define RTE_IPV6_ADDR_ALLROUTERS_LINK_LOCALRTE_IPV6(0xff02, 0, 0, 0, 0, 0, 0, 2)
           #define RTE_IPV6_ADDR_ALLROUTERS_SITE_LOCALRTE_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_scoperte_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_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)

See Also