summaryrefslogtreecommitdiff
path: root/lib/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/log.c')
-rw-r--r--lib/log.c81
1 files changed, 74 insertions, 7 deletions
diff --git a/lib/log.c b/lib/log.c
index 453a611dcd..cd1f0bb771 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -35,10 +35,16 @@
#include <ucontext.h>
#endif
+DEFINE_MTYPE_STATIC(LIB, ZLOG, "Logging")
+
static int logfile_fd = -1; /* Used in signal handler. */
struct zlog *zlog_default = NULL;
+/*
+ * This must be kept in the same order as the
+ * zlog_proto_t enum
+ */
const char *zlog_proto_names[] =
{
"NONE",
@@ -49,9 +55,10 @@ const char *zlog_proto_names[] =
"OSPF",
"RIPNG",
"OSPF6",
+ "LDP",
"ISIS",
"PIM",
- "MASC",
+ "RFP",
NULL,
};
@@ -175,10 +182,11 @@ time_print(FILE *fp, struct timestamp_control *ctl)
/* va_list version of zlog. */
-static void
+void
vzlog (struct zlog *zl, int priority, const char *format, va_list args)
{
char proto_str[32];
+ int original_errno = errno;
struct timestamp_control tsctl;
tsctl.already_rendered = 0;
@@ -197,6 +205,7 @@ vzlog (struct zlog *zl, int priority, const char *format, va_list args)
fflush (stderr);
/* In this case we return at here. */
+ errno = original_errno;
return;
}
tsctl.precision = zl->timestamp_precision;
@@ -249,6 +258,46 @@ vzlog (struct zlog *zl, int priority, const char *format, va_list args)
if (priority <= zl->maxlvl[ZLOG_DEST_MONITOR])
vty_log ((zl->record_priority ? zlog_priority[priority] : NULL),
proto_str, format, &tsctl, args);
+
+ errno = original_errno;
+}
+
+int
+vzlog_test (struct zlog *zl, int priority)
+{
+ /* If zlog is not specified, use default one. */
+ if (zl == NULL)
+ zl = zlog_default;
+
+ /* When zlog_default is also NULL, use stderr for logging. */
+ if (zl == NULL)
+ {
+ return 1;
+ }
+
+ /* Syslog output */
+ if (priority <= zl->maxlvl[ZLOG_DEST_SYSLOG])
+ {
+ return 1;
+ }
+
+ /* File output. */
+ if ((priority <= zl->maxlvl[ZLOG_DEST_FILE]) && zl->fp)
+ {
+ return 1;
+ }
+
+ /* stdout output. */
+ if (priority <= zl->maxlvl[ZLOG_DEST_STDOUT])
+ {
+ return 1;
+ }
+
+ /* Terminal monitor. */
+ if (priority <= zl->maxlvl[ZLOG_DEST_MONITOR])
+ return 1;
+
+ return 0;
}
static char *
@@ -673,9 +722,18 @@ _zlog_assert_failed (const char *assertion, const char *file,
assertion,file,line,(function ? function : "?"));
zlog_backtrace(LOG_CRIT);
zlog_thread_info(LOG_CRIT);
+ log_memstats_stderr ("log");
abort();
}
+void
+memory_oom (size_t size, const char *name)
+{
+ zlog_err("out of memory: failed to allocate %zu bytes for %s"
+ "object", size, name);
+ zlog_backtrace(LOG_ERR);
+ abort();
+}
/* Open log stream */
struct zlog *
@@ -894,11 +952,6 @@ static const struct zebra_desc_table command_types[] = {
DESC_ENTRY (ZEBRA_REDISTRIBUTE_DELETE),
DESC_ENTRY (ZEBRA_REDISTRIBUTE_DEFAULT_ADD),
DESC_ENTRY (ZEBRA_REDISTRIBUTE_DEFAULT_DELETE),
- DESC_ENTRY (ZEBRA_IPV4_NEXTHOP_LOOKUP),
- DESC_ENTRY (ZEBRA_IPV6_NEXTHOP_LOOKUP),
- DESC_ENTRY (ZEBRA_IPV4_IMPORT_LOOKUP),
- DESC_ENTRY (ZEBRA_IPV6_IMPORT_LOOKUP),
- DESC_ENTRY (ZEBRA_INTERFACE_RENAME),
DESC_ENTRY (ZEBRA_ROUTER_ID_ADD),
DESC_ENTRY (ZEBRA_ROUTER_ID_DELETE),
DESC_ENTRY (ZEBRA_ROUTER_ID_UPDATE),
@@ -929,6 +982,12 @@ static const struct zebra_desc_table command_types[] = {
DESC_ENTRY (ZEBRA_INTERFACE_ENABLE_RADV),
DESC_ENTRY (ZEBRA_INTERFACE_DISABLE_RADV),
DESC_ENTRY (ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB),
+ DESC_ENTRY (ZEBRA_MPLS_LABELS_ADD),
+ DESC_ENTRY (ZEBRA_MPLS_LABELS_DELETE),
+ DESC_ENTRY (ZEBRA_IPV4_NEXTHOP_ADD),
+ DESC_ENTRY (ZEBRA_IPV4_NEXTHOP_DELETE),
+ DESC_ENTRY (ZEBRA_IPV6_NEXTHOP_ADD),
+ DESC_ENTRY (ZEBRA_IPV6_NEXTHOP_DELETE),
};
#undef DESC_ENTRY
@@ -1017,6 +1076,10 @@ proto_redistnum(int afi, const char *s)
return ZEBRA_ROUTE_BGP;
else if (strncmp (s, "ta", 2) == 0)
return ZEBRA_ROUTE_TABLE;
+ else if (strncmp (s, "v", 1) == 0)
+ return ZEBRA_ROUTE_VNC;
+ else if (strncmp (s, "vd", 1) == 0)
+ return ZEBRA_ROUTE_VNC_DIRECT;
}
if (afi == AFI_IP6)
{
@@ -1036,6 +1099,10 @@ proto_redistnum(int afi, const char *s)
return ZEBRA_ROUTE_BGP;
else if (strncmp (s, "ta", 2) == 0)
return ZEBRA_ROUTE_TABLE;
+ else if (strncmp (s, "v", 1) == 0)
+ return ZEBRA_ROUTE_VNC;
+ else if (strncmp (s, "vd", 1) == 0)
+ return ZEBRA_ROUTE_VNC_DIRECT;
}
return -1;
}