diff options
Diffstat (limited to 'lib/log.c')
| -rw-r--r-- | lib/log.c | 81 |
1 files changed, 74 insertions, 7 deletions
@@ -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; } |
