FD.io VPP  v20.09-64-g4f7b92f0a
Vector Packet Processing
ip6.h File Reference
+ Include dependency graph for ip6.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ip6_fib_key_t
 
struct  ip6_fib_t
 
struct  ip6_mfib_t
 
struct  ip6_add_del_interface_address_callback_t
 
struct  ip6_table_bind_callback_t
 
struct  ip6_fib_table_instance_t_
 A representation of a single IP6 table. More...
 
struct  ip6_mfib_table_instance_t_
 A representation of a single IP6 mfib table. More...
 
struct  ip6_main_t
 
struct  ip6_hop_by_hop_main_t
 

Macros

#define IP6_FIB_DEFAULT_HASH_NUM_BUCKETS   (64 * 1024)
 
#define IP6_FIB_DEFAULT_HASH_MEMORY_SIZE   (32<<20)
 
#define IP6_FIB_NUM_TABLES   (IP6_FIB_TABLE_NON_FWDING+1)
 
#define ND_THROTTLE_BITS   512
 

Typedefs

typedef struct ip6_mfib_t ip6_mfib_t
 
typedef void() ip6_add_del_interface_address_function_t(struct ip6_main_t *im, uword opaque, u32 sw_if_index, ip6_address_t *address, u32 address_length, u32 if_address_index, u32 is_del)
 
typedef void() ip6_table_bind_function_t(struct ip6_main_t *im, uword opaque, u32 sw_if_index, u32 new_fib_index, u32 old_fib_index)
 
typedef enum ip6_fib_table_instance_type_t_ ip6_fib_table_instance_type_t
 Enumeration of the FIB table instance types. More...
 
typedef struct ip6_fib_table_instance_t_ ip6_fib_table_instance_t
 A representation of a single IP6 table. More...
 
typedef struct ip6_mfib_table_instance_t_ ip6_mfib_table_instance_t
 A representation of a single IP6 mfib table. More...
 
typedef struct ip6_main_t ip6_main_t
 

Enumerations

enum  ip6_fib_table_instance_type_t_ { IP6_FIB_TABLE_FWDING, IP6_FIB_TABLE_NON_FWDING }
 Enumeration of the FIB table instance types. More...
 

Functions

void ip6_forward_next_trace (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, vlib_rx_or_tx_t which_adj_index)
 
static uword ip6_destination_matches_route (const ip6_main_t *im, const ip6_address_t *key, const ip6_address_t *dest, uword dest_length)
 
static uword ip6_destination_matches_interface (ip6_main_t *im, ip6_address_t *key, ip_interface_address_t *ia)
 
static uword ip6_unaligned_destination_matches_route (ip6_main_t *im, ip6_address_t *key, ip6_address_t *dest, uword dest_length)
 
static ip6_address_t * ip6_interface_address_matching_destination (ip6_main_t *im, const ip6_address_t *dst, u32 sw_if_index, ip_interface_address_t **result_ia)
 
clib_error_tip6_add_del_interface_address (vlib_main_t *vm, u32 sw_if_index, ip6_address_t *address, u32 address_length, u32 is_del)
 
void ip6_sw_interface_enable_disable (u32 sw_if_index, u32 is_enable)
 
ip6_address_t * ip6_interface_first_address (ip6_main_t *im, u32 sw_if_index)
 get first IPv6 interface address More...
 
int ip6_address_compare (ip6_address_t *a1, ip6_address_t *a2)
 
uword ip6_udp_register_listener (vlib_main_t *vm, u16 dst_port, u32 next_node_index)
 
u16 ip6_tcp_udp_icmp_compute_checksum (vlib_main_t *vm, vlib_buffer_t *p0, ip6_header_t *ip0, int *bogus_lengthp)
 
void ip6_register_protocol (u32 protocol, u32 node_index)
 
void ip6_unregister_protocol (u32 protocol)
 
void ip6_local_hop_by_hop_register_protocol (u32 protocol, u32 node_index)
 
