vlib: add verbose sh node option
Type: improvement
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I915dace4afe07ac3281f248ef7468fa5247c9668
diff --git a/src/vlib/node_cli.c b/src/vlib/node_cli.c
index 1ba0575..0738bc9 100644
--- a/src/vlib/node_cli.c
+++ b/src/vlib/node_cli.c
@@ -550,9 +550,10 @@
vlib_node_main_t *nm = &vm->node_main;
vlib_node_t *n;
u8 *s = 0, *s2 = 0;
- u32 i, node_index = ~0;
+ u32 i, node_index = ~0, verbose = 0;
char *type_str;
u8 valid_node_name = 0;
+ u64 cl, ca, v;
if (!unformat_user (input, unformat_line_input, line_input))
return 0;
@@ -561,6 +562,8 @@
{
if (unformat (line_input, "index %u", &node_index))
;
+ else if (unformat (line_input, "verbose"))
+ verbose = 1;
else
if (unformat (line_input, "%U", unformat_vlib_node, vm, &node_index))
valid_node_name = 1;
@@ -642,7 +645,7 @@
s = format (s, "\n %10s %10s %=30s %8s",
"next-index", "node-index", "Node", "Vectors");
- s = format (s, "\n %=10u %=10u %-30v %=8llu", i, n->next_nodes[i],
+ s = format (s, "\n %=10u %=10u %=30v %=8llu", i, n->next_nodes[i],
pn->name, vec_elt (n->n_vectors_by_next_node, i));
}
@@ -669,10 +672,32 @@
s = format (s, "\n none");
vlib_cli_output (vm, "\n known previous nodes:%v\n", s);
vec_reset_length (s);
+ vec_free (s2);
}
+ if (!verbose)
+ goto done;
+
+ s = format (s, "\n%8s %=12s %=12s %=12s %=12s %=12s\n", "Thread", "Calls",
+ "Clocks", "Vectors", "Max Clock", "Max Vectors");
+ for (i = 0; i < vec_len (vlib_mains); i++)
+ {
+ n = vlib_get_node (vlib_mains[i], node_index);
+ vlib_node_sync_stats (vlib_mains[i], n);
+
+ cl = n->stats_total.clocks - n->stats_last_clear.clocks;
+ ca = n->stats_total.calls - n->stats_last_clear.calls;
+ v = n->stats_total.vectors - n->stats_last_clear.vectors;
+
+ s = format (s, "%=8u %=12lu %=12lu %=12lu %=12u %=12u\n", i, ca, cl, v,
+ n->stats_total.max_clock, n->stats_total.max_clock_n);
+ }
+
+ vlib_cli_output (vm, "%v", s);
+
+done:
+
vec_free (s);
- vec_free (s2);
return 0;
}