diff options
Diffstat (limited to 'src/vnet/session/segment_manager.c')
-rw-r--r-- | src/vnet/session/segment_manager.c | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/src/vnet/session/segment_manager.c b/src/vnet/session/segment_manager.c index 80bebdca9b5..2b44d92e0b5 100644 --- a/src/vnet/session/segment_manager.c +++ b/src/vnet/session/segment_manager.c @@ -1018,10 +1018,42 @@ segment_manager_main_init (void) } static u8 * +format_segment_manager_flags (u8 *s, va_list *args) +{ + int flags = va_arg (*args, int); + typedef struct sm_flags_struct + { + u8 bit; + char *str; + } sm_flags_struct_t; + sm_flags_struct_t *entry; + static sm_flags_struct_t sm_flags_array[] = { +#define _(b, v, s) \ + { \ + .bit = 1 << b, \ + .str = #s, \ + }, + foreach_seg_manager_flag +#undef _ + { .str = NULL } + }; + + entry = sm_flags_array; + while (entry->str) + { + if (flags & entry->bit) + s = format (s, "%s ", entry->str, entry->bit); + entry++; + } + return s; +} + +u8 * format_segment_manager (u8 *s, va_list *args) { segment_manager_t *sm = va_arg (*args, segment_manager_t *); int verbose = va_arg (*args, int); + int indent = format_get_indent (s); app_worker_t *app_wrk; uword max_fifo_size; fifo_segment_t *seg; @@ -1034,12 +1066,13 @@ format_segment_manager (u8 *s, va_list *args) max_fifo_size = sm->max_fifo_size; s = format (s, - "[%u] %v app-wrk: %u segs: %u max-fifo-sz: %U " - "wmarks: %u %u %s flags: 0x%x", - segment_manager_index (sm), app ? app->name : 0, - sm->app_wrk_index, pool_elts (sm->segments), format_memory_size, - max_fifo_size, sm->high_watermark, sm->low_watermark, - custom_logic ? "custom-tuning" : "no-tuning", sm->flags); + "%U[%u] %v app-wrk: %u segs: %u max-fifo-sz: %U " + "wmarks: %u %u %s flags: %U", + format_white_space, indent, segment_manager_index (sm), + app ? app->name : 0, sm->app_wrk_index, pool_elts (sm->segments), + format_memory_size, max_fifo_size, sm->high_watermark, + sm->low_watermark, custom_logic ? "custom-tuning" : "no-tuning", + format_segment_manager_flags, (int) sm->flags); if (!verbose || !pool_elts (sm->segments)) return s; @@ -1047,7 +1080,10 @@ format_segment_manager (u8 *s, va_list *args) s = format (s, "\n\n"); segment_manager_foreach_segment_w_lock ( - seg, sm, ({ s = format (s, " *%U", format_fifo_segment, seg, verbose); })); + seg, sm, ({ + s = format (s, "%U *%U", format_white_space, indent, format_fifo_segment, + seg, verbose); + })); return s; } |