int vnet_set_ip6_flow_hash (u32 table_id, flow_hash_config_t flow_hash_config)
 
u8format_ip6_forward_next_trace (u8 *s, va_list *args)
 
u32 ip6_tcp_udp_icmp_validate_checksum (vlib_main_t *vm, vlib_buffer_t *p0)
 
void ip6_punt_policer_add_del (u8 is_add, u32 policer_index)
 
void ip6_punt_redirect_add (u32 rx_sw_if_index, u32 tx_sw_if_index, ip46_address_t *nh)
 
void ip6_punt_redirect_add_paths (u32 rx_sw_if_index, fib_route_path_t *paths)
 
void ip6_punt_redirect_del (u32 rx_sw_if_index)
 
int vnet_set_ip6_classify_intfc (vlib_main_t *vm, u32 sw_if_index, u32 table_index)
 
static u32 ip6_compute_flow_hash (const ip6_header_t *ip, flow_hash_config_t flow_hash_config)
 
static int ip6_locate_header (vlib_buffer_t *p0, ip6_header_t *ip0, int find_hdr_type, u32 *offset)
 
u8format_ip6_hop_by_hop_ext_hdr (u8 *s, va_list *args)
 
int ip6_hbh_register_option (u8 option, int options(vlib_buffer_t *b, ip6_header_t *ip, ip6_hop_by_hop_option_t *opt), u8 *trace(u8 *s, ip6_hop_by_hop_option_t *opt))
 
int ip6_hbh_unregister_option (u8 option)
 
void ip6_hbh_set_next_override (uword next)
 
static void * vlib_buffer_push_ip6_custom (vlib_main_t *vm, vlib_buffer_t *b, ip6_address_t *src, ip6_address_t *dst, int proto, u32 flow_label)
 Push IPv6 header to buffer. More...
 
static void * vlib_buffer_push_ip6 (vlib_main_t *vm, vlib_buffer_t *b, ip6_address_t *src, ip6_address_t *dst, int proto)
 Push IPv6 header to buffer. More...
 
static u32 vlib_buffer_get_ip6_fib_index (vlib_buffer_t *b)
 

Variables

ip6_main_t ip6_main
 
vlib_node_registration_t ip6_input_node
 (constructor) VLIB_REGISTER_NODE (ip6_input_node) More...
 
vlib_node_registration_t ip6_rewrite_node
 (constructor) VLIB_REGISTER_NODE (ip6_rewrite_node) More...
 
vlib_node_registration_t ip6_rewrite_mcast_node
 (constructor) VLIB_REGISTER_NODE (ip6_rewrite_mcast_node) More...
 
vlib_node_registration_t ip6_rewrite_local_node
 
vlib_node_registration_t ip6_discover_neighbor_node
 (constructor) VLIB_REGISTER_NODE (ip6_discover_neighbor_node) More...
 
vlib_node_registration_t ip6_glean_node
 (constructor) VLIB_REGISTER_NODE (ip6_glean_node) More...
 
vlib_node_registration_t ip6_midchain_node
 (constructor) VLIB_REGISTER_NODE (ip6_midchain_node) More...
 
vlib_node_registration_t ip6_punt_node
 (constructor) VLIB_REGISTER_NODE (ip6_punt_node) More...
 
serialize_function_t serialize_vnet_ip6_main
 
serialize_function_t unserialize_vnet_ip6_main
 
vlib_node_registration_t ip6_lookup_node
 (constructor) VLIB_REGISTER_NODE (ip6_lookup_node) More...
 
ip6_hop_by_hop_main_t ip6_hop_by_hop_main
 

Macro Definition Documentation

◆ IP6_FIB_DEFAULT_HASH_MEMORY_SIZE

#define IP6_FIB_DEFAULT_HASH_MEMORY_SIZE   (32<<20)

Definition at line 62 of file ip6.h.

◆ IP6_FIB_DEFAULT_HASH_NUM_BUCKETS

#define IP6_FIB_DEFAULT_HASH_NUM_BUCKETS   (64 * 1024)

Definition at line 61 of file ip6.h.

◆ IP6_FIB_NUM_TABLES

#define IP6_FIB_NUM_TABLES   (IP6_FIB_TABLE_NON_FWDING+1)

Definition at line 139 of file ip6.h.

◆ ND_THROTTLE_BITS

#define ND_THROTTLE_BITS   512

Definition at line 244 of file ip6.h.

Typedef Documentation

◆ ip6_add_del_interface_address_function_t

typedef void() ip6_add_del_interface_address_function_t(struct ip6_main_t *im, uword opaque, u32 sw_if_index, ip6_address_t *address, u32 address_length, u32 if_address_index, u32 is_del)

Definition at line 98 of file ip6.h.

◆ ip6_fib_table_instance_t

A representation of a single IP6 table.

◆ ip6_fib_table_instance_type_t

Enumeration of the FIB table instance types.

◆ ip6_main_t

typedef struct ip6_main_t ip6_main_t

◆ ip6_mfib_t

typedef struct ip6_mfib_t ip6_mfib_t

◆ ip6_mfib_table_instance_t

A representation of a single IP6 mfib table.

◆ ip6_table_bind_function_t

typedef void() ip6_table_bind_function_t(struct ip6_main_t *im, uword opaque, u32 sw_if_index, u32 new_fib_index, u32 old_fib_index)

Definition at line 111 of file ip6.h.

Enumeration Type Documentation

◆ ip6_fib_table_instance_type_t_

Enumeration of the FIB table instance types.

Enumerator
IP6_FIB_TABLE_FWDING 

This table stores the routes that are used to forward traffic.

The key is the prefix, the result the adjacency to forward on.

IP6_FIB_TABLE_NON_FWDING 

The table that stores ALL routes learned by the DP.

Some of these routes may not be ready to install in forwarding at a given time. The key in this table is the prefix, the result is the fib_entry_t

Definition at line 123 of file ip6.h.

Function Documentation

◆ format_ip6_forward_next_trace()

u8* format_ip6_forward_next_trace ( u8 s,
va_list *  args 
)

Definition at line 951 of file ip6_forward.c.

+ Here is the call graph for this function:

◆ format_ip6_hop_by_hop_ext_hdr()

u8* format_ip6_hop_by_hop_ext_hdr ( u8 s,
va_list *  args 
)

Definition at line 2282 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_add_del_interface_address()

clib_error_t* ip6_add_del_interface_address ( vlib_main_t vm,
u32  sw_if_index,
ip6_address_t *  address,
u32  address_length,
u32  is_del 
)

Definition at line 297 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_address_compare()

int ip6_address_compare ( ip6_address_t *  a1,
ip6_address_t *  a2 
)

Definition at line 60 of file ip46_cli.c.

+ Here is the caller graph for this function:

◆ ip6_compute_flow_hash()

static u32 ip6_compute_flow_hash ( const ip6_header_t ip,
flow_hash_config_t  flow_hash_config 
)
inlinestatic

Definition at line 382 of file ip6.h.

+ Here is the caller graph for this function:

◆ ip6_destination_matches_interface()

static uword ip6_destination_matches_interface ( ip6_main_t im,
ip6_address_t *  key,
ip_interface_address_t ia 
)
inlinestatic

Definition at line 280 of file ip6.h.

+ Here is the call graph for this function:

◆ ip6_destination_matches_route()

static uword ip6_destination_matches_route ( const ip6_main_t im,
const ip6_address_t *  key,
const ip6_address_t *  dest,
uword  dest_length 
)
inlinestatic

Definition at line 265 of file ip6.h.

+ Here is the caller graph for this function:

◆ ip6_forward_next_trace()

void ip6_forward_next_trace ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
vlib_rx_or_tx_t  which_adj_index 
)

Definition at line 1003 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_hbh_register_option()

int ip6_hbh_register_option ( u8  option,
int   optionsvlib_buffer_t *b, ip6_header_t *ip, ip6_hop_by_hop_option_t *opt,
u8 traceu8 *s, ip6_hop_by_hop_option_t *opt 
)

Definition at line 2725 of file ip6_forward.c.

+ Here is the caller graph for this function:

◆ ip6_hbh_set_next_override()

void ip6_hbh_set_next_override ( uword  next)

Definition at line 2717 of file ip6_forward.c.

+ Here is the caller graph for this function:

◆ ip6_hbh_unregister_option()

int ip6_hbh_unregister_option ( u8  option)

Definition at line 2749 of file ip6_forward.c.

+ Here is the caller graph for this function:

◆ ip6_interface_address_matching_destination()

static ip6_address_t* ip6_interface_address_matching_destination ( ip6_main_t im,
const ip6_address_t *  dst,
u32  sw_if_index,
ip_interface_address_t **  result_ia 
)
inlinestatic

Definition at line 307 of file ip6.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_interface_first_address()

ip6_address_t* ip6_interface_first_address ( ip6_main_t im,
u32  sw_if_index 
)

get first IPv6 interface address

Definition at line 278 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_local_hop_by_hop_register_protocol()

void ip6_local_hop_by_hop_register_protocol ( u32  protocol,
u32  node_index 
)

Definition at line 1116 of file ip6_hop_by_hop.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_locate_header()

static int ip6_locate_header ( vlib_buffer_t p0,
ip6_header_t ip0,
int  find_hdr_type,
u32 offset 
)
inlinestatic

Definition at line 465 of file ip6.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_punt_policer_add_del()

void ip6_punt_policer_add_del ( u8  is_add,
u32  policer_index 
)

Definition at line 162 of file ip6_punt_drop.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_punt_redirect_add()

void ip6_punt_redirect_add ( u32  rx_sw_if_index,
u32  tx_sw_if_index,
ip46_address_t *  nh 
)

Definition at line 285 of file ip6_punt_drop.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_punt_redirect_add_paths()

void ip6_punt_redirect_add_paths ( u32  rx_sw_if_index,
fib_route_path_t paths 
)

Definition at line 305 of file ip6_punt_drop.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_punt_redirect_del()

void ip6_punt_redirect_del ( u32  rx_sw_if_index)

Definition at line 315 of file ip6_punt_drop.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_register_protocol()

void ip6_register_protocol ( u32  protocol,
u32  node_index 
)

Definition at line 1664 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_sw_interface_enable_disable()

void ip6_sw_interface_enable_disable ( u32  sw_if_index,
u32  is_enable 
)

Definition at line 239 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_tcp_udp_icmp_compute_checksum()

u16 ip6_tcp_udp_icmp_compute_checksum ( vlib_main_t vm,
vlib_buffer_t p0,
ip6_header_t ip0,
int *  bogus_lengthp 
)

Definition at line 1095 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_tcp_udp_icmp_validate_checksum()

u32 ip6_tcp_udp_icmp_validate_checksum ( vlib_main_t vm,
vlib_buffer_t p0 
)

Definition at line 1160 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ip6_udp_register_listener()

uword ip6_udp_register_listener ( vlib_main_t vm,
u16  dst_port,
u32  next_node_index 
)
+ Here is the caller graph for this function:

◆ ip6_unaligned_destination_matches_route()

static uword ip6_unaligned_destination_matches_route ( ip6_main_t im,
ip6_address_t *  key,
ip6_address_t *  dest,
uword  dest_length 
)
inlinestatic

Definition at line 290 of file ip6.h.

◆ ip6_unregister_protocol()

void ip6_unregister_protocol ( u32  protocol)

Definition at line 1676 of file ip6_forward.c.

+ Here is the caller graph for this function:

◆ vlib_buffer_get_ip6_fib_index()

