summaryrefslogtreecommitdiffstats
path: root/lib/log.h
diff options
context:
space:
mode:
authorChris Hall <chris.hall@highwayman.com>2011-07-21 19:53:02 +0100
committerChris Hall <chris.hall@highwayman.com>2011-07-21 19:53:02 +0100
commit56da2a1c9b6361e302b7a39fe2740561a9012d88 (patch)
tree6b6543532133a0c618d0f4ec70a87cf3f96caf30 /lib/log.h
parente535bc959729262480a9702e71334002edee3f8c (diff)
downloadquagga-56da2a1c9b6361e302b7a39fe2740561a9012d88.tar.bz2
quagga-56da2a1c9b6361e302b7a39fe2740561a9012d88.tar.xz
Update pipework and improve memory reporting.
Improve error handling for all new pipework inputs and outputs. Change behaviour of ^C from VTY Terminal, so that will interrupt output and terminate all running pipes -- including running shell commands. In pipe commands, recognise "~/..." and "~user/..." home directory forms. Changed "~/" to mean the usual home for the current user. "~~/" now means the configuration file directory. Introduced "shdir DIR" command to show what is (currently) what. Changed "<|" so that if the command has a path, it is expanded using Quagga's rules (including "~~/" and "~./") and the "here" directory is set to that path. Fixed collection of stderr output from all pipes so that is separate from stdout output, and is always sent to the base output (eg VTY Terminal). Increase amount of information about the heap that "show mem" shows -- particularly if the "memory_tracker" is enabled. Tested and applied resulting fixes.
Diffstat (limited to 'lib/log.h')
-rw-r--r--lib/log.h183
1 files changed, 57 insertions, 126 deletions
diff --git a/lib/log.h b/lib/log.h
index 30a81a28..5fb2f163 100644
--- a/lib/log.h
+++ b/lib/log.h
@@ -29,6 +29,7 @@
#include <signal.h>
#include <syslog.h>
#include <stdio.h>
+#include "log_common.h"
#include "vargs.h"
#include "pthread_safe.h"
@@ -48,88 +49,32 @@
* please use LOG_ERR instead.
*/
-typedef enum
-{
- ZLOG_NONE,
- ZLOG_DEFAULT,
- ZLOG_ZEBRA,
- ZLOG_RIP,
- ZLOG_BGP,
- ZLOG_OSPF,
- ZLOG_RIPNG,
- ZLOG_OSPF6,
- ZLOG_ISIS,
- ZLOG_MASC
-} zlog_proto_t;
-
-/* If maxlvl is set to ZLOG_DISABLED, then no messages will be sent
- * to that logging destination.
+/*------------------------------------------------------------------------------
+ * Pointer to default logging structure.
+ *
+ * Each daemon initialises this very early in the morning (before processing
+ * command line arguments) by:
+ *
+ * zlog_default = openzlog(....) ;
*/
-enum { ZLOG_DISABLED = LOG_EMERG - 1 } ;
-
-typedef enum
-{
- ZLOG_DEST_SYSLOG = 0,
- ZLOG_DEST_FILE,
- ZLOG_DEST_STDOUT,
- ZLOG_DEST_MONITOR,
-
- ZLOG_DEST_COUNT /* Number of destinations */
-} zlog_dest_t;
-
-struct zlog
-{
- struct zlog* next ; /* To support multiple logging streams */
-
- const char *ident; /* daemon name (first arg to openlog) */
- zlog_proto_t protocol ;
-
- int maxlvl[ZLOG_DEST_COUNT]; /* maximum priority set */
- int default_lvl; /* maxlvl to use if none is specified */
-
- int emaxlvl[ZLOG_DEST_COUNT]; /* effective maximum priority */
-
- bool syslog ; /* have active syslog */
- int file_fd ; /* fd for ZLOG_DEST_FILE (if any) */
- int stdout_fd ; /* fd for ZLOG_DEST_STDOUT */
- int monitors ; /* count of monitors */
-
- char *filename; /* for ZLOG_DEST_FILE */
-
- int facility; /* as per syslog facility */
- int syslog_options; /* 2nd arg to openlog */
-
- int timestamp_precision; /* # of digits of subsecond precision */
- bool record_priority; /* should messages logged through stdio
- include the priority of the message? */
-} ;
-
-/* Message structure. */
-struct message
-{
- int key;
- const char *str;
-};
-
-/* module initialization */
-extern void zlog_init_r(void);
-extern void zlog_destroy_r(void);
-
-/* Default logging structure. */
-extern struct zlog *zlog_default;
+extern struct zlog* zlog_default;
-/* Open zlog function */
-extern struct zlog *openzlog (const char *progname, zlog_proto_t protocol,
+/*------------------------------------------------------------------------------
+ * zlog opening etc.
+ */
+extern struct zlog* openzlog (const char *progname, zlog_proto_t protocol,
int syslog_options, int syslog_facility);
-
-/* Close zlog function. */
extern void closezlog (struct zlog *zl);
+extern void zlog_set_level(struct zlog *zl, zlog_dest_t, int log_level);
+extern int zlog_rotate (struct zlog *);
-/* Generic function for zlog. */
+/*------------------------------------------------------------------------------
+ * Functions and macros for logging.
+ */
extern void zlog (struct zlog *zl, int priority, const char *format, ...)
PRINTF_ATTRIBUTE(3, 4);
-
-/* Handy zlog functions. */
+/* Handy zlog functions.
+ */
#define zlog_thus(thus, ...) zlog(zlog_default, thus, __VA_ARGS__)
#define zlog_err(...) zlog(zlog_default, LOG_ERR, __VA_ARGS__)
#define zlog_warn(...) zlog(zlog_default, LOG_WARNING, __VA_ARGS__)
@@ -137,7 +82,8 @@ extern void zlog (struct zlog *zl, int priority, const char *format, ...)
#define zlog_notice(...) zlog(zlog_default, LOG_NOTICE, __VA_ARGS__)
#define zlog_debug(...) zlog(zlog_default, LOG_DEBUG, __VA_ARGS__)
-/* For bgpd's peer oriented log. */
+/* For bgpd's peer oriented log.
+ */
#define plog_thus(zl, thus, ...) zlog(zl, thus, __VA_ARGS__)
#define plog_err(zl, ...) zlog(zl, LOG_ERR, __VA_ARGS__)
#define plog_warn(zl, ...) zlog(zl, LOG_WARNING, __VA_ARGS__)
@@ -145,37 +91,17 @@ extern void zlog (struct zlog *zl, int priority, const char *format, ...)
#define plog_notice(zl, ...) zlog(zl, LOG_NOTICE, __VA_ARGS__)
#define plog_debug(zl, ...) zlog(zl, LOG_DEBUG, __VA_ARGS__)
-/* Set logging level for the given destination. If the log_level
- argument is ZLOG_DISABLED, then the destination is disabled.
- This function should not be used for file logging (use uzlog_set_file
- or zlog_reset_file instead). */
-extern void zlog_set_level(struct zlog *zl, zlog_dest_t, int log_level);
-
-/* Set logging to the given filename at the specified level. */
-extern int zlog_set_file(struct zlog *zl, const char *filename, int log_level);
-/* Disable file logging. */
-extern int zlog_reset_file(struct zlog *zl);
-
-/* Rotate log. */
-extern int zlog_rotate (struct zlog *);
+/*------------------------------------------------------------------------------
+ * Message and other lookups.
+ */
+struct message /* For message lookup. */
+{
+ int key;
+ const char *str;
+};
-/* getters & setters */
-extern int zlog_get_default_lvl (struct zlog *zl);
-extern void zlog_set_default_lvl (struct zlog *zl, int level);
-extern void zlog_set_default_lvl_dest (struct zlog *zl, int level);
-extern int zlog_get_maxlvl (struct zlog *zl, zlog_dest_t dest);
-extern int zlog_get_facility (struct zlog *zl);
-extern void zlog_set_facility (struct zlog *zl, int facility);
-extern bool zlog_get_record_priority (struct zlog *zl);
-extern void zlog_set_record_priority (struct zlog *zl, bool record_priority);
-extern int zlog_get_timestamp_precision (struct zlog *zl);
-extern void zlog_set_timestamp_precision (struct zlog *zl, int timestamp_precision);
-extern const char * zlog_get_ident (struct zlog *zl);
-extern char * zlog_get_filename (struct zlog *zl);
-extern bool zlog_is_file (struct zlog *zl);
extern const char * zlog_get_proto_name (struct zlog *zl);
-/* For hackey massage lookup and check */
#define LOOKUP(x, y) mes_lookup(x, x ## _max, y, "(no item found)")
extern const char *lookup (const struct message *, int);
@@ -186,9 +112,12 @@ extern const char *mes_lookup (const struct message *meslist,
extern const char *zlog_priority[];
extern const char *zlog_proto_names[];
-/* Safe version of strerror -- never returns NULL. */
extern const char *safe_strerror(int errnum);
+/*------------------------------------------------------------------------------
+ *
+ */
+
/* To be called when a fatal signal is caught. */
extern void zlog_signal(int signo, const char *action, siginfo_t *siginfo,
void *program_counter) ;
@@ -205,8 +134,9 @@ extern void zlog_backtrace(int priority);
that is logged in addition to the current backtrace. */
extern void zlog_backtrace_sigsafe(int priority, void *program_counter);
-/* Defines for use in command construction: */
-
+/*------------------------------------------------------------------------------
+ * Defines for use in command construction
+ */
#define LOG_LEVELS "(emergencies|alerts|critical|errors|" \
"warnings|notifications|informational|debugging)"
@@ -220,26 +150,27 @@ extern void zlog_backtrace_sigsafe(int priority, void *program_counter);
"Informational messages\n" \
"Debugging messages\n"
-#define LOG_FACILITIES "(kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|local0|local1|local2|local3|local4|local5|local6|local7)"
+#define LOG_FACILITIES "(kern|user|mail|daemon|auth|syslog|lpr|news|uucp|" \
+ "cron|local0|local1|local2|local3|local4|local5|local6|local7)"
#define LOG_FACILITY_DESC \
- "Kernel\n" \
- "User process\n" \
- "Mail system\n" \
- "System daemons\n" \
- "Authorization system\n" \
- "Syslog itself\n" \
- "Line printer system\n" \
- "USENET news\n" \
- "Unix-to-Unix copy system\n" \
- "Cron/at facility\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n" \
- "Local use\n"
+ "Kernel\n" \
+ "User process\n" \
+ "Mail system\n" \
+ "System daemons\n" \
+ "Authorization system\n" \
+ "Syslog itself\n" \
+ "Line printer system\n" \
+ "USENET news\n" \
+ "Unix-to-Unix copy system\n" \
+ "Cron/at facility\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n" \
+ "Local use\n"
#endif /* _ZEBRA_LOG_H */