FD.io VPP  v19.08-27-gf4dcae4
Vector Packet Processing
ip6_neighbor.c File Reference

IPv6 Neighbor Adjacency and Neighbor Discovery. More...

+ Include dependency graph for ip6_neighbor.c:

Go to the source code of this file.

Data Structures

struct  ip6_radv_prefix_t
 
struct  ip6_mldp_group_t
 
struct  ip6_radv_t
 
struct  pending_resolution_t
 
struct  ip6_neighbor_main_t
 
union  ip6_icmp_neighbor_discovery_event_data_t
 
struct  ip6_neighbor_set_unset_rpc_args_t
 

Macros

#define ETHER_MAC_ADDR_LEN   6
 
#define MIN_ADV_VALID_LIFETIME   7203 /* seconds */
 
#define DEF_ADV_VALID_LIFETIME   2592000
 
#define DEF_ADV_PREF_LIFETIME   604800
 
#define DEF_MAX_RADV_INTERVAL   200
 
#define DEF_MIN_RADV_INTERVAL   .75 * DEF_MAX_RADV_INTERVAL
 
#define DEF_CURR_HOP_LIMIT   64
 
#define DEF_DEF_RTR_LIFETIME   3 * DEF_MAX_RADV_INTERVAL
 
#define MAX_DEF_RTR_LIFETIME   9000
 
#define MAX_INITIAL_RTR_ADVERT_INTERVAL   16 /* seconds */
 
#define MAX_INITIAL_RTR_ADVERTISEMENTS   3 /*transmissions */
 
#define MIN_DELAY_BETWEEN_RAS   3 /* seconds */
 
#define MAX_DELAY_BETWEEN_RAS   1800 /* seconds */
 
#define MAX_RA_DELAY_TIME   .5 /* seconds */
 
#define IP6_NBR_MK_KEY(k, sw_if_index, addr)
 
#define foreach_log_level
 

Enumerations

enum  ip6_icmp_neighbor_discovery_event_type_t { ICMP6_ND_EVENT_INIT }
 
enum  icmp6_neighbor_solicitation_or_advertisement_next_t { ICMP6_NEIGHBOR_SOLICITATION_NEXT_DROP, ICMP6_NEIGHBOR_SOLICITATION_NEXT_REPLY, ICMP6_NEIGHBOR_SOLICITATION_N_NEXT }
 
enum  log_level_t { foreach_log_level }
 
enum  icmp6_router_solicitation_or_advertisement_next_t { ICMP6_ROUTER_SOLICITATION_NEXT_DROP, ICMP6_ROUTER_SOLICITATION_NEXT_REPLY_RW, ICMP6_ROUTER_SOLICITATION_NEXT_REPLY_TX, ICMP6_ROUTER_SOLICITATION_N_NEXT }
 
enum  ip6_discover_neighbor_next_t { IP6_DISCOVER_NEIGHBOR_NEXT_DROP, IP6_DISCOVER_NEIGHBOR_NEXT_REPLY_TX, IP6_DISCOVER_NEIGHBOR_N_NEXT }
 
enum  ip6_discover_neighbor_error_t { IP6_DISCOVER_NEIGHBOR_ERROR_DROP, IP6_DISCOVER_NEIGHBOR_ERROR_REQUEST_SENT, IP6_DISCOVER_NEIGHBOR_ERROR_NO_SOURCE_ADDRESS }
 

Functions

static void wc_nd_signal_report (wc_nd_report_t *r)
 
static void ra_signal_report (ra_report_t *r)
 
ip6_address_t ip6_neighbor_get_link_local_address (u32 sw_if_index)
 
static int vnet_nd_wc_publish (u32 sw_if_index, const mac_address_t *mac, const ip6_address_t *ip6)
 publish wildcard arp event More...
 
void wc_nd_set_publisher_node (uword node_index, uword event_type)
 
static int ra_publish (ra_report_t *r)
 
void ra_set_publisher_node (uword node_index, uword event_type)
 
static u8format_ip6_neighbor_ip6_entry (u8 *s, va_list *va)
 
static void ip6_neighbor_adj_fib_remove (ip6_neighbor_t *n, u32 fib_index)
 
static void ip6_neighbor_set_unset_rpc_callback (ip6_neighbor_set_unset_rpc_args_t *a)
 
static void set_unset_ip6_neighbor_rpc (vlib_main_t *vm, u32 sw_if_index, const ip6_address_t *a, const mac_address_t *mac, int is_add, ip_neighbor_flags_t flags)
 
static void ip6_nbr_probe (ip_adjacency_t *adj)
 
static void ip6_nd_mk_complete (adj_index_t ai, ip6_neighbor_t *nbr)
 
static void ip6_nd_mk_incomplete (adj_index_t ai)
 
static ip6_neighbor_tip6_nd_find (u32 sw_if_index, const ip6_address_t *addr)
 
