On Mon, Jun 17, 2024 at 02:03:15PM +0200, Stefano Brivio wrote: > We currently use a LOG_EMERG log mask to represent the fact that we > don't know yet what the mask resulting from configuration should be, > before the command line is parsed. > > However, we have the necessity of representing another phase as well, > that is, configuration is parsed but we didn't daemonise yet, or > we're not ready for operation yet. The next patch will add that > notion explicitly. > > Mapping these cases to further log levels isn't really practical. > Introduce internal log flags to represent them, instead of abusing > log priorities. > > Signed-off-by: Stefano Brivio I like not abusing the log priorities. But, do we actually need a flags field with constants and helpers, rather than just bool log_conf_parsed; and open code it from there? > --- > conf.c | 5 ++--- > log.c | 18 +++++++++++++----- > log.h | 4 ++++ > 3 files changed, 19 insertions(+), 8 deletions(-) > > diff --git a/conf.c b/conf.c > index dbdbb62..0b76da9 100644 > --- a/conf.c > +++ b/conf.c > @@ -1701,9 +1701,6 @@ void conf(struct ctx *c, int argc, char **argv) > logfile, logsize); > } > > - /* Once the log mask is not LOG_EARLY, we will no longer log to stderr > - * if there was a log file specified. > - */ > if (c->debug) > __setlogmask(LOG_UPTO(LOG_DEBUG)); > else if (c->quiet) > @@ -1711,6 +1708,8 @@ void conf(struct ctx *c, int argc, char **argv) > else > __setlogmask(LOG_UPTO(LOG_INFO)); > > + log_set_flag(LOG_FLAG_CONF_PARSED); /* Stop printing everything */ > + > nl_sock_init(c, false); > if (!v6_only) > c->ifi4 = conf_ip4(ifi4, &c->ip4, c->mac); > diff --git a/log.c b/log.c > index aaf2beb..3b5a1c6 100644 > --- a/log.c > +++ b/log.c > @@ -30,14 +30,13 @@ > #include "util.h" > #include "passt.h" > > -/* LOG_EARLY means we don't know yet: log everything. LOG_EMERG is unused */ > -#define LOG_EARLY LOG_MASK(LOG_EMERG) > - > static int log_sock = -1; /* Optional socket to system logger */ > static char log_ident[BUFSIZ]; /* Identifier string for openlog() */ > -static int log_mask = LOG_EARLY; /* Current log priority mask */ > +static int log_mask; /* Current log priority mask */ > static int log_opt; /* Options for openlog() */ > > +static uint8_t log_flags; /* Internal, see LOG_FLAG_* in log.h */ > + > static int log_file = -1; /* Optional log file descriptor */ > static size_t log_size; /* Maximum log file size in bytes */ > static size_t log_written; /* Currently used bytes in log file */ > @@ -50,7 +49,7 @@ int log_trace; /* --trace mode enabled */ > void vlogmsg(int pri, const char *format, va_list ap) > { > bool debug_print = (log_mask & LOG_MASK(LOG_DEBUG)) && log_file == -1; > - bool early_print = LOG_PRI(log_mask) == LOG_EARLY; > + bool early_print = !(log_flags & LOG_FLAG_CONF_PARSED); > struct timespec tp; > > if (debug_print) { > @@ -150,6 +149,15 @@ void __setlogmask(int mask) > setlogmask(mask); > } > > +/** > + * log_set_flag() - Set an internal log flag > + * @flag: Flag as defined by LOG_FLAG_* in log.h > + */ > +void log_set_flag(uint8_t flag) > +{ > + log_flags |= flag; > +} > + > /** > * passt_vsyslog() - vsyslog() implementation not using heap memory > * @pri: Facility and level map, same as priority for vsyslog() > diff --git a/log.h b/log.h > index e0aab5a..6a3224a 100644 > --- a/log.h > +++ b/log.h > @@ -6,8 +6,11 @@ > #ifndef LOG_H > #define LOG_H > > +#include > #include > > +#define LOG_FLAG_CONF_PARSED BIT(0) /* We already parsed logging options */ > + > #define LOGFILE_SIZE_DEFAULT (1024 * 1024UL) > #define LOGFILE_CUT_RATIO 30 /* When full, cut ~30% size */ > #define LOGFILE_SIZE_MIN (5UL * MAX(BUFSIZ, PAGE_SIZE)) > @@ -40,5 +43,6 @@ void logfile_init(const char *name, const char *path, size_t size); > void passt_vsyslog(int pri, const char *format, va_list ap); > void logfile_write(int pri, const char *format, va_list ap); > void __setlogmask(int mask); > +void log_set_flag(uint8_t flag); > > #endif /* LOG_H */ -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson