#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>
 
Go to the source code of this file.
 | 
| #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 | 
|   | 
 | 
| #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) | 
|   | 
 | 
| 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) | 
|   | 
IPv6-related defines 
Definition in file rte_ip6.h.
 
◆ RTE_IPV6_ADDR_SIZE
      
        
          | #define RTE_IPV6_ADDR_SIZE   16 | 
        
      
 
Maximum IPv6 address size in bytes. 
Definition at line 43 of file rte_ip6.h.
 
 
◆ RTE_IPV6_MAX_DEPTH
Maximum IPv6 address size in bits. 
Definition at line 48 of file rte_ip6.h.
 
 
◆ RTE_IPV6_U16_SPLIT
      
        
          | #define RTE_IPV6_U16_SPLIT | 
          ( | 
            | 
          x | ) | 
           | 
        
      
 
Value:    (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.
 
 
◆ RTE_IPV6
      
        
          | #define RTE_IPV6 | 
          ( | 
            | 
          a,  | 
        
        
           | 
           | 
            | 
          b,  | 
        
        
           | 
           | 
            | 
          c,  | 
        
        
           | 
           | 
            | 
          d,  | 
        
        
           | 
           | 
            | 
          e,  | 
        
        
           | 
           | 
            | 
          f,  | 
        
        
           | 
           | 
            | 
          g,  | 
        
        
           | 
           | 
            | 
          h  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Value:    {{ \
        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
 - 
  
  
 
- Returns
 - A literal rte_ipv6_addr value suitable for static initialization. 
 
- Examples
 - examples/ip_fragmentation/main.c, examples/ip_reassembly/main.c, examples/l3fwd-graph/main.c, and examples/l3fwd/main.c.
 
Definition at line 179 of file rte_ip6.h.
 
 
◆ RTE_IPV6_ADDR_FMT
      
        
          | #define RTE_IPV6_ADDR_FMT   	"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x" | 
        
      
 
 
◆ RTE_IPV6_ADDR_SPLIT
      
        
          | #define RTE_IPV6_ADDR_SPLIT | 
          ( | 
            | 
          ip | ) | 
           | 
        
      
 
Value:    ((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.:
#define RTE_IPV6_ADDR_SPLIT(ip)
 
#define RTE_IPV6_ADDR_FMT
 
 - Parameters
 - 
  
  
 
- Returns
 - A set of 16 
uint8_t values separated by comas for use in printf().  
- Examples
 - examples/cmdline/commands.c, examples/ip_pipeline/cli.c, examples/ipsec-secgw/flow.c, and examples/ipsec-secgw/sa.c.
 
Definition at line 210 of file rte_ip6.h.
 
 
◆ RTE_IPV6_MASK_FULL
      
        
          | #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.
 
 
◆ RTE_IPV6_ADDR_UNSPEC
      
        
          | #define RTE_IPV6_ADDR_UNSPEC   RTE_IPV6(0, 0, 0, 0, 0, 0, 0, 0) | 
        
      
 
 
◆ RTE_IPV6_ADDR_LOOPBACK
      
        
          | #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.
 
 
◆ RTE_IPV6_ADDR_ALLNODES_IFACE_LOCAL
      
        
          | #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.
 
 
◆ RTE_IPV6_ADDR_ALLNODES_LINK_LOCAL
      
        
          | #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.
 
 
◆ RTE_IPV6_ADDR_ALLROUTERS_IFACE_LOCAL
      
        
          | #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.
 
 
◆ RTE_IPV6_ADDR_ALLROUTERS_LINK_LOCAL
      
        
          | #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.
 
 
◆ RTE_IPV6_ADDR_ALLROUTERS_SITE_LOCAL
      
        
          | #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.
 
 
◆ RTE_IPV6_MIN_MTU
      
        
          | #define RTE_IPV6_MIN_MTU   1280 | 
        
      
 
Minimum MTU for IPv6, see RFC 8200. 
Definition at line 537 of file rte_ip6.h.
 
 
◆ RTE_IPV6_EHDR_MF_SHIFT
      
        
          | #define RTE_IPV6_EHDR_MF_SHIFT   0 | 
        
      
 
IPv6 fragment extension header. 
Definition at line 741 of file rte_ip6.h.
 
 
◆ 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.
 
 
◆ rte_ipv6_addr_eq()
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.
 
 
◆ rte_ipv6_addr_mask()
  
  
      
        
          | static void rte_ipv6_addr_mask  | 
          ( | 
          struct rte_ipv6_addr *  | 
          ip,  | 
         
        
           | 
           | 
          uint8_t  | 
          depth  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
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
 - 
  
    | [in] | ip | The address to mask.  | 
    | [out] | depth | All bits starting from this bit number will be set to zero.  | 
  
   
Definition at line 84 of file rte_ip6.h.
 
 
◆ rte_ipv6_addr_eq_prefix()
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.
 
 
◆ rte_ipv6_mask_depth()
  
  
      
        
          | static uint8_t rte_ipv6_mask_depth  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          mask | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Get the depth of a given IPv6 address mask.
- Parameters
 - 
  
  
 
- 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.
 
 
◆ rte_ipv6_addr_is_unspec()
  
  
      
        
          | static bool rte_ipv6_addr_is_unspec  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check if an IPv6 address is unspecified as defined in RFC 4291, section 2.5.2.
- Parameters
 - 
  
  
 
- Returns
 true if the address is the unspecified address (all zeroes). 
- Examples
 - examples/ipsec-secgw/sa.c.
 
Definition at line 244 of file rte_ip6.h.
 
 
◆ rte_ipv6_addr_is_loopback()
  
  
      
        
          | static bool rte_ipv6_addr_is_loopback  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check if an IPv6 address is the loopback address as defined in RFC 4291, section 2.5.3.
- Parameters
 - 
  
  
 
- Returns
 true if the address is the loopback address (all zeroes except the last bit). 
Definition at line 263 of file rte_ip6.h.
 
 
◆ rte_ipv6_addr_is_linklocal()
  
  
      
        
          | static bool rte_ipv6_addr_is_linklocal  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check if an IPv6 address is link-local as defined in RFC 4291, section 2.5.6.
- Parameters
 - 
  
  
 
- Returns
 true if the address is a link-local address. 
Definition at line 278 of file rte_ip6.h.
 
 
◆ rte_ipv6_addr_is_sitelocal()
  
  
      
        
          | static bool rte_ipv6_addr_is_sitelocal  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check if an IPv6 address is site-local as defined in RFC 4291, section 2.5.7.
- Parameters
 - 
  
  
 
- Returns
 true if the address is a site-local address. 
Definition at line 292 of file rte_ip6.h.
 
 
◆ rte_ipv6_addr_is_v4compat()
  
  
      
        
          | static bool rte_ipv6_addr_is_v4compat  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check if an IPv6 address is an IPv4-compatible address as defined in RFC 4291, section 2.5.5.1.
- Parameters
 - 
  
  
 
- Returns
 true if the address is an IPv4-compatible address. 
Definition at line 307 of file rte_ip6.h.
 
 
◆ rte_ipv6_addr_is_v4mapped()
  
  
      
        
          | static bool rte_ipv6_addr_is_v4mapped  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check if an IPv6 address is an IPv4-mapped address as defined in RFC 4291, section 2.5.5.2.
- Parameters
 - 
  
  
 
- Returns
 true if the address is an IPv4-mapped address. 
Definition at line 325 of file rte_ip6.h.
 
 
◆ rte_ipv6_addr_is_mcast()
  
  
      
        
          | static bool rte_ipv6_addr_is_mcast  | 
          ( | 
          const struct rte_ipv6_addr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check if an IPv6 address is multicast as defined in RFC 4291, section 2.7.
- Parameters
 - 
  
  
 
- Returns
 true if the address is multicast. 
Definition at line 340 of file rte_ip6.h.
 
 
◆ rte_ipv6_mc_scope()
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.
 
 
◆ rte_ipv6_solnode_from_addr()
Convert a unicast or anycast IPv6 address to a solicited-node multicast address as defined in RFC 4291, section 2.7.1.
- Parameters
 - 
  
    | [out] | sol | The IPv6 solicited-node multicast address to generate.  | 
    | [in] | ip | A unicast or anycast address.  | 
  
   
Definition at line 429 of file rte_ip6.h.
 
 
◆ rte_ether_mcast_from_ipv6()
  
  
      
        
          | static void rte_ether_mcast_from_ipv6  | 
          ( | 
          struct rte_ether_addr *  | 
          mac,  | 
         
        
           | 
           | 
          const struct rte_ipv6_addr *  | 
          ip  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
Generate a multicast Ethernet address from a multicast IPv6 address as defined in RFC 2464, section 7.
- Parameters
 - 
  
    | [out] | mac | The multicast Ethernet address to generate.  | 
    | [in] | ip | A multicast IPv6 address.  | 
  
   
Definition at line 451 of file rte_ip6.h.
 
 
◆ __rte_aligned()
      
        
          | 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.
 
 
◆ rte_ipv6_check_version()
  
  
      
        
          | static int rte_ipv6_check_version  | 
          ( | 
          const struct rte_ipv6_hdr *  | 
          ip | ) | 
           | 
         
       
   | 
  
inlinestatic   | 
  
 
Check that the IPv6 header version field is valid according to RFC 8200 section 3.
- Parameters
 - 
  
  
 
- Returns
 0 if the version field is valid. -EINVAL otherwise. 
Definition at line 497 of file rte_ip6.h.
 
 
◆ rte_ipv6_phdr_cksum()
  
  
      
        
          | static uint16_t rte_ipv6_phdr_cksum  | 
          ( | 
          const struct rte_ipv6_hdr *  | 
          ipv6_hdr,  | 
         
        
           | 
           | 
          uint64_t  | 
          ol_flags  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
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. 
 
- Examples
 - examples/vhost/main.c.
 
Definition at line 556 of file rte_ip6.h.
 
 
◆ rte_ipv6_udptcp_cksum()
  
  
      
        
          | static uint16_t rte_ipv6_udptcp_cksum  | 
          ( | 
          const struct rte_ipv6_hdr *  | 
          ipv6_hdr,  | 
         
        
           | 
           | 
          const void *  | 
          l4_hdr  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
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 610 of file rte_ip6.h.
 
 
◆ rte_ipv6_udptcp_cksum_mbuf()
  
  
      
        
          | static uint16_t rte_ipv6_udptcp_cksum_mbuf  | 
          ( | 
          const struct rte_mbuf *  | 
          m,  | 
         
        
           | 
           | 
          const struct rte_ipv6_hdr *  | 
          ipv6_hdr,  | 
         
        
           | 
           | 
          uint16_t  | 
          l4_off  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
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 667 of file rte_ip6.h.
 
 
◆ rte_ipv6_udptcp_cksum_verify()
  
  
      
        
          | static int rte_ipv6_udptcp_cksum_verify  | 
          ( | 
          const struct rte_ipv6_hdr *  | 
          ipv6_hdr,  | 
         
        
           | 
           | 
          const void *  | 
          l4_hdr  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
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 700 of file rte_ip6.h.
 
 
◆ rte_ipv6_udptcp_cksum_mbuf_verify()
  
  
      
        
          | static int rte_ipv6_udptcp_cksum_mbuf_verify  | 
          ( | 
          const struct rte_mbuf *  | 
          m,  | 
         
        
           | 
           | 
          const struct rte_ipv6_hdr *  | 
          ipv6_hdr,  | 
         
        
           | 
           | 
          uint16_t  | 
          l4_off  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
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 728 of file rte_ip6.h.
 
 
◆ rte_ipv6_get_next_ext()
  
  
      
        
          | static int rte_ipv6_get_next_ext  | 
          ( | 
          const uint8_t *  | 
          p,  | 
         
        
           | 
           | 
          int  | 
          proto,  | 
         
        
           | 
           | 
          size_t *  | 
          ext_len  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inlinestatic   | 
  
 
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 
 
- Examples
 - examples/ipsec-secgw/ipsec-secgw.c, and examples/ipsec-secgw/ipsec_worker.c.
 
Definition at line 782 of file rte_ip6.h.