reassembly: feature/concurrency
[vpp.git] / src / vnet / ip / ip6_forward.c
index 4fd7129..2c00111 100644 (file)
@@ -432,8 +432,9 @@ ip6_sw_interface_add_del (vnet_main_t * vnm, u32 sw_if_index, u32 is_add)
       vlib_main_t *vm = vlib_get_main ();
 
       ip6_neighbor_sw_interface_add_del (vnm, sw_if_index, 0 /* is_add */ );
+      vnet_sw_interface_update_unnumbered (sw_if_index, ~0, 0);
       /* *INDENT-OFF* */
-      foreach_ip_interface_address (lm6, ia, sw_if_index, 1 /* honor unnumbered */,
+      foreach_ip_interface_address (lm6, ia, sw_if_index, 0,
       ({
         address = ip_interface_address_get_address (lm6, ia);
         ip6_add_del_interface_address(vm, sw_if_index, address, ia->address_length, 1);
@@ -1351,7 +1352,6 @@ VLIB_REGISTER_NODE (ip6_local_node, static) =
     [IP_LOCAL_NEXT_PUNT] = "ip6-punt",
     [IP_LOCAL_NEXT_UDP_LOOKUP] = "ip6-udp-lookup",
     [IP_LOCAL_NEXT_ICMP] = "ip6-icmp-input",
-    [IP_LOCAL_NEXT_REASSEMBLY] = "ip6-reassembly",
   },
 };
 /* *INDENT-ON* */
@@ -1548,9 +1548,10 @@ ip6_discover_neighbor_inline (vlib_main_t * vm,
             * Choose source address based on destination lookup
             * adjacency.
             */
-           if (ip6_src_address_for_packet (lm,
-                                           sw_if_index0,
-                                           &h0->ip.src_address))
+           if (!ip6_src_address_for_packet (lm,
+                                            sw_if_index0,
+                                            &ip0->dst_address,
+                                            &h0->ip.src_address))
              {
                /* There is no address on the interface */
                p0->error =
@@ -1744,7 +1745,8 @@ ip6_probe_neighbor (vlib_main_t * vm, ip6_address_t * dst, u32 sw_if_index)
   if (adj->lookup_next_index == IP_LOOKUP_NEXT_REWRITE)
     {
       adj_unlock (ai);
-      ai = adj_glean_add_or_lock (FIB_PROTOCOL_IP6, sw_if_index, &nh);
+      ai = adj_glean_add_or_lock (FIB_PROTOCOL_IP6,
+                                 VNET_LINK_IP6, sw_if_index, &nh);
       adj = adj_get (ai);
     }