diff --git a/server/Makefile b/server/Makefile index 775dd2123..22f32a911 100644 --- a/server/Makefile +++ b/server/Makefile @@ -18,7 +18,7 @@ RM = rm -f DOXY = doxygen # Debug level (if not set via 'make V=?') -V ?= 5 +V ?= 2 # Some details about the compiled version GIT_TAG = $(shell git describe --tags --abbrev=0) diff --git a/server/etc/example.conf b/server/etc/example.conf index 797e63586..a4939d13c 100644 --- a/server/etc/example.conf +++ b/server/etc/example.conf @@ -2,6 +2,7 @@ affinity = 0x02; # Mask of cores the server should run on priority = 50; # Scheduler priority for the server +debug = 5; # The level of verbosity for debug messages nodes = { acs = { diff --git a/server/include/cfg.h b/server/include/cfg.h index 6ff93dbdc..3af19c375 100644 --- a/server/include/cfg.h +++ b/server/include/cfg.h @@ -26,6 +26,8 @@ struct settings { int priority; /** Process affinity of the server and all created threads */ int affinity; + /** Debug log level */ + int debug; /** A libconfig object pointing to the root of the config file */ config_setting_t *cfg; diff --git a/server/include/utils.h b/server/include/utils.h index f2d56330c..7d21c483a 100644 --- a/server/include/utils.h +++ b/server/include/utils.h @@ -38,6 +38,8 @@ struct settings; struct sockaddr_in; struct sockaddr; +extern int debug; + /** Logs variadic messages to stdout. * * @param lvl The log level @@ -84,7 +86,7 @@ struct timespec timespec_rate(double rate); /** Printf alike debug message with level. */ #define debug(lvl, msg, ...) do { \ - if (lvl <= V) \ + if (lvl <= debug) \ print(DEBUG, msg, ##__VA_ARGS__); \ } while (0) diff --git a/server/src/cfg.c b/server/src/cfg.c index 87d334c38..d718b5d4b 100644 --- a/server/src/cfg.c +++ b/server/src/cfg.c @@ -67,6 +67,9 @@ int config_parse_global(config_setting_t *cfg, struct settings *set) { config_setting_lookup_int(cfg, "affinity", &set->affinity); config_setting_lookup_int(cfg, "priority", &set->priority); + config_setting_lookup_int(cfg, "debug", &set->debug); + + debug = set->debug; set->cfg = cfg; diff --git a/server/src/server.c b/server/src/server.c index 65fe12fd4..bd5d643f6 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -144,13 +144,8 @@ int main(int argc, char *argv[]) } info("This is %s %s", BLU("s2ss"), BLU(VERSION)); - debug(1, "Running with debug level: %u", V); - /* Check priviledges */ - if (getuid() != 0) - error("The server requires superuser privileges!"); - - /* Setup signals */ + /* Setup exit handler */ struct sigaction sa_quit = { .sa_flags = SA_SIGINFO, .sa_sigaction = quit @@ -165,6 +160,12 @@ int main(int argc, char *argv[]) config_init(&config); config_parse(argv[1], &config, &settings, &nodes, &paths); + debug(1, "Running with debug level: %u", settings.debug); + + /* Check priviledges */ + if (getuid() != 0) + error("The server requires superuser privileges!"); + /* Check for realtime kernel patch */ struct stat st; if (stat("/sys/kernel/realtime", &st)) diff --git a/server/src/utils.c b/server/src/utils.c index 3ec6c7520..76246bf4d 100644 --- a/server/src/utils.c +++ b/server/src/utils.c @@ -21,6 +21,9 @@ #include "cfg.h" #include "utils.h" +/* This global variable contains the debug level for debug() and assert() macros */ +int debug = V; + void print(enum log_level lvl, const char *fmt, ...) { struct timespec ts;