static adj_walk_rc_t ip6_nd_mk_complete_walk (adj_index_t ai, void *ctx)
 
static adj_walk_rc_t ip6_nd_mk_incomplete_walk (adj_index_t ai, void *ctx)
 
static clib_error_tip6_neighbor_sw_interface_up_down (vnet_main_t *vnm, u32 sw_if_index, u32 flags)
 
 VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION (ip6_neighbor_sw_interface_up_down)
 
void ip6_ethernet_update_adjacency (vnet_main_t *vnm, u32 sw_if_index, u32 ai)
 
static void ip6_neighbor_adj_fib_add (ip6_neighbor_t *n, u32 fib_index)
 
static ip6_neighbor_tforce_reuse_neighbor_entry (void)
 
int vnet_set_ip6_ethernet_neighbor (vlib_main_t *vm, u32 sw_if_index, const ip6_address_t *a, const mac_address_t *mac, ip_neighbor_flags_t flags)
 
int vnet_unset_ip6_ethernet_neighbor (vlib_main_t *vm, u32 sw_if_index, const ip6_address_t *a)
 
static int ip6_neighbor_sort (void *a1, void *a2)
 
ip6_neighbor_tip6_neighbors_pool (void)
 
ip6_neighbor_tip6_neighbors_entries (u32 sw_if_index)
 
