+ if (j == 0)
+ {
+ if (strncmp ((char *) sm->nodes[n->index], (char *) n->name,
+ strlen ((char *) sm->nodes[n->index])))
+ {
+ u8 *s = 0;
+ u32 vector_index;
+ u8 *symlink_new_name = 0;
+ void *oldheap = clib_mem_set_heap (sm->heap);
+ vlib_stat_segment_lock ();
+ s = format (s, "%v%c", n->name, 0);
+#define _(E, t, name, p) \
+ vec_reset_length (symlink_name); \
+ symlink_name = format (symlink_name, "/nodes/%U/" #name "%c", \
+ format_vlib_stats_symlink, sm->nodes[n->index], 0); \
+ clib_mem_set_heap (oldheap); /* Exit stats segment */ \
+ vector_index = lookup_hash_index ((u8 *) symlink_name); \
+ clib_mem_set_heap (sm->heap); /* Re-enter stat segment */ \
+ vec_reset_length (symlink_new_name); \
+ symlink_new_name = format (symlink_new_name, "/nodes/%U/" #name "%c", \
+ format_vlib_stats_symlink, s, 0); \
+ vlib_stats_rename_symlink (oldheap, vector_index, symlink_new_name);
+ foreach_stat_segment_node_counter_name
+#undef _
+ vec_free (symlink_name);
+ vec_free (symlink_new_name);
+ vec_free (sm->nodes[n->index]);
+ sm->nodes[n->index] = s;
+ vlib_stat_segment_unlock ();
+ clib_mem_set_heap (oldheap);
+ }
+ }
+
+ counters = sm->directory_vector[STAT_COUNTER_NODE_CLOCKS].data;