X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip6_forward.c;h=41f5b151a09043d84954aa41ac556b75859ffc73;hb=067cd6229a47ea3ba8b59a2a04090e80afb5bd2c;hp=f7946b0b3afd3bfccc886f090ce36502a041f38b;hpb=313f7e2feac232ac841ad8a9d5e21e8387514803;p=vpp.git diff --git a/src/vnet/ip/ip6_forward.c b/src/vnet/ip/ip6_forward.c index f7946b0b3af..41f5b151a09 100644 --- a/src/vnet/ip/ip6_forward.c +++ b/src/vnet/ip/ip6_forward.c @@ -522,14 +522,14 @@ VLIB_REGISTER_NODE (ip6_lookup_node) = VLIB_NODE_FUNCTION_MULTIARCH (ip6_lookup_node, ip6_lookup); -always_inline uword +static uword ip6_load_balance (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { vlib_combined_counter_main_t *cm = &load_balance_main.lbm_via_counters; u32 n_left_from, n_left_to_next, *from, *to_next; ip_lookup_next_t next; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; ip6_main_t *im = &ip6_main; from = vlib_frame_vector_args (frame); @@ -1435,7 +1435,8 @@ ip6_register_protocol (u32 protocol, u32 node_index) } clib_error_t * -ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index) +ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index, + u8 refresh) { vnet_main_t *vnm = vnet_get_main (); ip6_main_t *im = &ip6_main; @@ -1475,6 +1476,8 @@ ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index) vlib_packet_template_get_packet (vm, &im->discover_neighbor_packet_template, &bi); + if (!h) + return clib_error_return (0, "ICMP6 NS packet allocation failed"); hi = vnet_get_sup_hw_interface (vnm, sw_if_index); @@ -1516,7 +1519,7 @@ ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index) adj = adj_get (ai); /* Peer has been previously resolved, retrieve glean adj instead */ - if (adj->lookup_next_index == IP_LOOKUP_NEXT_REWRITE) + if (adj->lookup_next_index == IP_LOOKUP_NEXT_REWRITE && refresh == 0) { adj_unlock (ai); ai = adj_glean_add_or_lock (FIB_PROTOCOL_IP6, @@ -1591,7 +1594,7 @@ ip6_rewrite_inline (vlib_main_t * vm, n_left_from = frame->n_vectors; next_index = node->cached_next_index; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; while (n_left_from > 0) {