diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2009-12-22 22:32:51 +0100 |
---|---|---|
committer | Harald Welte <laforge@netfilter.org> | 2009-12-22 22:32:51 +0100 |
commit | b61e3b21580afc6381a6c72618d51697c7ce9771 (patch) | |
tree | 2a88eb434a28d4064f7017fd1202f10e88f341f7 /openbsc/include/openbsc/debug.h | |
parent | 0f9141384bc338cdf8db805fbfe502aed622f816 (diff) |
Import the new logging architecture
This is the new logging architecture, including
* support for multiuple logging targets like stderr and vty
* log levels in addition to categories/subsystems
* filtering based on imsi, i.e. only see events for one subscriber
* dynamically change log level for each category for each vty
Diffstat (limited to 'openbsc/include/openbsc/debug.h')
-rw-r--r-- | openbsc/include/openbsc/debug.h | 129 |
1 files changed, 99 insertions, 30 deletions
diff --git a/openbsc/include/openbsc/debug.h b/openbsc/include/openbsc/debug.h index fc387cec3..129956d8e 100644 --- a/openbsc/include/openbsc/debug.h +++ b/openbsc/include/openbsc/debug.h @@ -1,52 +1,51 @@ #ifndef _DEBUG_H #define _DEBUG_H -#define DEBUG - -#define DRLL 0x0001 -#define DCC 0x0002 -#define DMM 0x0004 -#define DRR 0x0008 -#define DRSL 0x0010 -#define DNM 0x0020 - -#define DMNCC 0x0080 -#define DSMS 0x0100 -#define DPAG 0x0200 -#define DMEAS 0x0400 +#include <stdio.h> +#include "linuxlist.h" -#define DMI 0x1000 -#define DMIB 0x2000 -#define DMUX 0x4000 -#define DINP 0x8000 - -#define DSCCP 0x10000 -#define DMSC 0x20000 - -#define DMGCP 0x40000 +#define DEBUG -#define DHO 0x80000 +/* Debug Areas of the code */ +enum { + DRLL, + DCC, + DMM, + DRR, + DRSL, + DNM, + DMNCC, + DSMS, + DPAG, + DMEAS, + DMI, + DMIB, + DMUX, + DINP, + DSCCP, + DMSC, + DMGCP, + DHO, + Debug_LastEntry, +}; #ifdef DEBUG #define DEBUGP(ss, fmt, args...) debugp(ss, __FILE__, __LINE__, 0, fmt, ## args) #define DEBUGPC(ss, fmt, args...) debugp(ss, __FILE__, __LINE__, 1, fmt, ## args) #else -#define DEBUGP(xss, fmt, args...) +#define DEBUGP(xss, fmt, args...) #define DEBUGPC(ss, fmt, args...) #endif + #define static_assert(exp, name) typedef int dummy##name [(exp) ? 1 : -1]; char *hexdump(const unsigned char *buf, int len); void debugp(unsigned int subsys, char *file, int line, int cont, const char *format, ...) __attribute__ ((format (printf, 5, 6))); -void debug_parse_category_mask(const char* mask); -void debug_use_color(int use_color); -void debug_timestamp(int enable); -extern unsigned int debug_mask; /* new logging interface */ -#define LOGP(ss, level, fmt, args...) debugp(ss, __FILE__, __LINE__, 0, fmt, ##args) -#define LOGPC(ss, level, fmt, args...) debugp(ss, __FILE__, __LINE__, 1, fmt, ##args) +#define LOGP(ss, level, fmt, args...) debugp2(ss, level, __FILE__, __LINE__, 0, fmt, ##args) +#define LOGPC(ss, level, fmt, args...) debugp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args) /* different levels */ #define LOGL_DEBUG 1 /* debugging information */ @@ -55,4 +54,74 @@ extern unsigned int debug_mask; #define LOGL_ERROR 7 /* error condition, requires user action */ #define LOGL_FATAL 8 /* fatal, program aborted */ +/* context */ +#define BSC_CTX_LCHAN 0 +#define BSC_CTX_SUBSCR 1 +#define BSC_CTX_BTS 2 +#define BSC_CTX_SCCP 3 + +/* target */ + +enum { + DEBUG_FILTER_IMSI = 1 << 0, + DEBUG_FILTER_ALL = 1 << 1, +}; + +struct debug_category { + int enabled; + int loglevel; +}; + +struct debug_target { + int filter_map; + char *imsi_filter; + + + struct debug_category categories[Debug_LastEntry]; + int use_color; + int print_timestamp; + int loglevel; + + union { + struct { + FILE *out; + } tgt_stdout; + + struct { + int priority; + } tgt_syslog; + + struct { + void *vty; + } tgt_vty; + }; + + void (*output) (struct debug_target *target, const char *string); + + struct llist_head entry; +}; + +/* use the above macros */ +void debugp2(unsigned int subsys, unsigned int level, char *file, int line, int cont, const char *format, ...) __attribute__ ((format (printf, 6, 7))); +void debug_init(void); + +/* context management */ +void debug_reset_context(void); +void debug_set_context(int ctx, void *value); + +/* filter on the targets */ +void debug_set_imsi_filter(struct debug_target *target, const char *imsi); +void debug_set_all_filter(struct debug_target *target, int); +void debug_set_use_color(struct debug_target *target, int); +void debug_set_print_timestamp(struct debug_target *target, int); +void debug_set_log_level(struct debug_target *target, int log_level); +void debug_parse_category_mask(struct debug_target *target, const char* mask); +void debug_set_category_filter(struct debug_target *target, int category, int enable, int level); + + +/* management of the targets */ +struct debug_target *debug_target_create(void); +struct debug_target *debug_target_create_stderr(void); +void debug_add_target(struct debug_target *target); +void debug_del_target(struct debug_target *target); #endif /* _DEBUG_H */ |