static clib_error_tshow_ip6_neighbors (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static clib_error_tset_ip6_neighbor (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static_always_inline uword icmp6_neighbor_solicitation_or_advertisement (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, uword is_solicitation)
 
static void ip6_neighbor_syslog (vlib_main_t *vm, int priority, char *fmt,...)
 
clib_error_tcall_ip6_neighbor_callbacks (void *data, _vnet_ip6_neighbor_function_list_elt_t *elt)
 
static_always_inline uword icmp6_router_solicitation (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static_always_inline uword icmp6_router_advertisement (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static f64 random_f64_from_to (f64 from, f64 to)
 
static u8 get_mac_address (u32 sw_if_index, u8 *address)
 
static vlib_buffer_tcreate_buffer_for_rs (vlib_main_t *vm, ip6_radv_t *radv_info)
 
static void stop_sending_rs (vlib_main_t *vm, ip6_radv_t *ra)
 
static bool check_send_rs (vlib_main_t *vm, ip6_radv_t *radv_info, f64 current_time, f64 *due_time)
 
static uword send_rs_process (vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f0)
 
void icmp6_send_router_solicitation (vlib_main_t *vm, u32 sw_if_index, u8 stop, icmp6_send_router_solicitation_params_t *params)
 
static void ip6_neighbor_add_mld_prefix (ip6_radv_t *radv_info, ip6_address_t *addr)
 Add a multicast Address to the advertised MLD set. More...
 
static void ip6_neighbor_del_mld_prefix (ip6_radv_t *radv_info, ip6_address_t *addr)
 Delete a multicast Address from the advertised MLD set. More...
 
static void ip6_neighbor_add_mld_grp (ip6_radv_t *a, ip6_multicast_address_scope_t scope, ip6_multicast_link_local_group_id_t group)
 Add a multicast Address to the advertised MLD set. More...
 
u32 ip6_neighbor_sw_interface_add_del (vnet_main_t *vnm, u32 sw_if_index, u32 is_add)
 create and initialize router advertisement parameters with default values for this intfc More...
 
static void ip6_neighbor_send_mldpv2_report (u32 sw_if_index)
 
static uword ip6_neighbor_process_timer_event (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static uword ip6_icmp_neighbor_discovery_event_process (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static uword icmp6_neighbor_solicitation (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static uword icmp6_neighbor_advertisement (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static uword ip6_discover_neighbor_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int is_glean)
 
static uword ip6_discover_neighbor (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static uword ip6_glean (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
int ip6_neighbor_ra_config (vlib_main_t *vm, u32 sw_if_index, u8 suppress, u8 managed, u8 other, u8 ll_option, u8 send_unicast, u8 cease, u8 use_lifetime, u32 lifetime, u32 initial_count, u32 initial_interval, u32 max_interval, u32 min_interval, u8 is_no)
 
int ip6_neighbor_ra_prefix (vlib_main_t *vm, u32 sw_if_index, ip6_address_t *prefix_addr, u8 prefix_len, u8 use_default, u32 val_lifetime, u32 pref_lifetime, u8 no_advertise, u8 off_link, u8 no_autoconfig, u8 no_onlink, u8 is_no)
 
clib_error_tip6_neighbor_cmd (vlib_main_t *vm, unformat_input_t *main_input, vlib_cli_command_t *cmd)
 
static void ip6_print_addrs (vlib_main_t *vm, u32 *addrs)
 
static clib_error_tshow_ip6_interface_cmd (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
clib_error_tdisable_ip6_interface (vlib_main_t *vm, u32 sw_if_index)
 
int ip6_interface_enabled (vlib_main_t *vm, u32 sw_if_index)
 
clib_error_tenable_ip6_interface (vlib_main_t *vm, u32 sw_if_index)
 
int ip6_get_ll_address (u32 sw_if_index, ip6_address_t *addr)
 
static clib_error_tenable_ip6_interface_cmd (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static clib_error_tdisable_ip6_interface_cmd (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
clib_error_tip6_neighbor_set_link_local_address (vlib_main_t *vm, u32 sw_if_index, ip6_address_t *address)
 
static void ip6_neighbor_add_del_interface_address (ip6_main_t *im, uword opaque, u32 sw_if_index, ip6_address_t *address, u32 address_length, u32 if_address_index, u32 is_delete)
 callback when an interface address is added or deleted More...
 
clib_error_tip6_set_neighbor_limit (u32 neighbor_limit)
 
static void ip6_neighbor_table_bind (ip6_main_t *im, uword opaque, u32 sw_if_index, u32 new_fib_index, u32 old_fib_index)
 
static clib_error_tip6_neighbor_init (vlib_main_t *vm)
 
void vnet_register_ip6_neighbor_resolution_event (vnet_main_t *vnm, void *address_arg, uword node_index, uword type_opaque, uword data)
 
int vnet_add_del_ip6_nd_change_event (vnet_main_t *vnm, ip6_nd_change_event_cb_t data_callback, u32 pid, void *address_arg, uword node_index, uword type_opaque, uword data, int is_add)
 
int vnet_ip6_nd_term (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_buffer_t *p0, ethernet_header_t *eth, ip6_header_t *ip, u32 sw_if_index, u16 bd_index)
 
int ip6_neighbor_proxy_add_del (u32 sw_if_index, ip6_address_t *addr, u8 is_del)
 
static clib_error_tset_ip6_nd_proxy_cmd (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
void ethernet_ndp_change_mac (u32 sw_if_index)
 
void send_ip6_na (vlib_main_t *vm, u32 sw_if_index)
 
void send_ip6_na_w_addr (vlib_main_t *vm, const ip6_address_t *ip6_addr, u32 sw_if_index)
 

Variables

static ip6_neighbor_main_t ip6_neighbor_main
 
ip6_neighbor_public_main_t ip6_neighbor_public_main
 
static ip6_address_t ip6a_zero
 
static vlib_cli_command_t show_ip6_neighbors_command
 (constructor) VLIB_CLI_COMMAND (show_ip6_neighbors_command) More...
 
static vlib_cli_command_t set_ip6_neighbor_command
 (constructor) VLIB_CLI_COMMAND (set_ip6_neighbor_command) More...
 
static char * log_level_strings []
 
static int logmask = 1 << LOG_DEBUG
 
vlib_node_registration_t send_rs_process_node
 (constructor) VLIB_REGISTER_NODE (send_rs_process_node) More...
 
static vlib_node_registration_t ip6_icmp_router_solicitation_node
 (constructor) VLIB_REGISTER_NODE (ip6_icmp_router_solicitation_node) More...
 
static vlib_node_registration_t ip6_icmp_router_advertisement_node
 (constructor) VLIB_REGISTER_NODE (ip6_icmp_router_advertisement_node) More...
 
vlib_node_registration_t ip6_icmp_neighbor_discovery_event_node
 
static vlib_node_registration_t ip6_icmp_neighbor_solicitation_node
 (constructor) VLIB_REGISTER_NODE (ip6_icmp_neighbor_solicitation_node) More...
 
static vlib_node_registration_t ip6_icmp_neighbor_advertisement_node
 (constructor) VLIB_REGISTER_NODE (ip6_icmp_neighbor_advertisement_node) More...
 
static char * ip6_discover_neighbor_error_strings []
 
vlib_node_registration_t ip6_glean_node
 (constructor) VLIB_REGISTER_NODE (ip6_glean_node) More...
 
vlib_node_registration_t ip6_discover_neighbor_node
 (constructor) VLIB_REGISTER_NODE (ip6_discover_neighbor_node) More...
 
static vlib_cli_command_t show_ip6_interface_command
 (constructor) VLIB_CLI_COMMAND (show_ip6_interface_command) More...
 
static vlib_cli_command_t enable_ip6_interface_command
 (constructor) VLIB_CLI_COMMAND (enable_ip6_interface_command) More...
 
static vlib_cli_command_t disable_ip6_interface_command
 (constructor) VLIB_CLI_COMMAND (disable_ip6_interface_command) More...
 
static vlib_cli_command_t ip6_nd_command
 (constructor) VLIB_CLI_COMMAND (ip6_nd_command) More...
 
static vlib_cli_command_t set_ip6_nd_proxy_command
 (constructor) VLIB_CLI_COMMAND (set_ip6_nd_proxy_command) More...
 

Detailed Description

IPv6 Neighbor Adjacency and Neighbor Discovery.

The files contains the API and CLI code for managing IPv6 neighbor adjacency tables and neighbor discovery logic.

Definition in file ip6_neighbor.c.

Macro Definition Documentation

#define DEF_ADV_PREF_LIFETIME   604800

Definition at line 64 of file ip6_neighbor.c.

#define DEF_ADV_VALID_LIFETIME   2592000

Definition at line 63 of file ip6_neighbor.c.

#define DEF_CURR_HOP_LIMIT   64

Definition at line 127 of file ip6_neighbor.c.

#define DEF_DEF_RTR_LIFETIME   3 * DEF_MAX_RADV_INTERVAL

Definition at line 128 of file ip6_neighbor.c.

#define DEF_MAX_RADV_INTERVAL   200

Definition at line 125 of file ip6_neighbor.c.

#define DEF_MIN_RADV_INTERVAL   .75 * DEF_MAX_RADV_INTERVAL

Definition at line 126 of file ip6_neighbor.c.

#define ETHER_MAC_ADDR_LEN   6

Definition at line 40 of file ip6_neighbor.c.

#define foreach_log_level
Value:
_ (DEBUG, "DEBUG") \
_ (INFO, "INFORMATION") \
_ (NOTICE, "NOTICE") \
_ (WARNING, "WARNING") \
_ (ERR, "ERROR") \
_ (CRIT, "CRITICAL") \
_ (ALERT, "ALERT") \
_ (EMERG, "EMERGENCY")
#define INFO(...)
Definition: main.c:64
#define DEBUG
Definition: dlmalloc.c:32

Definition at line 1405 of file ip6_neighbor.c.

#define IP6_NBR_MK_KEY (   k,
  sw_if_index,
  addr 
)
Value:
{ \
k.sw_if_index = sw_if_index; \
k.ip6_address = *addr; \
k.pad = 0; \
}
vhost_vring_addr_t addr
Definition: vhost_user.h:147
vl_api_interface_index_t sw_if_index
Definition: gre.api:50

Definition at line 516 of file ip6_neighbor.c.

#define MAX_DEF_RTR_LIFETIME   9000

Definition at line 129 of file ip6_neighbor.c.

#define MAX_DELAY_BETWEEN_RAS   1800 /* seconds */

Definition at line 134 of file ip6_neighbor.c.

#define MAX_INITIAL_RTR_ADVERT_INTERVAL   16 /* seconds */

Definition at line 131 of file ip6_neighbor.c.

#define MAX_INITIAL_RTR_ADVERTISEMENTS   3 /*transmissions */

Definition at line 132 of file ip6_neighbor.c.

#define MAX_RA_DELAY_TIME   .5 /* seconds */

Definition at line 135 of file ip6_neighbor.c.

#define MIN_ADV_VALID_LIFETIME   7203 /* seconds */

Definition at line 62 of file ip6_neighbor.c.

#define MIN_DELAY_BETWEEN_RAS   3 /* seconds */

Definition at line 133 of file ip6_neighbor.c.

Enumeration Type Documentation

Enumerator
ICMP6_NEIGHBOR_SOLICITATION_NEXT_DROP 
ICMP6_NEIGHBOR_SOLICITATION_NEXT_REPLY 
ICMP6_NEIGHBOR_SOLICITATION_N_NEXT 

Definition at line 1141 of file ip6_neighbor.c.

Enumerator
ICMP6_ROUTER_SOLICITATION_NEXT_DROP 
ICMP6_ROUTER_SOLICITATION_NEXT_REPLY_RW 
ICMP6_ROUTER_SOLICITATION_NEXT_REPLY_TX 
ICMP6_ROUTER_SOLICITATION_N_NEXT 

Definition at line 1478 of file ip6_neighbor.c.

Enumerator
IP6_DISCOVER_NEIGHBOR_ERROR_DROP 
IP6_DISCOVER_NEIGHBOR_ERROR_REQUEST_SENT 
IP6_DISCOVER_NEIGHBOR_ERROR_NO_SOURCE_ADDRESS 

Definition at line 3152 of file ip6_neighbor.c.

Enumerator
IP6_DISCOVER_NEIGHBOR_NEXT_DROP 
IP6_DISCOVER_NEIGHBOR_NEXT_REPLY_TX 
IP6_DISCOVER_NEIGHBOR_N_NEXT 

Definition at line 3145 of file ip6_neighbor.c.

Enumerator
ICMP6_ND_EVENT_INIT 

Definition at line 219 of file ip6_neighbor.c.

Enumerator
foreach_log_level 

Definition at line 1415 of file ip6_neighbor.c.

Function Documentation

clib_error_t* call_ip6_neighbor_callbacks ( void *  data,
_vnet_ip6_neighbor_function_list_elt_t *  elt 
)

Definition at line 1461 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static bool check_send_rs ( vlib_main_t vm,
ip6_radv_t radv_info,
f64  current_time,
f64 due_time 
)
inlinestatic

Definition at line 2378 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static vlib_buffer_t* create_buffer_for_rs ( vlib_main_t vm,
ip6_radv_t radv_info 
)
inlinestatic

Definition at line 2298 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* disable_ip6_interface ( vlib_main_t vm,
u32  sw_if_index 
)

Definition at line 4076 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* disable_ip6_interface_cmd ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 4270 of file ip6_neighbor.c.

+ Here is the call graph for this function:

clib_error_t* enable_ip6_interface ( vlib_main_t vm,
u32  sw_if_index 
)

Definition at line 4129 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* enable_ip6_interface_cmd ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 4231 of file ip6_neighbor.c.

+ Here is the call graph for this function:

void ethernet_ndp_change_mac ( u32  sw_if_index)

Definition at line 4914 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static ip6_neighbor_t* force_reuse_neighbor_entry ( void  )
static

Definition at line 729 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8* format_ip6_neighbor_ip6_entry ( u8 s,
va_list *  va 
)
static

Definition at line 339 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8 get_mac_address ( u32  sw_if_index,
u8 address 
)
inlinestatic

Definition at line 2287 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword icmp6_neighbor_advertisement ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 3101 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static uword icmp6_neighbor_solicitation ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 3092 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static_always_inline uword icmp6_neighbor_solicitation_or_advertisement ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
uword  is_solicitation 
)

Definition at line 1149 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static_always_inline uword icmp6_router_advertisement ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)

Definition at line 1907 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static_always_inline uword icmp6_router_solicitation ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)

Definition at line 1487 of file ip6_neighbor.c.

+ Here is the call graph for this function:

void icmp6_send_router_solicitation ( vlib_main_t vm,
u32  sw_if_index,
u8  stop,
icmp6_send_router_solicitation_params_t params 
)

Definition at line 2485 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip6_discover_neighbor ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 3335 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static uword ip6_discover_neighbor_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
int  is_glean 
)
static

Definition at line 3160 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ip6_ethernet_update_adjacency ( vnet_main_t vnm,
u32  sw_if_index,
u32  ai 
)

Definition at line 609 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int ip6_get_ll_address ( u32  sw_if_index,
ip6_address_t addr 
)

Definition at line 4210 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static uword ip6_glean ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 3342 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static uword ip6_icmp_neighbor_discovery_event_process ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 3024 of file ip6_neighbor.c.

+ Here is the call graph for this function:

int ip6_interface_enabled ( vlib_main_t vm,
u32  sw_if_index 
)

Definition at line 4114 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static void ip6_nbr_probe ( ip_adjacency_t adj)
static

Definition at line 423 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ip6_neighbor_t* ip6_nd_find ( u32  sw_if_index,
const ip6_address_t addr 
)
static

Definition at line 524 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_nd_mk_complete ( adj_index_t  ai,
ip6_neighbor_t nbr 
)
static

Definition at line 493 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static adj_walk_rc_t ip6_nd_mk_complete_walk ( adj_index_t  ai,
void *  ctx 
)
static

Definition at line 543 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_nd_mk_incomplete ( adj_index_t  ai)
static

Definition at line 503 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static adj_walk_rc_t ip6_nd_mk_incomplete_walk ( adj_index_t  ai,
void *  ctx 
)
static

Definition at line 553 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_add_del_interface_address ( ip6_main_t im,
uword  opaque,
u32  sw_if_index,
ip6_address_t address,
u32  address_length,
u32  if_address_index,
u32  is_delete 
)
static

callback when an interface address is added or deleted

Definition at line 4480 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_add_mld_grp ( ip6_radv_t a,
ip6_multicast_address_scope_t  scope,
ip6_multicast_link_local_group_id_t  group 
)
static

Add a multicast Address to the advertised MLD set.

Definition at line 2574 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_add_mld_prefix ( ip6_radv_t radv_info,
ip6_address_t addr 
)
static

Add a multicast Address to the advertised MLD set.

Definition at line 2520 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_adj_fib_add ( ip6_neighbor_t n,
u32  fib_index 
)
static

Definition at line 700 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_adj_fib_remove ( ip6_neighbor_t n,
u32  fib_index 
)
static

Definition at line 361 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* ip6_neighbor_cmd ( vlib_main_t vm,
unformat_input_t main_input,
vlib_cli_command_t cmd 
)

Definition at line 3628 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static void ip6_neighbor_del_mld_prefix ( ip6_radv_t radv_info,
ip6_address_t addr 
)
static

Delete a multicast Address from the advertised MLD set.

Definition at line 2553 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ip6_address_t ip6_neighbor_get_link_local_address ( u32  sw_if_index)

Definition at line 242 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static clib_error_t* ip6_neighbor_init ( vlib_main_t vm)
static

Definition at line 4587 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword ip6_neighbor_process_timer_event ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 2896 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int ip6_neighbor_proxy_add_del ( u32  sw_if_index,
ip6_address_t addr,
u8  is_del 
)

Definition at line 4829 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int ip6_neighbor_ra_config ( vlib_main_t vm,
u32  sw_if_index,
u8  suppress,
u8  managed,
u8  other,
u8  ll_option,
u8  send_unicast,
u8  cease,
u8  use_lifetime,
u32  lifetime,
u32  initial_count,
u32  initial_interval,
u32  max_interval,
u32  min_interval,
u8  is_no 
)

Definition at line 3389 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int ip6_neighbor_ra_prefix ( vlib_main_t vm,
u32  sw_if_index,
ip6_address_t prefix_addr,
u8  prefix_len,
u8  use_default,
u32  val_lifetime,
u32  pref_lifetime,
u8  no_advertise,
u8  off_link,
u8  no_autoconfig,
u8  no_onlink,
u8  is_no 
)

Definition at line 3491 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_send_mldpv2_report ( u32  sw_if_index)
static

Definition at line 2723 of file ip6_neighbor.c.

+ Here is the call graph for this function:

clib_error_t* ip6_neighbor_set_link_local_address ( vlib_main_t vm,
u32  sw_if_index,
ip6_address_t address 
)

Definition at line 4433 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_set_unset_rpc_callback ( ip6_neighbor_set_unset_rpc_args_t a)
static

Definition at line 954 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int ip6_neighbor_sort ( void *  a1,
void *  a2 
)
static

Definition at line 965 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 ip6_neighbor_sw_interface_add_del ( vnet_main_t vnm,
u32  sw_if_index,
u32  is_add 
)

create and initialize router advertisement parameters with default values for this intfc

Definition at line 2590 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* ip6_neighbor_sw_interface_up_down ( vnet_main_t vnm,
u32  sw_if_index,
u32  flags 
)
static

Definition at line 561 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static void ip6_neighbor_syslog ( vlib_main_t vm,
int  priority,
char *  fmt,
  ... 
)
static

Definition at line 1431 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void ip6_neighbor_table_bind ( ip6_main_t im,
uword  opaque,
u32  sw_if_index,
u32  new_fib_index,
u32  old_fib_index 
)
static

Definition at line 4560 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ip6_neighbor_t* ip6_neighbors_entries ( u32  sw_if_index)

Definition at line 985 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ip6_neighbor_t* ip6_neighbors_pool ( void  )

Definition at line 978 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static void ip6_print_addrs ( vlib_main_t vm,
u32 addrs 
)
static

Definition at line 3860 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

clib_error_t* ip6_set_neighbor_limit ( u32  neighbor_limit)

Definition at line 4551 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static int ra_publish ( ra_report_t r)
static

Definition at line 308 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ra_set_publisher_node ( uword  node_index,
uword  event_type 
)

Definition at line 331 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static void ra_signal_report ( ra_report_t r)
static

Definition at line 316 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static f64 random_f64_from_to ( f64  from,
f64  to 
)
inlinestatic

Definition at line 2274 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void send_ip6_na ( vlib_main_t vm,
u32  sw_if_index 
)

Definition at line 4939 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void send_ip6_na_w_addr ( vlib_main_t vm,
const ip6_address_t ip6_addr,
u32  sw_if_index 
)

Definition at line 4948 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword send_rs_process ( vlib_main_t vm,
vlib_node_runtime_t rt,
vlib_frame_t f0 
)
static

Definition at line 2437 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static clib_error_t* set_ip6_nd_proxy_cmd ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 4876 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static clib_error_t* set_ip6_neighbor ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 1080 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static void set_unset_ip6_neighbor_rpc ( vlib_main_t vm,
u32  sw_if_index,
const ip6_address_t a,
const mac_address_t mac,
int  is_add,
ip_neighbor_flags_t  flags 
)
static

Definition at line 404 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* show_ip6_interface_cmd ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 3877 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static clib_error_t* show_ip6_neighbors ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 1005 of file ip6_neighbor.c.

+ Here is the call graph for this function:

static void stop_sending_rs ( vlib_main_t vm,
ip6_radv_t ra 
)
inlinestatic

Definition at line 2364 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_add_del_ip6_nd_change_event ( vnet_main_t vnm,
ip6_nd_change_event_cb_t  data_callback,
u32  pid,
void *  address_arg,
uword  node_index,
uword  type_opaque,
uword  data,
int  is_add 
)

Definition at line 4680 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_ip6_nd_term ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_buffer_t p0,
ethernet_header_t eth,
ip6_header_t ip,
u32  sw_if_index,
u16  bd_index 
)

Definition at line 4750 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int vnet_nd_wc_publish ( u32  sw_if_index,
const mac_address_t mac,
const ip6_address_t ip6 
)
static

publish wildcard arp event

Parameters
sw_if_indexThe interface on which the ARP entries are acted

Definition at line 270 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void vnet_register_ip6_neighbor_resolution_event ( vnet_main_t vnm,
void *  address_arg,
uword  node_index,
uword  type_opaque,
uword  data 
)

Definition at line 4650 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int vnet_set_ip6_ethernet_neighbor ( vlib_main_t vm,
u32  sw_if_index,
const ip6_address_t a,
const mac_address_t mac,
ip_neighbor_flags_t  flags 
)

Definition at line 760 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION ( ip6_neighbor_sw_interface_up_down  )

+ Here is the caller graph for this function:

int vnet_unset_ip6_ethernet_neighbor ( vlib_main_t vm,
u32  sw_if_index,
const ip6_address_t a 
)

Definition at line 912 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void wc_nd_set_publisher_node ( uword  node_index,
uword  event_type 
)

Definition at line 300 of file ip6_neighbor.c.

+ Here is the caller graph for this function:

static void wc_nd_signal_report ( wc_nd_report_t r)
static

Definition at line 284 of file ip6_neighbor.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

vlib_cli_command_t disable_ip6_interface_command
static
Initial value:
=
{
.path = "disable ip6 interface",
.short_help = "disable ip6 interface <interface>",
}
static clib_error_t * disable_ip6_interface_cmd(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (disable_ip6_interface_command)

Definition at line 4300 of file ip6_neighbor.c.

vlib_cli_command_t enable_ip6_interface_command
static
Initial value:
=
{
.path = "enable ip6 interface",
.short_help = "enable ip6 interface <interface>",
}
static clib_error_t * enable_ip6_interface_cmd(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (enable_ip6_interface_command)

Definition at line 4261 of file ip6_neighbor.c.

char* ip6_discover_neighbor_error_strings[]
static
vlib_node_registration_t ip6_discover_neighbor_node
Initial value:
=
{
.function = ip6_discover_neighbor,
.name = "ip6-discover-neighbor",
.vector_size = sizeof (u32),
.next_nodes =
{
[IP6_DISCOVER_NEIGHBOR_NEXT_REPLY_TX] = "ip6-rewrite-mcast",
},
}
unsigned int u32
Definition: types.h:88
static char * ip6_discover_neighbor_error_strings[]
static uword ip6_discover_neighbor(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
#define ARRAY_LEN(x)
Definition: clib.h:62
u8 * format_ip6_forward_next_trace(u8 *s, va_list *args)
Definition: ip6_forward.c:762

(constructor) VLIB_REGISTER_NODE (ip6_discover_neighbor_node)

Definition at line 3370 of file ip6_neighbor.c.

vlib_node_registration_t ip6_glean_node
Initial value:
=
{
.function = ip6_glean,
.name = "ip6-glean",
.vector_size = sizeof (u32),
.next_nodes =
{
[IP6_DISCOVER_NEIGHBOR_NEXT_REPLY_TX] = "ip6-rewrite-mcast",
},
}
static uword ip6_glean(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
unsigned int u32
Definition: types.h:88
static char * ip6_discover_neighbor_error_strings[]
#define ARRAY_LEN(x)
Definition: clib.h:62
u8 * format_ip6_forward_next_trace(u8 *s, va_list *args)
Definition: ip6_forward.c:762

(constructor) VLIB_REGISTER_NODE (ip6_glean_node)

Definition at line 3355 of file ip6_neighbor.c.

vlib_node_registration_t ip6_icmp_neighbor_advertisement_node
static
Initial value:
=
{
.name = "icmp6-neighbor-advertisement",
.vector_size = sizeof (u32),
.format_trace = format_icmp6_input_trace,
.n_next_nodes = 1,
.next_nodes = {
[0] = "ip6-drop",
},
}
unsigned int u32
Definition: types.h:88
static uword icmp6_neighbor_advertisement(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
format_function_t format_icmp6_input_trace
Definition: icmp6.h:65

(constructor) VLIB_REGISTER_NODE (ip6_icmp_neighbor_advertisement_node)

Definition at line 3129 of file ip6_neighbor.c.

vlib_node_registration_t ip6_icmp_neighbor_discovery_event_node
Initial value:
= {
.name = "ip6-icmp-neighbor-discovery-event-process",
}
static uword ip6_icmp_neighbor_discovery_event_process(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)

Definition at line 3084 of file ip6_neighbor.c.

vlib_node_registration_t ip6_icmp_neighbor_solicitation_node
static
Initial value:
=
{
.name = "icmp6-neighbor-solicitation",
.vector_size = sizeof (u32),
.format_trace = format_icmp6_input_trace,
.next_nodes = {
},
}
unsigned int u32
Definition: types.h:88
static uword icmp6_neighbor_solicitation(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
format_function_t format_icmp6_input_trace
Definition: icmp6.h:65

(constructor) VLIB_REGISTER_NODE (ip6_icmp_neighbor_solicitation_node)

Definition at line 3111 of file ip6_neighbor.c.

vlib_node_registration_t ip6_icmp_router_advertisement_node
static
Initial value:
=
{
.name = "icmp6-router-advertisement",
.vector_size = sizeof (u32),
.format_trace = format_icmp6_input_trace,
.n_next_nodes = 1,
.next_nodes = {
[0] = "ip6-drop",
},
}
unsigned int u32
Definition: types.h:88
static_always_inline uword icmp6_router_advertisement(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
format_function_t format_icmp6_input_trace
Definition: icmp6.h:65

(constructor) VLIB_REGISTER_NODE (ip6_icmp_router_advertisement_node)

Definition at line 3068 of file ip6_neighbor.c.

vlib_node_registration_t ip6_icmp_router_solicitation_node
static
Initial value:
=
{
.name = "icmp6-router-solicitation",
.vector_size = sizeof (u32),
.format_trace = format_icmp6_input_trace,
.next_nodes = {
[ICMP6_ROUTER_SOLICITATION_NEXT_REPLY_RW] = "ip6-rewrite-mcast",
},
}
unsigned int u32
Definition: types.h:88
static_always_inline uword icmp6_router_solicitation(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
format_function_t format_icmp6_input_trace
Definition: icmp6.h:65

(constructor) VLIB_REGISTER_NODE (ip6_icmp_router_solicitation_node)

Definition at line 2876 of file ip6_neighbor.c.

vlib_cli_command_t ip6_nd_command
static
Initial value:
=
{
.path = "ip6 nd",
.short_help = "ip6 nd <interface> ...",
.function = ip6_neighbor_cmd,
}
clib_error_t * ip6_neighbor_cmd(vlib_main_t *vm, unformat_input_t *main_input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (ip6_nd_command)

Definition at line 4424 of file ip6_neighbor.c.

ip6_neighbor_main_t ip6_neighbor_main
static

Definition at line 234 of file ip6_neighbor.c.

ip6_neighbor_public_main_t ip6_neighbor_public_main

Definition at line 235 of file ip6_neighbor.c.

ip6_address_t ip6a_zero
static

Definition at line 236 of file ip6_neighbor.c.

char* log_level_strings[]
static
Initial value:
= {
#define _(f,s)
}
#define foreach_log_level

Definition at line 1422 of file ip6_neighbor.c.

int logmask = 1 << LOG_DEBUG
static

Definition at line 1428 of file ip6_neighbor.c.

vlib_node_registration_t send_rs_process_node
Initial value:
= {
.function = send_rs_process,
.name = "send-rs-process",
}
static uword send_rs_process(vlib_main_t *vm, vlib_node_runtime_t *rt, vlib_frame_t *f0)

(constructor) VLIB_REGISTER_NODE (send_rs_process_node)

Definition at line 2477 of file ip6_neighbor.c.

vlib_cli_command_t set_ip6_nd_proxy_command
static
Initial value:
=
{
.path = "set ip6 nd proxy",
.short_help = "set ip6 nd proxy <HOST> <INTERFACE>",
.function = set_ip6_nd_proxy_cmd,
}
static clib_error_t * set_ip6_nd_proxy_cmd(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (set_ip6_nd_proxy_command)

Definition at line 4905 of file ip6_neighbor.c.

vlib_cli_command_t set_ip6_neighbor_command
static
Initial value:
=
{
.path = "set ip6 neighbor",
.function = set_ip6_neighbor,
.short_help = "set ip6 neighbor [del] <interface> <ip6-address> <mac-address> [static]",
}
static clib_error_t * set_ip6_neighbor(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (set_ip6_neighbor_command)

Definition at line 1133 of file ip6_neighbor.c.

vlib_cli_command_t show_ip6_interface_command
static
Initial value:
=
{
.path = "show ip6 interface",
.short_help = "show ip6 interface <interface>",
}
static clib_error_t * show_ip6_interface_cmd(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (show_ip6_interface_command)

Definition at line 4067 of file ip6_neighbor.c.

vlib_cli_command_t show_ip6_neighbors_command
static
Initial value:
= {
.path = "show ip6 neighbors",
.function = show_ip6_neighbors,
.short_help = "show ip6 neighbors [<interface>]",
}
static clib_error_t * show_ip6_neighbors(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)

(constructor) VLIB_CLI_COMMAND (show_ip6_neighbors_command)

Definition at line 1072 of file ip6_neighbor.c.