fib: multiple memory leaks upon deleting a VRF table
[vpp.git] / src / vnet / ip / lookup.c
index 5db14ba..c2c4bae 100644 (file)
@@ -304,20 +304,17 @@ vnet_ip_route_cmd (vlib_main_t * vm,
        }
       else if (0 < vec_len (rpaths))
        {
-         u32 k, n, incr;
-         ip46_address_t dst = prefixs[i].fp_addr;
+         u32 k, n;
          f64 t[2];
          n = count;
          t[0] = vlib_time_now (vm);
-         incr = 1 << ((FIB_PROTOCOL_IP4 == prefixs[0].fp_proto ? 32 : 128) -
-                      prefixs[i].fp_len);
 
          for (k = 0; k < n; k++)
            {
              fib_prefix_t rpfx = {
                .fp_len = prefixs[i].fp_len,
                .fp_proto = prefixs[i].fp_proto,
-               .fp_addr = dst,
+               .fp_addr = prefixs[i].fp_addr,
              };
 
              if (is_del)
@@ -329,21 +326,7 @@ vnet_ip_route_cmd (vlib_main_t * vm,
                                           FIB_SOURCE_CLI,
                                           FIB_ENTRY_FLAG_NONE, rpaths);
 
-             if (FIB_PROTOCOL_IP4 == prefixs[0].fp_proto)
-               {
-                 dst.ip4.as_u32 =
-                   clib_host_to_net_u32 (incr +
-                                         clib_net_to_host_u32 (dst.
-                                                               ip4.as_u32));
-               }
-             else
-               {
-                 int bucket = (incr < 64 ? 0 : 1);
-                 dst.ip6.as_u64[bucket] =
-                   clib_host_to_net_u64 (incr +
-                                         clib_net_to_host_u64 (dst.ip6.as_u64
-                                                               [bucket]));
-               }
+             fib_prefix_increment (&prefixs[i]);
            }
 
          t[1] = vlib_time_now (vm);
@@ -427,6 +410,7 @@ vnet_ip_table_cmd (vlib_main_t * vm,
        }
 
 done:
+  vec_free (name);
   unformat_free (line_input);
   return error;
 }
@@ -643,7 +627,7 @@ ip_table_bind_cmd (vlib_main_t * vm,
       goto done;
     }
 
-  rv = ip_table_bind (fproto, sw_if_index, table_id, 0);
+  rv = ip_table_bind (fproto, sw_if_index, table_id);
 
   if (VNET_API_ERROR_ADDRESS_FOUND_FOR_INTERFACE == rv)
     {
@@ -899,8 +883,8 @@ vnet_ip_mroute_cmd (vlib_main_t * vm,
                mfib_table_entry_path_remove (fib_index,
                                              &pfx, MFIB_SOURCE_CLI, rpaths);
              else
-               mfib_table_entry_path_update (fib_index,
-                                             &pfx, MFIB_SOURCE_CLI, rpaths);
+               mfib_table_entry_path_update (fib_index, &pfx, MFIB_SOURCE_CLI,
+                                             MFIB_ENTRY_FLAG_NONE, rpaths);
            }
 
          if (FIB_PROTOCOL_IP4 == pfx.fp_proto)