diff --git a/TODO b/TODO index 476506fd..2d4cbab6 100644 --- a/TODO +++ b/TODO @@ -1,12 +1,12 @@ Core ~~~~ * right usage of DBG vs. debug -* cleanup debugging calls! +* cleanup debugging calls +* logging and tracing; use appropriate log levels +* check log calls for trailing newlines - TOS not supported by kernel -> automatically drop routes with TOS<>0 -- use -freg-struct-return ? - - fake multipath? - replace all NUM's by expr's - config file: define ipaddr constants? @@ -25,6 +25,8 @@ Core - static: check validity of route destination? - static: device routes +- device: configuration of interface patterns + - filter: logging of dropped routes (?) - limitation of memory consumption: per-process and total (?) - adding of route: check whether all bits not covered by masklen are zero diff --git a/lib/birdlib.h b/lib/birdlib.h index 4b8164bd..f377a99b 100644 --- a/lib/birdlib.h +++ b/lib/birdlib.h @@ -27,13 +27,17 @@ void log(char *msg, ...); void die(char *msg, ...) NORET; +void bug(char *msg, ...) NORET; #define L_DEBUG "\001" /* Debugging messages */ -#define L_INFO "\002" /* Informational messages */ -#define L_WARN "\003" /* Warnings */ -#define L_ERR "\004" /* Errors */ -#define L_AUTH "\005" /* Authorization failed etc. */ -#define L_FATAL "\006" /* Fatal errors */ +#define L_TRACE "\002" /* Protocol tracing */ +#define L_INFO "\003" /* Informational messages */ +#define L_REMOTE "\004" /* Remote protocol errors */ +#define L_WARN "\004" /* Local warnings */ +#define L_ERR "\005" /* Local errors */ +#define L_AUTH "\006" /* Authorization failed etc. */ +#define L_FATAL "\007" /* Fatal errors */ +#define L_BUG "\010" /* BIRD bugs */ void log_init(char *); /* Initialize logging to given file (NULL=stderr, ""=syslog) */ void log_init_debug(char *); /* Initialize debug dump to given file (NULL=stderr, ""=off) */ @@ -48,4 +52,10 @@ void debug(char *msg, ...); /* Printf to debug output */ #define DBG(x, y...) #endif +#ifdef DEBUGGING +#define ASSERT(x) do { if (!(x)) bug("Assertion `%s' failed at %s:%d", #x, __FILE__, __LINE__); } while(0) +#else +#define ASSERT(x) do { } while(0) +#endif + #endif diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c index 00589a3c..5dd7ef7f 100644 --- a/sysdep/unix/log.c +++ b/sysdep/unix/log.c @@ -107,19 +107,29 @@ log(char *msg, ...) va_list args; va_start(args, msg); - if (*msg >= 1 && *msg <= 6) + if (*msg >= 1 && *msg <= 8) class = *msg++; vlog(class, msg, args); va_end(args); } +void +bug(char *msg, ...) +{ + va_list args; + + va_start(args, msg); + vlog(L_BUG[0], msg, args); + exit(1); +} + void die(char *msg, ...) { va_list args; va_start(args, msg); - vlog(6, msg, args); + vlog(L_FATAL[0], msg, args); exit(1); }