ethernet_build_rewrite (vnet_get_main (),
adj->
rewrite_header.sw_if_index,
- adj_get_link_type (ai),
+ VNET_LINK_ARP,
VNET_REWRITE_FOR_SW_INTERFACE_ADDRESS_BROADCAST));
}
* wouldn't be bad either, but that's more code than i'm prepared to
* write at this time for relatively little reward.
*/
+ /*
+ * adj_nbr_update_rewrite may actually call fib_walk_sync.
+ * fib_walk_sync may allocate a new adjacency and potentially cause
+ * a realloc for adj_pool. When that happens, adj pointer is no
+ * longer valid here.x We refresh adj pointer accordingly.
+ */
+ adj = adj_get (ai);
ip_neighbor_probe (adj);
}
break;
vnet_main_t *vnm = vnet_get_main ();
if (type == IP46_TYPE_IP4 || type == IP46_TYPE_BOTH)
- ip4_neighbor_advertise (vm, vnm, sw_if_index, &addr->ip4);
+ ip4_neighbor_advertise (vm, vnm, sw_if_index, (addr) ? &addr->ip4 : NULL);
if (type == IP46_TYPE_IP6 || type == IP46_TYPE_BOTH)
- ip6_neighbor_advertise (vm, vnm, sw_if_index, &addr->ip6);
+ ip6_neighbor_advertise (vm, vnm, sw_if_index, (addr) ? &addr->ip6 : NULL);
}
void