diff options
author | Neale Ranns <nranns@cisco.com> | 2017-11-29 00:59:31 -0800 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2017-11-29 11:17:08 +0000 |
commit | c87aafad759f92ae630fec52079a08ace607410b (patch) | |
tree | 36d534722eccc9ea03144eb42bf6104bf1dd294e /src/vnet/mfib/ip4_mfib.c | |
parent | 72454dd4c5196594b366883bbf732c9e067c64ec (diff) |
Include allocated table memory in 'sh fib mem' output
DBGvpp# sh fib mem
FIB memory
Tables:
SAFI Number Bytes
IPv4 unicast 2 673066
IPv6 unicast 2 1054608
MPLS 1 4194312
IPv4 multicast 2 2322
IPv6 multicast 2 ???
Nodes:
Name Size in-use /allocated totals
Entry 96 20 / 20 1920/1920
Entry Source 32 0 / 0 0/0
Entry Path-Extensions 60 0 / 0 0/0
multicast-Entry 192 12 / 12 2304/2304
Path-list 40 28 / 28 1120/1120
uRPF-list 16 20 / 20 320/320
Path 72 28 / 28 2016/2016
Node-list elements 20 28 / 28 560/560
Node-list heads 8 30 / 30 240/240
Change-Id: I8c8f6f1c87502a40265bf4f302d0daef111a4a4e
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet/mfib/ip4_mfib.c')
-rw-r--r-- | src/vnet/mfib/ip4_mfib.c | 70 |
1 files changed, 67 insertions, 3 deletions
diff --git a/src/vnet/mfib/ip4_mfib.c b/src/vnet/mfib/ip4_mfib.c index b2482580678..7040fa71764 100644 --- a/src/vnet/mfib/ip4_mfib.c +++ b/src/vnet/mfib/ip4_mfib.c @@ -305,6 +305,42 @@ ip4_mfib_table_walk (ip4_mfib_t *mfib, } } +u8 * +format_ip4_mfib_table_memory (u8 * s, va_list * args) +{ + mfib_table_t *mfib_table; + u64 total_memory; + + total_memory = 0; + + pool_foreach (mfib_table, ip4_main.mfibs, + ({ + ip4_mfib_t *mfib = &mfib_table->v4; + uword mfib_size; + int i; + + mfib_size = 0; + + for (i = 0; i < ARRAY_LEN (mfib->fib_entry_by_dst_address); i++) + { + uword * hash = mfib->fib_entry_by_dst_address[i]; + + if (NULL != hash) + { + mfib_size += hash_bytes(hash); + } + } + + total_memory += mfib_size; + })); + + s = format(s, "%=30s %=6d %=8ld\n", + "IPv4 multicast", + pool_elts(ip4_main.mfibs), total_memory); + + return (s); +} + static void ip4_mfib_table_show_all (ip4_mfib_t *mfib, vlib_main_t * vm) @@ -363,20 +399,23 @@ ip4_show_mfib (vlib_main_t * vm, { ip4_main_t * im4 = &ip4_main; mfib_table_t *mfib_table; - int verbose, matching; + int verbose, matching, memory; ip4_address_t grp, src = {{0}}; u32 mask = 32; + u64 total_hash_memory; int i, table_id = -1, fib_index = ~0; verbose = 1; - matching = 0; + memory = matching = 0; + total_hash_memory = 0; while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { if (unformat (input, "brief") || unformat (input, "summary") || unformat (input, "sum")) verbose = 0; - + else if (unformat (input, "mem") || unformat (input, "memory")) + memory = 1; else if (unformat (input, "%U %U", unformat_ip4_address, &src, unformat_ip4_address, &grp)) @@ -412,6 +451,29 @@ ip4_show_mfib (vlib_main_t * vm, if (fib_index != ~0 && fib_index != (int)mfib->index) continue; + if (memory) + { + uword hash_size; + + hash_size = 0; + + for (i = 0; i < ARRAY_LEN (mfib->fib_entry_by_dst_address); i++) + { + uword * hash = mfib->fib_entry_by_dst_address[i]; + if (NULL != hash) + { + hash_size += hash_bytes(hash); + } + } + if (verbose) + vlib_cli_output (vm, "%U hash:%d", + format_mfib_table_name, mfib->index, + FIB_PROTOCOL_IP4, + hash_size); + total_hash_memory += hash_size; + continue; + } + vlib_cli_output (vm, "%U, fib_index %d", format_mfib_table_name, mfib->index, FIB_PROTOCOL_IP4, mfib->index); @@ -439,6 +501,8 @@ ip4_show_mfib (vlib_main_t * vm, ip4_mfib_table_show_one(mfib, vm, &src, &grp, mask); } })); + if (memory) + vlib_cli_output (vm, "totals: hash:%ld", total_hash_memory); return 0; } |