1 #ifndef _OSMOCORE_DEBUG_H
2 #define _OSMOCORE_DEBUG_H
6 #include <osmocore/linuxlist.h>
8 #define DEBUG_MAX_CATEGORY 32
9 #define DEBUG_MAX_CTX 8
10 #define DEBUG_MAX_FILTERS 8
15 #define DEBUGP(ss, fmt, args...) debugp(ss, __FILE__, __LINE__, 0, fmt, ## args)
16 #define DEBUGPC(ss, fmt, args...) debugp(ss, __FILE__, __LINE__, 1, fmt, ## args)
18 #define DEBUGP(xss, fmt, args...)
19 #define DEBUGPC(ss, fmt, args...)
22 #define static_assert(exp, name) typedef int dummy##name [(exp) ? 1 : -1];
24 char *hexdump(const unsigned char *buf
, int len
);
25 void debugp(unsigned int subsys
, char *file
, int line
, int cont
, const char *format
, ...) __attribute__ ((format (printf
, 5, 6)));
27 /* new logging interface */
28 #define LOGP(ss, level, fmt, args...) \
29 debugp2(ss, level, __FILE__, __LINE__, 0, fmt, ##args)
30 #define LOGPC(ss, level, fmt, args...) \
31 debugp2(ss, level, __FILE__, __LINE__, 1, fmt, ##args)
33 /* different levels */
34 #define LOGL_DEBUG 1 /* debugging information */
36 #define LOGL_NOTICE 5 /* abnormal/unexpected condition */
37 #define LOGL_ERROR 7 /* error condition, requires user action */
38 #define LOGL_FATAL 8 /* fatal, program aborted */
40 #define DEBUG_FILTER_ALL 0x0001
42 struct debug_category
{
47 struct debug_info_cat
{
50 const char *description
;
55 /* debug context information, passed to filter */
56 struct debug_context
{
57 void *ctx
[DEBUG_MAX_CTX
+1];
62 typedef int debug_filter(const struct debug_context
*ctx
,
63 struct debug_target
*target
);
66 /* filter callback function */
67 debug_filter
*filter_fn
;
69 /* per-category information */
70 const struct debug_info_cat
*cat
;
75 struct llist_head entry
;
78 void *filter_data
[DEBUG_MAX_FILTERS
+1];
80 struct debug_category categories
[DEBUG_MAX_CATEGORY
+1];
83 int print_timestamp
:1;
99 void (*output
) (struct debug_target
*target
, const char *string
);
102 /* use the above macros */
103 void debugp2(unsigned int subsys
, unsigned int level
, char *file
,
104 int line
, int cont
, const char *format
, ...)
105 __attribute__ ((format (printf
, 6, 7)));
106 void debug_init(const struct debug_info
*cat
);
108 /* context management */
109 void debug_reset_context(void);
110 int debug_set_context(uint8_t ctx
, void *value
);
112 /* filter on the targets */
113 void debug_set_all_filter(struct debug_target
*target
, int);
115 void debug_set_use_color(struct debug_target
*target
, int);
116 void debug_set_print_timestamp(struct debug_target
*target
, int);
117 void debug_set_log_level(struct debug_target
*target
, int log_level
);
118 void debug_parse_category_mask(struct debug_target
*target
, const char* mask
);
119 int debug_parse_level(const char *lvl
);
120 int debug_parse_category(const char *category
);
121 void debug_set_category_filter(struct debug_target
*target
, int category
,
122 int enable
, int level
);
124 /* management of the targets */
125 struct debug_target
*debug_target_create(void);
126 struct debug_target
*debug_target_create_stderr(void);
127 void debug_add_target(struct debug_target
*target
);
128 void debug_del_target(struct debug_target
*target
);
130 #endif /* _OSMOCORE_DEBUG_H */