static u32 vlib_buffer_get_ip6_fib_index ( vlib_buffer_t b)
inlinestatic

Definition at line 615 of file ip6.h.

◆ vlib_buffer_push_ip6()

static void* vlib_buffer_push_ip6 ( vlib_main_t vm,
vlib_buffer_t b,
ip6_address_t *  src,
ip6_address_t *  dst,
int  proto 
)
inlinestatic

Push IPv6 header to buffer.

Parameters
vm- vlib_main
b- buffer to write the header to
src- source IP
dst- destination IP
prot- payload proto
Returns
- pointer to start of IP header

Definition at line 606 of file ip6.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vlib_buffer_push_ip6_custom()

static void* vlib_buffer_push_ip6_custom ( vlib_main_t vm,
vlib_buffer_t b,
ip6_address_t *  src,
ip6_address_t *  dst,
int  proto,
u32  flow_label 
)
inlinestatic

Push IPv6 header to buffer.

Parameters
vm- vlib_main
b- buffer to write the header to
src- source IP
dst- destination IP
prot- payload proto
flow_label- flow label
Returns
- pointer to start of IP header

Definition at line 563 of file ip6.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_set_ip6_classify_intfc()

int vnet_set_ip6_classify_intfc ( vlib_main_t vm,
u32  sw_if_index,
u32  table_index 
)

Definition at line 3045 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_set_ip6_flow_hash()

int vnet_set_ip6_flow_hash ( u32  table_id,
flow_hash_config_t  flow_hash_config 
)

Definition at line 2851 of file ip6_forward.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ ip6_discover_neighbor_node

vlib_node_registration_t ip6_discover_neighbor_node

(constructor) VLIB_REGISTER_NODE (ip6_discover_neighbor_node)

Definition at line 278 of file ip6_neighbor.c.

◆ ip6_glean_node

vlib_node_registration_t ip6_glean_node

(constructor) VLIB_REGISTER_NODE (ip6_glean_node)

Definition at line 263 of file ip6_neighbor.c.

◆ ip6_hop_by_hop_main

ip6_hop_by_hop_main_t ip6_hop_by_hop_main

Definition at line 2243 of file ip6_forward.c.

◆ ip6_input_node

vlib_node_registration_t ip6_input_node

(constructor) VLIB_REGISTER_NODE (ip6_input_node)

Definition at line 230 of file ip6_input.c.

◆ ip6_lookup_node

vlib_node_registration_t ip6_lookup_node

(constructor) VLIB_REGISTER_NODE (ip6_lookup_node)

Definition at line 741 of file ip6_forward.c.

◆ ip6_main

ip6_main_t ip6_main

Definition at line 2781 of file ip6_forward.c.

◆ ip6_midchain_node

vlib_node_registration_t ip6_midchain_node

(constructor) VLIB_REGISTER_NODE (ip6_midchain_node)

Definition at line 2190 of file ip6_forward.c.

◆ ip6_punt_node

vlib_node_registration_t ip6_punt_node

(constructor) VLIB_REGISTER_NODE (ip6_punt_node)

Definition at line 136 of file ip6_punt_drop.c.

◆ ip6_rewrite_local_node

vlib_node_registration_t ip6_rewrite_local_node

◆ ip6_rewrite_mcast_node

vlib_node_registration_t ip6_rewrite_mcast_node

(constructor) VLIB_REGISTER_NODE (ip6_rewrite_mcast_node)

Definition at line 2220 of file ip6_forward.c.

◆ ip6_rewrite_node

vlib_node_registration_t ip6_rewrite_node

(constructor) VLIB_REGISTER_NODE (ip6_rewrite_node)

Definition at line 2198 of file ip6_forward.c.

◆ serialize_vnet_ip6_main

serialize_function_t serialize_vnet_ip6_main

Definition at line 359 of file ip6.h.

◆ unserialize_vnet_ip6_main

serialize_function_t unserialize_vnet_ip6_main

Definition at line 359 of file ip6.h.