summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-09-19 15:35:30 +0200
committerThomas Haller <thaller@redhat.com>2016-09-19 15:35:33 +0200
commit1206fd066b3692d796dabb3418bf5747b37de62e (patch)
treebb75ce2907d55c40c2dae8281b257b1eb696e10e
parentcdedd2b53e08acebb8abf21cf2a2d84ab440aaa0 (diff)
downloadNetworkManager-1206fd066b3692d796dabb3418bf5747b37de62e.tar.gz
shared: add nm_utils_syslog_coerce_from_nm() util
When a VPN plugin logs to syslog(), it should not use the syslog levels that were passed in by NetworkManager directly. Instead, it must map LOG_NOTICE to LOG_INFO and LOG_INFO to LOG_DEBUG. Add a utility function does gets that right.
-rw-r--r--shared/nm-utils/nm-vpn-plugin-macros.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/shared/nm-utils/nm-vpn-plugin-macros.h b/shared/nm-utils/nm-vpn-plugin-macros.h
index 06f5b28663..acc549f2f3 100644
--- a/shared/nm-utils/nm-vpn-plugin-macros.h
+++ b/shared/nm-utils/nm-vpn-plugin-macros.h
@@ -24,6 +24,38 @@
#include <syslog.h>
+static inline int
+nm_utils_syslog_coerce_from_nm (int syslog_level)
+{
+ /* NetworkManager uses internally NMLogLevel levels. When spawning
+ * the VPN plugin, it maps those levels to syslog levels as follows:
+ *
+ * LOGL_INFO = LOG_NOTICE,
+ * LOGL_DEBUG = LOG_INFO,
+ * LOGL_TRACE = LOG_DEBUG,
+ *
+ * However, when actually printing to syslog, we don't want to print messages
+ * with LOGL_INFO level as LOG_NOTICE, because they are *not* to be highlighted.
+ *
+ * In other words: NetworkManager has 3 levels that should not require highlighting:
+ * LOGL_INFO, LOGL_DEBUG, LOGL_TRACE. syslog on the other hand has only LOG_INFO and LOG_DEBUG.
+ *
+ * So, coerce those values before printing to syslog. When you receive the syslog_level
+ * from NetworkManager, instead of calling
+ * syslog(syslog_level, ...)
+ * you should call
+ * syslog(nm_utils_syslog_coerce_from_nm(syslog_level), ...)
+ */
+ switch (syslog_level) {
+ case LOG_INFO:
+ return LOG_DEBUG;
+ case LOG_NOTICE:
+ return LOG_INFO;
+ default:
+ return syslog_level;
+ }
+}
+
static inline const char *
nm_utils_syslog_to_str (int syslog_level)
{