bslcons.c (2489B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * Broadcom System Log Console Sink 8 */ 9 10 #include <sal/core/libc.h> 11 #include <sal/appl/io.h> 12 #include <appl/diag/bslsink.h> 13 #include <appl/diag/bslcons.h> 14 #include <appl/diag/bslenable.h> 15 16 static bslsink_sink_t console_sink; 17 static int console_enabled = 1; 18 static int thread_check_enabled = 0; 19 20 STATIC int 21 bslcons_vfprintf(void *file, const char *format, va_list args) 22 { 23 return sal_vprintf(format, args); 24 } 25 26 STATIC int 27 bslcons_thread_check(bsl_meta_t *meta) 28 { 29 int i; 30 int thread_id = sal_thread_id_get(); 31 32 if (bslenable_thread_get(meta->layer, meta->source, 0) == 0) { 33 return 1; 34 } 35 for (i = 0; i < MAX_BSLENABLE_THREAD_COUNT; i ++) { 36 if (thread_id == bslenable_thread_get(meta->layer, meta->source, i)) { 37 return 1; 38 } 39 } 40 41 return 0; 42 } 43 44 STATIC int 45 bslcons_check(bsl_meta_t *meta) 46 { 47 if (!console_enabled) { 48 return 0; 49 } 50 if (thread_check_enabled) { 51 return bslcons_thread_check(meta); 52 } 53 return console_enabled; 54 } 55 56 int 57 bslcons_init(void) 58 { 59 bslsink_sink_t *sink; 60 61 /* Create console sink */ 62 sink = &console_sink; 63 bslsink_sink_t_init(sink); 64 sal_strncpy(sink->name, "console", sizeof(sink->name)); 65 sink->vfprintf = bslcons_vfprintf; 66 sink->check = bslcons_check; 67 sink->enable_range.min = bslSeverityOff+1; 68 #ifdef BSL_TRACE_INCLUDE 69 /* bslSeverityDebug will be handled by the trace sink by default */ 70 sink->enable_range.max = bslSeverityVerbose; 71 #else 72 sink->enable_range.max = bslSeverityCount-1; 73 #endif 74 sink->options = BSLSINK_OPT_NO_ECHO; 75 bslsink_sink_add(sink); 76 77 /* Configure log prefix */ 78 sal_strncpy(sink->prefix_format, "%u:%F: ", 79 sizeof(sink->prefix_format)); 80 sink->prefix_range.min = bslSeverityOff+1; 81 sink->prefix_range.max = bslSeverityWarn; 82 83 return 0; 84 } 85 86 int 87 bslcons_is_enabled(void) 88 { 89 return console_enabled; 90 } 91 92 int 93 bslcons_enable(int enable) 94 { 95 int cur_enable = bslcons_is_enabled(); 96 97 console_enabled = enable; 98 99 return cur_enable; 100 } 101 102 int 103 bslcons_thread_check_is_enabled(void) 104 { 105 return thread_check_enabled; 106 } 107 108 int 109 bslcons_thread_check_enable(int enable) 110 { 111 int cur_enable = bslcons_thread_check_is_enabled(); 112 113 thread_check_enabled = enable; 114 115 return cur_enable; 116 }