{
fib_table_t *fib_table;
ip4_fib_t *v4_fib;
- void *old_heap;
pool_get(ip4_main.fibs, fib_table);
clib_memset(fib_table, 0, sizeof(*fib_table));
- old_heap = clib_mem_set_heap (ip4_main.mtrie_mheap);
pool_get_aligned(ip4_main.v4_fibs, v4_fib, CLIB_CACHE_LINE_BYTES);
- clib_mem_set_heap (old_heap);
ASSERT((fib_table - ip4_main.fibs) ==
(v4_fib - ip4_main.v4_fibs));
v4_fib->table_id =
table_id;
fib_table->ft_flow_hash_config = IP_FLOW_HASH_DEFAULT;
-
+
fib_table_lock(fib_table->ft_index, FIB_PROTOCOL_IP4, src);
ip4_mtrie_init(&v4_fib->mtrie);
{
fib_table_t *fib_table = pool_elt_at_index(ip4_main.fibs, fib_index);
ip4_fib_t *v4_fib = pool_elt_at_index(ip4_main.v4_fibs, fib_index);
+ u32 *n_locks;
int ii;
/*
/*
* validate no more routes.
*/
- ASSERT(0 == fib_table->ft_total_route_counts);
- FOR_EACH_FIB_SOURCE(ii)
+#if CLIB_DEBUG > 0
+ if (0 != fib_table->ft_total_route_counts)
+ fib_table_assert_empty(fib_table);
+#endif
+
+ vec_foreach(n_locks, fib_table->ft_src_route_counts)
{
- ASSERT(0 == fib_table->ft_src_route_counts[ii]);
+ ASSERT(0 == *n_locks);
}
if (~0 != fib_table->ft_table_id)
hash_unset (ip4_main.fib_index_by_table_id, fib_table->ft_table_id);
}
+ vec_free(fib_table->ft_src_route_counts);
ip4_mtrie_free(&v4_fib->mtrie);
pool_put(ip4_main.v4_fibs, v4_fib);
/*
* adding a new entry
*/
- uword *old_heap;
- old_heap = clib_mem_set_heap (ip4_main.mtrie_mheap);
if (NULL == hash) {
hash = hash_create (32 /* elts */, sizeof (uword));
}
hash = hash_set(hash, key, fib_entry_index);
fib->fib_entry_by_dst_address[len] = hash;
- clib_mem_set_heap (old_heap);
}
else
{
* removing a non-existent entry. i'll allow it.
*/
}
- else
+ else
{
- uword *old_heap;
-
- old_heap = clib_mem_set_heap (ip4_main.mtrie_mheap);
hash_unset(hash, key);
- clib_mem_set_heap (old_heap);
}
fib->fib_entry_by_dst_address[len] = hash;
ip4_address_t *address,
u32 mask_len,
int detail)
-{
+{
vlib_cli_output(vm, "%U",
format_fib_entry,
ip4_fib_table_lookup(fib, address, mask_len),
u8 *
format_ip4_fib_table_memory (u8 * s, va_list * args)
{
-#if USE_DLMALLOC == 0
- s = format(s, "%=30s %=6d %=12ld\n",
- "IPv4 unicast",
- pool_elts(ip4_main.fibs),
- mheap_bytes(ip4_main.mtrie_mheap));
-#else
- s = format(s, "%=30s %=6d %=12ld\n",
+ s = format(s, "%=30s %=6d\n",
"IPv4 unicast",
- pool_elts(ip4_main.fibs),
- mspace_footprint(ip4_main.mtrie_mheap));
-#endif
-
-
+ pool_elts(ip4_main.fibs));
return (s);
}
break;
}
- pool_foreach (fib_table, im4->fibs,
- ({
+ pool_foreach (fib_table, im4->fibs)
+ {
ip4_fib_t *fib = pool_elt_at_index(im4->v4_fibs, fib_table->ft_index);
fib_source_t source;
u8 *s = NULL;
if (memory)
{
- uword mtrie_size, hash_size, *old_heap;
+ uword mtrie_size, hash_size;
mtrie_size = ip4_fib_mtrie_memory_usage(&fib->mtrie);
hash_size = 0;
- old_heap = clib_mem_set_heap (ip4_main.mtrie_mheap);
for (i = 0; i < ARRAY_LEN (fib->fib_entry_by_dst_address); i++)
{
uword * hash = fib->fib_entry_by_dst_address[i];
hash_size += hash_bytes(hash);
}
}
- clib_mem_set_heap (old_heap);
if (verbose)
vlib_cli_output (vm, "%U mtrie:%d hash:%d",
fib_table->ft_flow_hash_config,
fib_table->ft_epoch,
format_fib_table_flags, fib_table->ft_flags);
- FOR_EACH_FIB_SOURCE(source)
+ vec_foreach_index(source, fib_table->ft_locks)
{
if (0 != fib_table->ft_locks[source])
{
ip4_fib_table_show_one(fib, vm, &matching_address,
matching_mask, detail);
}
- }));
+ }
if (memory)
{
total_mtrie_memory,
total_hash_memory,
total_mtrie_memory + total_hash_memory);
- vlib_cli_output (vm, "\nMtrie Mheap Usage: %U\n",
- format_mheap, ip4_main.mtrie_mheap, 1);
}
return 0;
}