ip: reassembly - add a way to disable for forus
[vpp.git] / src / vlib / log.h
index 9a0c444..c3ebb81 100644 (file)
 #ifndef included_vlib_log_h
 #define included_vlib_log_h
 
+#include <sys/time.h>
 #include <vppinfra/types.h>
 
-#define foreach_vlib_log_level \
-  _(0, EMERG, emerg) \
-  _(1, ALERT, alert) \
-  _(2, CRIT, crit) \
-  _(3, ERR, error) \
-  _(4, WARNING, warn) \
-  _(5, NOTICE, notice) \
-  _(6, INFO, info) \
-  _(7, DEBUG, debug) \
-  _(8, DISABLED, disabled)
+#define foreach_vlib_log_level \
+  _(EMERG, emerg)              \
+  _(ALERT, alert)              \
+  _(CRIT, crit)                        \
+  _(ERR, error)                        \
+  _(WARNING, warn)             \
+  _(NOTICE, notice)            \
+  _(INFO, info)                        \
+  _(DEBUG, debug)              \
+  _(DISABLED, disabled)
 
 typedef enum
 {
-#define _(n,uc,lc) VLIB_LOG_LEVEL_##uc = n,
+  VLIB_LOG_LEVEL_UNKNOWN = 0,
+#define _(uc,lc) VLIB_LOG_LEVEL_##uc,
   foreach_vlib_log_level
 #undef _
+    VLIB_LOG_N_LEVELS,
 } vlib_log_level_t;
 
 typedef struct
@@ -66,15 +69,33 @@ typedef struct
   vlib_log_subclass_data_t *subclasses;
 } vlib_log_class_data_t;
 
+typedef struct
+{
+  vlib_log_level_t level;
+  vlib_log_level_t syslog_level;
+  int rate_limit;
+  char *name;
+} vlib_log_class_config_t;
+
+
+typedef struct vlib_log_registration
+{
+  char *class_name;
+  char *subclass_name;
+  vlib_log_class_t class;
+  vlib_log_level_t default_level;
+  vlib_log_level_t default_syslog_level;
+
+  /* next */
+  struct vlib_log_registration *next;
+} vlib_log_class_registration_t;
+
 typedef struct
 {
   vlib_log_entry_t *entries;
   vlib_log_class_data_t *classes;
   int size, next, count;
 
-  /* our own log class */
-  vlib_log_class_t log_class;
-
   int default_rate_limit;
   int default_log_level;
   int default_syslog_log_level;
@@ -85,6 +106,13 @@ typedef struct
   struct timeval time_zero_timeval;
   f64 time_zero;
 
+  /* config */
+  vlib_log_class_config_t *configs;
+  uword *config_index_by_name;
+  int add_to_elog;
+
+  /* registrations */
+  vlib_log_class_registration_t *registrations;
 } vlib_log_main_t;
 
 extern vlib_log_main_t log_main;
@@ -108,6 +136,18 @@ u8 *format_vlib_log_level (u8 * s, va_list * args);
 #define vlib_log_info(...) vlib_log(VLIB_LOG_LEVEL_INFO, __VA_ARGS__)
 #define vlib_log_debug(...) vlib_log(VLIB_LOG_LEVEL_DEBUG, __VA_ARGS__)
 
+#define VLIB_REGISTER_LOG_CLASS(x,...) \
+__VA_ARGS__ vlib_log_class_registration_t x; \
+static void __clib_constructor                 \
+__vlib_add_log_registration_##x (void)         \
+  {                                            \
+    vlib_log_main_t * lm = &log_main;          \
+    x.next = lm->registrations;                        \
+    x.class = ~0;                              \
+    lm->registrations = &x;                    \
+  }                                            \
+__VA_ARGS__  vlib_log_class_registration_t x
+
 #endif /* included_vlib_log_h */
 
 /*