diff options
Diffstat (limited to 'vnet/vnet/adj')
-rw-r--r-- | vnet/vnet/adj/adj.c | 10 | ||||
-rw-r--r-- | vnet/vnet/adj/adj_internal.h | 3 | ||||
-rw-r--r-- | vnet/vnet/adj/adj_nbr.c | 4 |
3 files changed, 14 insertions, 3 deletions
diff --git a/vnet/vnet/adj/adj.c b/vnet/vnet/adj/adj.c index 24f7662d943..2741c885cee 100644 --- a/vnet/vnet/adj/adj.c +++ b/vnet/vnet/adj/adj.c @@ -61,6 +61,7 @@ adj_alloc (fib_protocol_t proto) adj->mcast_group_index = ~0; adj->saved_lookup_next_index = 0; adj->n_adj = 1; + adj->lookup_next_index = 0; fib_node_init(&adj->ia_node, FIB_NODE_TYPE_ADJ); @@ -163,7 +164,8 @@ adj_last_lock_gone (ip_adjacency_t *adj) /* * complete and incomplete nbr adjs */ - adj_nbr_remove(adj->ia_nh_proto, + adj_nbr_remove(adj_get_index(adj), + adj->ia_nh_proto, adj->ia_link, &adj->sub_type.nbr.next_hop, adj->rewrite_header.sw_if_index); @@ -376,6 +378,12 @@ adj_show (vlib_main_t * vm, if (ADJ_INDEX_INVALID != ai) { + if (pool_is_free_index(adj_pool, ai)) + { + vlib_cli_output (vm, "adjacency %d invalid", ai); + return 0; + } + vlib_cli_output (vm, "[@%d] %U", ai, format_ip_adjacency, ai, diff --git a/vnet/vnet/adj/adj_internal.h b/vnet/vnet/adj/adj_internal.h index e3e0e04c99a..833bc7c9e01 100644 --- a/vnet/vnet/adj/adj_internal.h +++ b/vnet/vnet/adj/adj_internal.h @@ -93,7 +93,8 @@ extern void adj_nbr_update_rewrite_internal (ip_adjacency_t *adj, extern ip_adjacency_t * adj_alloc(fib_protocol_t proto); -extern void adj_nbr_remove(fib_protocol_t nh_proto, +extern void adj_nbr_remove(adj_index_t ai, + fib_protocol_t nh_proto, vnet_link_t link_type, const ip46_address_t *nh_addr, u32 sw_if_index); diff --git a/vnet/vnet/adj/adj_nbr.c b/vnet/vnet/adj/adj_nbr.c index 1a78ecbc49f..003e18e8d66 100644 --- a/vnet/vnet/adj/adj_nbr.c +++ b/vnet/vnet/adj/adj_nbr.c @@ -76,7 +76,8 @@ adj_nbr_insert (fib_protocol_t nh_proto, } void -adj_nbr_remove (fib_protocol_t nh_proto, +adj_nbr_remove (adj_index_t ai, + fib_protocol_t nh_proto, vnet_link_t link_type, const ip46_address_t *nh_addr, u32 sw_if_index) @@ -87,6 +88,7 @@ adj_nbr_remove (fib_protocol_t nh_proto, return; ADJ_NBR_SET_KEY(kv, link_type, nh_addr); + kv.value = ai; BV(clib_bihash_add_del) (adj_nbr_tables[nh_proto][sw_if_index], &kv, 0); } |