*/
#include <vnet/ip/ping.h>
+#include <vnet/fib/ip6_fib.h>
+#include <vnet/fib/ip4_fib.h>
+#include <vnet/fib/fib_entry.h>
u8 *
format_icmp4_input_trace (u8 * s, va_list * va)
vnet_buffer (p0)->sw_if_index[VLIB_RX] = 0;
vnet_buffer (p0)->sw_if_index[VLIB_TX] = ~0; /* use interface VRF */
fib_index0 = 0;
- adj_index0 = ip6_fib_lookup_with_table (im, fib_index0, pa6);
+ adj_index0 = fib_entry_get_adj(ip6_fib_table_lookup(fib_index0, pa6, 128));
+
+ if (ADJ_INDEX_INVALID == adj_index0)
+ {
+ vlib_buffer_free (vm, &bi0, 1);
+ return SEND_PING_NO_INTERFACE;
+ }
+
sw_if_index0 =
adj_index_to_sw_if_index (vm, lm, ip6_lookup_next_nodes, adj_index0,
sw_if_index, verbose);
vnet_buffer (p0)->sw_if_index[VLIB_RX] = 0;
vnet_buffer (p0)->sw_if_index[VLIB_TX] = ~0; /* use interface VRF */
fib_index0 = 0;
- adj_index0 = ip4_fib_lookup_with_table (im, fib_index0, pa4, 0);
+ adj_index0 = fib_entry_get_adj(ip4_fib_table_lookup(
+ ip4_fib_get(fib_index0), pa4, 32));
+
+ if (ADJ_INDEX_INVALID == adj_index0)
+ {
+ vlib_buffer_free (vm, &bi0, 1);
+ return SEND_PING_NO_INTERFACE;
+ }
+
sw_if_index0 =
adj_index_to_sw_if_index (vm, lm, ip4_lookup_next_nodes, adj_index0,
sw_if_index, verbose);
u32 n_requests = 0;
ping_run_t *pr = 0;
u32 ping_run_index = 0;
- u16 icmp_id = rand ();
+ u16 icmp_id;
+
+ static u32 rand_seed = 0;
+
+ if (PREDICT_FALSE(!rand_seed))
+ rand_seed = random_default_seed();
+
+ icmp_id = random_u32(&rand_seed) & 0xffff;
+
while (hash_get (pm->ping_run_by_icmp_id, icmp_id))
{
vlib_cli_output (vm, "ICMP ID collision at %d, incrementing", icmp_id);