ip: mfib CLI 'via local' fix
[vpp.git] / src / vnet / ip / lookup.c
index 8c89ed4..43a90a1 100644 (file)
@@ -207,6 +207,8 @@ ip_lookup_init (ip_lookup_main_t * lm, u32 is_ip6)
     lm->fib_result_n_bytes = sizeof (uword);
 
   lm->is_ip6 = is_ip6;
+  mhash_init (&lm->prefix_to_if_prefix_index, sizeof (uword),
+             sizeof (ip_interface_prefix_key_t));
   if (is_ip6)
     {
       lm->format_address_and_length = format_ip6_address_and_length;
@@ -259,7 +261,12 @@ format_ip_adjacency_packet_data (u8 * s, va_list * args)
   u32 adj_index = va_arg (*args, u32);
   u8 *packet_data = va_arg (*args, u8 *);
   u32 n_packet_data_bytes = va_arg (*args, u32);
-  ip_adjacency_t *adj = adj_get (adj_index);
+  ip_adjacency_t *adj;
+
+  if (!adj_is_valid (adj_index))
+    return format (s, "<invalid adjacency>");
+
+  adj = adj_get (adj_index);
 
   switch (adj->lookup_next_index)
     {
@@ -889,6 +896,8 @@ vnet_ip_mroute_cmd (vlib_main_t * vm,
           */
          rpath.frp_proto = fib_proto_to_dpo (pfx.fp_proto);
          rpath.frp_mitf_flags = MFIB_ITF_FLAG_FORWARD;
+
+         vec_add1 (rpaths, rpath);
        }
       else if (unformat (line_input, "via %U",
                         unformat_fib_route_path, &rpath, &payload_proto))