From a328a943f173391cd9a9a54e257c8dabcd463402 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 31 Mar 2011 16:23:50 -0700 Subject: [PATCH] Log anything that could prevent a daemon from starting. If a daemon doesn't start, we need to know why. Being able to consistently consult the log to find out is helpful. --- lib/command-line.c | 19 ++++++++++------- lib/daemon.c | 13 ++++++------ lib/entropy.c | 5 +++-- lib/fatal-signal.c | 11 ++++------ lib/process.c | 22 +++++++------------- lib/random.c | 7 +++---- lib/signals.c | 28 +++++++++++++++++++------ lib/signals.h | 6 +++++- lib/socket-util.c | 7 +++++++ lib/socket-util.h | 4 +++- lib/timeval.c | 25 ++++++++++++---------- lib/timeval.h | 4 +++- lib/uuid.c | 7 +++---- lib/vlog.c | 27 +++++++++++++++++++++++- lib/vlog.h | 13 +++++++++++- tests/test-timeval.c | 4 ++-- utilities/ovs-ofctl.c | 8 +++---- utilities/ovs-openflowd.c | 44 +++++++++++++++++++++------------------ vswitchd/ovs-brcompatd.c | 18 +++++++++------- vswitchd/ovs-vswitchd.c | 4 ++-- 20 files changed, 171 insertions(+), 105 deletions(-) diff --git a/lib/command-line.c b/lib/command-line.c index 23ed53fb4..9adf47f4d 100644 --- a/lib/command-line.c +++ b/lib/command-line.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,9 @@ #include #include #include "util.h" +#include "vlog.h" + +VLOG_DEFINE_THIS_MODULE(command_line); /* Given the GNU-style long options in 'options', returns a string that may be * passed to getopt() with the corresponding short options. The caller is @@ -66,25 +69,25 @@ run_command(int argc, char *argv[], const struct command commands[]) if (!strcmp(p->name, argv[0])) { int n_arg = argc - 1; if (n_arg < p->min_args) { - ovs_fatal(0, "'%s' command requires at least %d arguments", - p->name, p->min_args); + VLOG_FATAL( "'%s' command requires at least %d arguments", + p->name, p->min_args); } else if (n_arg > p->max_args) { - ovs_fatal(0, "'%s' command takes at most %d arguments", - p->name, p->max_args); + VLOG_FATAL("'%s' command takes at most %d arguments", + p->name, p->max_args); } else { p->handler(argc, argv); if (ferror(stdout)) { - ovs_fatal(0, "write to stdout failed"); + VLOG_FATAL("write to stdout failed"); } if (ferror(stderr)) { - ovs_fatal(0, "write to stderr failed"); + VLOG_FATAL("write to stderr failed"); } return; } } } - ovs_fatal(0, "unknown command '%s'; use --help for help", argv[0]); + VLOG_FATAL("unknown command '%s'; use --help for help", argv[0]); } /* Process title. */ diff --git a/lib/daemon.c b/lib/daemon.c index cb440d168..64e2f9e9a 100644 --- a/lib/daemon.c +++ b/lib/daemon.c @@ -239,9 +239,7 @@ fork_and_wait_for_startup(int *fdp) int fds[2]; pid_t pid; - if (pipe(fds) < 0) { - ovs_fatal(errno, "pipe failed"); - } + xpipe(fds); pid = fork(); if (pid > 0) { @@ -266,7 +264,8 @@ fork_and_wait_for_startup(int *fdp) exit(WEXITSTATUS(status)); } - ovs_fatal(errno, "fork child failed to signal startup"); + VLOG_FATAL("fork child failed to signal startup (%s)", + strerror(errno)); } close(fds[0]); *fdp = -1; @@ -277,7 +276,7 @@ fork_and_wait_for_startup(int *fdp) lockfile_postfork(); *fdp = fds[1]; } else { - ovs_fatal(errno, "could not fork"); + VLOG_FATAL("fork failed (%s)", strerror(errno)); } return pid; @@ -292,7 +291,7 @@ fork_notify_startup(int fd) error = write_fully(fd, "", 1, &bytes_written); if (error) { - ovs_fatal(error, "could not write to pipe"); + VLOG_FATAL("pipe write failed (%s)", strerror(error)); } close(fd); @@ -346,7 +345,7 @@ monitor_daemon(pid_t daemon_pid) } while (retval == -1 && errno == EINTR); if (retval == -1) { - ovs_fatal(errno, "waitpid failed"); + VLOG_FATAL("waitpid failed (%s)", strerror(errno)); } else if (retval == daemon_pid) { char *s = process_status_msg(status); if (should_restart(status)) { diff --git a/lib/entropy.c b/lib/entropy.c index 8a6479bef..7cb830ff1 100644 --- a/lib/entropy.c +++ b/lib/entropy.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2009, 2010 Nicira Networks +/* Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,6 +60,7 @@ get_entropy_or_die(void *buffer, size_t n) { int error = get_entropy(buffer, n); if (error) { - ovs_fatal(error, "%s: read error", urandom); + VLOG_FATAL("%s: read error (%s)", + urandom, ovs_retval_to_string(error)); } } diff --git a/lib/fatal-signal.c b/lib/fatal-signal.c index ed82173a4..c7e87dbe9 100644 --- a/lib/fatal-signal.c +++ b/lib/fatal-signal.c @@ -27,6 +27,7 @@ #include "poll-loop.h" #include "shash.h" #include "sset.h" +#include "signals.h" #include "socket-util.h" #include "util.h" #include "vlog.h" @@ -67,9 +68,7 @@ fatal_signal_init(void) inited = true; - if (pipe(signal_fds)) { - ovs_fatal(errno, "could not create pipe"); - } + xpipe(signal_fds); set_nonblocking(signal_fds[0]); set_nonblocking(signal_fds[1]); @@ -79,12 +78,10 @@ fatal_signal_init(void) struct sigaction old_sa; sigaddset(&fatal_signal_set, sig_nr); - if (sigaction(sig_nr, NULL, &old_sa)) { - ovs_fatal(errno, "sigaction"); - } + xsigaction(sig_nr, NULL, &old_sa); if (old_sa.sa_handler == SIG_DFL && signal(sig_nr, fatal_signal_handler) == SIG_ERR) { - ovs_fatal(errno, "signal"); + VLOG_FATAL("signal failed (%s)", strerror(errno)); } } atexit(atexit_handler); diff --git a/lib/process.c b/lib/process.c index f772833d8..55092f503 100644 --- a/lib/process.c +++ b/lib/process.c @@ -82,9 +82,7 @@ process_init(void) inited = true; /* Create notification pipe. */ - if (pipe(fds)) { - ovs_fatal(errno, "could not create pipe"); - } + xpipe(fds); set_nonblocking(fds[0]); set_nonblocking(fds[1]); @@ -93,9 +91,7 @@ process_init(void) sa.sa_handler = sigchld_handler; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_NOCLDSTOP | SA_RESTART; - if (sigaction(SIGCHLD, &sa, NULL)) { - ovs_fatal(errno, "sigaction(SIGCHLD) failed"); - } + xsigaction(SIGCHLD, &sa, NULL); } char * @@ -638,9 +634,8 @@ static bool sigchld_is_blocked(void) { sigset_t sigs; - if (sigprocmask(SIG_SETMASK, NULL, &sigs)) { - ovs_fatal(errno, "sigprocmask"); - } + + xsigprocmask(SIG_SETMASK, NULL, &sigs); return sigismember(&sigs, SIGCHLD); } @@ -648,17 +643,14 @@ static void block_sigchld(sigset_t *oldsigs) { sigset_t sigchld; + sigemptyset(&sigchld); sigaddset(&sigchld, SIGCHLD); - if (sigprocmask(SIG_BLOCK, &sigchld, oldsigs)) { - ovs_fatal(errno, "sigprocmask"); - } + xsigprocmask(SIG_BLOCK, &sigchld, oldsigs); } static void unblock_sigchld(const sigset_t *oldsigs) { - if (sigprocmask(SIG_SETMASK, oldsigs, NULL)) { - ovs_fatal(errno, "sigprocmask"); - } + xsigprocmask(SIG_SETMASK, oldsigs, NULL); } diff --git a/lib/random.c b/lib/random.c index 6b0244601..a802bc743 100644 --- a/lib/random.c +++ b/lib/random.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ #include #include "entropy.h" +#include "timeval.h" #include "util.h" /* This is the 32-bit PRNG recommended in G. Marsaglia, "Xorshift RNGs", @@ -48,9 +49,7 @@ random_init(void) struct timeval tv; uint32_t entropy; - if (gettimeofday(&tv, NULL) < 0) { - ovs_fatal(errno, "gettimeofday"); - } + xgettimeofday(&tv); get_entropy_or_die(&entropy, 4); seed = tv.tv_sec ^ tv.tv_usec ^ entropy; diff --git a/lib/signals.c b/lib/signals.c index 707bf8368..37f063732 100644 --- a/lib/signals.c +++ b/lib/signals.c @@ -25,6 +25,9 @@ #include "socket-util.h" #include "type-props.h" #include "util.h" +#include "vlog.h" + +VLOG_DEFINE_THIS_MODULE(signals); #if defined(_NSIG) #define N_SIGNALS _NSIG @@ -58,9 +61,7 @@ signal_init(void) static bool inited; if (!inited) { inited = true; - if (pipe(fds)) { - ovs_fatal(errno, "could not create pipe"); - } + xpipe(fds); set_nonblocking(fds[0]); set_nonblocking(fds[1]); } @@ -83,9 +84,7 @@ signal_register(int signr) sa.sa_handler = signal_handler; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; - if (sigaction(signr, &sa, NULL)) { - ovs_fatal(errno, "sigaction(%d) failed", signr); - } + xsigaction(signr, &sa, NULL); /* Return structure. */ s = xmalloc(sizeof *s); @@ -148,3 +147,20 @@ signal_name(int signum) } return name; } + +void +xsigaction(int signum, const struct sigaction *new, struct sigaction *old) +{ + if (sigaction(signum, new, old)) { + VLOG_FATAL("sigaction(%s) failed (%s)", + signal_name(signum), strerror(errno)); + } +} + +void +xsigprocmask(int how, const sigset_t *new, sigset_t *old) +{ + if (sigprocmask(how, new, old)) { + VLOG_FATAL("sigprocmask failed (%s)", strerror(errno)); + } +} diff --git a/lib/signals.h b/lib/signals.h index 41066c40c..12fb31139 100644 --- a/lib/signals.h +++ b/lib/signals.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008 Nicira Networks. + * Copyright (c) 2008, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ #ifndef SIGNALS_H #define SIGNALS_H 1 +#include #include void signal_init(void); @@ -26,4 +27,7 @@ void signal_wait(struct signal *); const char *signal_name(int signum); +void xsigaction(int signum, const struct sigaction *, struct sigaction *old); +void xsigprocmask(int how, const sigset_t *, sigset_t *old); + #endif /* signals.h */ diff --git a/lib/socket-util.c b/lib/socket-util.c index e0f34e714..12bbc716d 100644 --- a/lib/socket-util.c +++ b/lib/socket-util.c @@ -767,3 +767,10 @@ get_mtime(const char *file_name, struct timespec *mtime) } } +void +xpipe(int fds[2]) +{ + if (pipe(fds)) { + VLOG_FATAL("failed to create pipe (%s)", strerror(errno)); + } +} diff --git a/lib/socket-util.h b/lib/socket-util.h index f4e617a65..8c5af3966 100644 --- a/lib/socket-util.h +++ b/lib/socket-util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,4 +48,6 @@ int write_fully(int fd, const void *, size_t, size_t *bytes_written); int fsync_parent_dir(const char *file_name); int get_mtime(const char *file_name, struct timespec *mtime); +void xpipe(int fds[2]); + #endif /* socket-util.h */ diff --git a/lib/timeval.c b/lib/timeval.c index 84c90f36c..099730e8f 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -26,6 +26,7 @@ #include #include "coverage.h" #include "fatal-signal.h" +#include "signals.h" #include "util.h" #include "vlog.h" @@ -96,9 +97,7 @@ set_up_signal(int flags) sa.sa_handler = sigalrm_handler; sigemptyset(&sa.sa_mask); sa.sa_flags = flags; - if (sigaction(SIGALRM, &sa, NULL)) { - ovs_fatal(errno, "sigaction(SIGALRM) failed"); - } + xsigaction(SIGALRM, &sa, NULL); } /* Remove SA_RESTART from the flags for SIGALRM, so that any system call that @@ -137,7 +136,7 @@ set_up_timer(void) struct itimerspec itimer; if (timer_create(monotonic_clock, NULL, &timer_id)) { - ovs_fatal(errno, "timer_create failed"); + VLOG_FATAL("timer_create failed (%s)", strerror(errno)); } itimer.it_interval.tv_sec = 0; @@ -145,7 +144,7 @@ set_up_timer(void) itimer.it_value = itimer.it_interval; if (timer_settime(timer_id, 0, &itimer, NULL)) { - ovs_fatal(errno, "timer_settime failed"); + VLOG_FATAL("timer_settime failed (%s)", strerror(errno)); } } @@ -364,17 +363,13 @@ block_sigalrm(sigset_t *oldsigs) sigset_t sigalrm; sigemptyset(&sigalrm); sigaddset(&sigalrm, SIGALRM); - if (sigprocmask(SIG_BLOCK, &sigalrm, oldsigs)) { - ovs_fatal(errno, "sigprocmask"); - } + xsigprocmask(SIG_BLOCK, &sigalrm, oldsigs); } static void unblock_sigalrm(const sigset_t *oldsigs) { - if (sigprocmask(SIG_SETMASK, oldsigs, NULL)) { - ovs_fatal(errno, "sigprocmask"); - } + xsigprocmask(SIG_SETMASK, oldsigs, NULL); } long long int @@ -389,6 +384,14 @@ timeval_to_msec(const struct timeval *tv) return (long long int) tv->tv_sec * 1000 + tv->tv_usec / 1000; } +void +xgettimeofday(struct timeval *tv) +{ + if (gettimeofday(tv, NULL) == -1) { + VLOG_FATAL("gettimeofday failed (%s)", strerror(errno)); + } +} + static long long int timeval_diff_msec(const struct timeval *a, const struct timeval *b) { diff --git a/lib/timeval.h b/lib/timeval.h index 904023302..303461adf 100644 --- a/lib/timeval.h +++ b/lib/timeval.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,6 +60,8 @@ int time_poll(struct pollfd *, int n_pollfds, int timeout); long long int timespec_to_msec(const struct timespec *); long long int timeval_to_msec(const struct timeval *); +void xgettimeofday(struct timeval *); + #ifdef __cplusplus } #endif diff --git a/lib/uuid.c b/lib/uuid.c index e25902423..8b02bf556 100644 --- a/lib/uuid.c +++ b/lib/uuid.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2009, 2010 Nicira Networks +/* Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ #include "aes128.h" #include "entropy.h" #include "sha1.h" +#include "timeval.h" #include "util.h" static struct aes128 key; @@ -212,9 +213,7 @@ do_init(void) /* Get seed data. */ get_entropy_or_die(random_seed, sizeof random_seed); - if (gettimeofday(&now, NULL)) { - ovs_fatal(errno, "gettimeofday failed"); - } + xgettimeofday(&now); pid = getpid(); ppid = getppid(); uid = getuid(); diff --git a/lib/vlog.c b/lib/vlog.c index 2598111a4..4f6523f3d 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -680,6 +680,31 @@ vlog(const struct vlog_module *module, enum vlog_level level, va_end(args); } +void +vlog_fatal_valist(const struct vlog_module *module_, enum vlog_level level, + const char *message, va_list args) +{ + struct vlog_module *module = (struct vlog_module *) module_; + + /* Don't log this message to the console to avoid redundancy with the + * message written by the later ovs_fatal_valist(). */ + module->levels[VLF_CONSOLE] = VLL_EMER; + + vlog_valist(module, level, message, args); + ovs_fatal_valist(0, message, args); +} + +void +vlog_fatal(const struct vlog_module *module, enum vlog_level level, + const char *message, ...) +{ + va_list args; + + va_start(args, message); + vlog_fatal_valist(module, level, message, args); + va_end(args); +} + bool vlog_should_drop(const struct vlog_module *module, enum vlog_level level, struct vlog_rate_limit *rl) diff --git a/lib/vlog.h b/lib/vlog.h index 7411f7635..1feab4523 100644 --- a/lib/vlog.h +++ b/lib/vlog.h @@ -148,14 +148,24 @@ const char *vlog_get_log_file(void); int vlog_set_log_file(const char *file_name); int vlog_reopen_log_file(void); -/* Function for actual logging. */ +/* Initialization. */ void vlog_init(void); void vlog_exit(void); + +/* Functions for actual logging. */ void vlog(const struct vlog_module *, enum vlog_level, const char *format, ...) __attribute__((format(printf, 3, 4))); void vlog_valist(const struct vlog_module *, enum vlog_level, const char *, va_list) __attribute__((format(printf, 3, 0))); + +void vlog_fatal(const struct vlog_module *, enum vlog_level, + const char *format, ...) + PRINTF_FORMAT (3, 4) NO_RETURN; +void vlog_fatal_valist(const struct vlog_module *, enum vlog_level, + const char *, va_list) + PRINTF_FORMAT (3, 0) NO_RETURN; + void vlog_rate_limit(const struct vlog_module *, enum vlog_level, struct vlog_rate_limit *, const char *, ...) __attribute__((format(printf, 4, 5))); @@ -173,6 +183,7 @@ void vlog_rate_limit(const struct vlog_module *, enum vlog_level, * * Guaranteed to preserve errno. */ +#define VLOG_FATAL(...) vlog_fatal(THIS_MODULE, VLL_ERR, __VA_ARGS__) #define VLOG_EMER(...) VLOG(VLL_EMER, __VA_ARGS__) #define VLOG_ERR(...) VLOG(VLL_ERR, __VA_ARGS__) #define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__) diff --git a/tests/test-timeval.c b/tests/test-timeval.c index 99a600b21..442b27af6 100644 --- a/tests/test-timeval.c +++ b/tests/test-timeval.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010 Nicira Networks. + * Copyright (c) 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,7 +37,7 @@ gettimeofday_in_msec(void) { struct timeval tv; - assert(!gettimeofday(&tv, NULL)); + xgettimeofday(&tv); return timeval_to_msec(&tv); } diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c index 994329e63..bc8cc6bd8 100644 --- a/utilities/ovs-ofctl.c +++ b/utilities/ovs-ofctl.c @@ -827,9 +827,9 @@ do_ping(int argc, char *argv[]) OFPT_ECHO_REQUEST, &request); random_bytes(rq_hdr + 1, payload); - gettimeofday(&start, NULL); + xgettimeofday(&start); run(vconn_transact(vconn, ofpbuf_clone(request), &reply), "transact"); - gettimeofday(&end, NULL); + xgettimeofday(&end); rpy_hdr = reply->data; if (reply->size != request->size @@ -874,7 +874,7 @@ do_benchmark(int argc OVS_UNUSED, char *argv[]) count, message_size, count * message_size); open_vconn(argv[1], &vconn); - gettimeofday(&start, NULL); + xgettimeofday(&start); for (i = 0; i < count; i++) { struct ofpbuf *request, *reply; struct ofp_header *rq_hdr; @@ -884,7 +884,7 @@ do_benchmark(int argc OVS_UNUSED, char *argv[]) run(vconn_transact(vconn, request, &reply), "transact"); ofpbuf_delete(reply); } - gettimeofday(&end, NULL); + xgettimeofday(&end); vconn_close(vconn); duration = ((1000*(double)(end.tv_sec - start.tv_sec)) diff --git a/utilities/ovs-openflowd.c b/utilities/ovs-openflowd.c index f096af199..a58a9d219 100644 --- a/utilities/ovs-openflowd.c +++ b/utilities/ovs-openflowd.c @@ -119,7 +119,7 @@ main(int argc, char *argv[]) error = dpif_create_and_open(s.dp_name, s.dp_type, &dpif); if (error) { - ovs_fatal(error, "could not create datapath"); + VLOG_FATAL("could not create datapath (%s)", strerror(error)); } /* Add ports to the datapath if requested by the user. */ @@ -128,12 +128,14 @@ main(int argc, char *argv[]) error = netdev_open_default(port, &netdev); if (error) { - ovs_fatal(error, "%s: failed to open network device", port); + VLOG_FATAL("%s: failed to open network device (%s)", + port, strerror(error)); } error = dpif_port_add(dpif, netdev, NULL); if (error) { - ovs_fatal(error, "failed to add %s as a port", port); + VLOG_FATAL("failed to add %s as a port (%s)", + port, strerror(error)); } netdev_close(netdev); @@ -142,7 +144,8 @@ main(int argc, char *argv[]) /* Start OpenFlow processing. */ error = ofproto_create(s.dp_name, s.dp_type, NULL, NULL, &ofproto); if (error) { - ovs_fatal(error, "could not initialize openflow switch"); + VLOG_FATAL("could not initialize openflow switch (%s)", + strerror(error)); } if (s.datapath_id) { ofproto_set_datapath_id(ofproto, s.datapath_id); @@ -151,14 +154,15 @@ main(int argc, char *argv[]) s.serial_desc, s.dp_desc); error = ofproto_set_snoops(ofproto, &s.snoops); if (error) { - ovs_fatal(error, - "failed to configure controller snooping connections"); + VLOG_FATAL("failed to configure controller snooping connections (%s)", + strerror(error)); } memset(&nf_options, 0, sizeof nf_options); nf_options.collectors = s.netflow; error = ofproto_set_netflow(ofproto, &nf_options); if (error) { - ovs_fatal(error, "failed to configure NetFlow collectors"); + VLOG_FATAL("failed to configure NetFlow collectors (%s)", + strerror(error)); } ofproto_set_controllers(ofproto, s.controllers, s.n_controllers); ofproto_set_fail_mode(ofproto, s.fail_mode); @@ -169,7 +173,7 @@ main(int argc, char *argv[]) while (!exiting && (s.run_forever || ofproto_is_alive(ofproto))) { error = ofproto_run(ofproto); if (error) { - ovs_fatal(error, "unrecoverable datapath error"); + VLOG_FATAL("unrecoverable datapath error (%s)", strerror(error)); } unixctl_server_run(unixctl); dp_run(); @@ -317,8 +321,8 @@ parse_options(int argc, char *argv[], struct ofsettings *s) switch (c) { case OPT_DATAPATH_ID: if (!dpid_from_string(optarg, &s->datapath_id)) { - ovs_fatal(0, "argument to --datapath-id must be " - "exactly 16 hex digits and may not be all-zero"); + VLOG_FATAL("argument to --datapath-id must be exactly 16 hex " + "digits and may not be all-zero"); } break; @@ -349,15 +353,15 @@ parse_options(int argc, char *argv[], struct ofsettings *s) || !strcmp(optarg, "secure")) { s->fail_mode = OFPROTO_FAIL_SECURE; } else { - ovs_fatal(0, "--fail argument must be \"standalone\" " - "or \"secure\""); + VLOG_FATAL("--fail argument must be \"standalone\" " + "or \"secure\""); } break; case OPT_INACTIVITY_PROBE: controller_opts.probe_interval = atoi(optarg); if (controller_opts.probe_interval < 5) { - ovs_fatal(0, "--inactivity-probe argument must be at least 5"); + VLOG_FATAL("--inactivity-probe argument must be at least 5"); } break; @@ -367,8 +371,8 @@ parse_options(int argc, char *argv[], struct ofsettings *s) } else { s->max_idle = atoi(optarg); if (s->max_idle < 1 || s->max_idle > 65535) { - ovs_fatal(0, "--max-idle argument must be between 1 and " - "65535 or the word 'permanent'"); + VLOG_FATAL("--max-idle argument must be between 1 and " + "65535 or the word 'permanent'"); } } break; @@ -376,7 +380,7 @@ parse_options(int argc, char *argv[], struct ofsettings *s) case OPT_MAX_BACKOFF: controller_opts.max_backoff = atoi(optarg); if (controller_opts.max_backoff < 1) { - ovs_fatal(0, "--max-backoff argument must be at least 1"); + VLOG_FATAL("--max-backoff argument must be at least 1"); } else if (controller_opts.max_backoff > 3600) { controller_opts.max_backoff = 3600; } @@ -386,7 +390,7 @@ parse_options(int argc, char *argv[], struct ofsettings *s) if (optarg) { controller_opts.rate_limit = atoi(optarg); if (controller_opts.rate_limit < 1) { - ovs_fatal(0, "--rate-limit argument must be at least 1"); + VLOG_FATAL("--rate-limit argument must be at least 1"); } } else { controller_opts.rate_limit = 1000; @@ -396,7 +400,7 @@ parse_options(int argc, char *argv[], struct ofsettings *s) case OPT_BURST_LIMIT: controller_opts.burst_limit = atoi(optarg); if (controller_opts.burst_limit < 1) { - ovs_fatal(0, "--burst-limit argument must be at least 1"); + VLOG_FATAL("--burst-limit argument must be at least 1"); } break; @@ -465,8 +469,8 @@ parse_options(int argc, char *argv[], struct ofsettings *s) argc -= optind; argv += optind; if (argc < 2) { - ovs_fatal(0, "need at least two non-option arguments; " - "use --help for usage"); + VLOG_FATAL("need at least two non-option arguments; " + "use --help for usage"); } /* Rate limiting. */ diff --git a/vswitchd/ovs-brcompatd.c b/vswitchd/ovs-brcompatd.c index 32345296f..667aa661b 100644 --- a/vswitchd/ovs-brcompatd.c +++ b/vswitchd/ovs-brcompatd.c @@ -1298,8 +1298,8 @@ main(int argc, char *argv[]) } if (brc_open(&brc_sock)) { - ovs_fatal(0, "could not open brcompat socket. Check " - "\"brcompat\" kernel module."); + VLOG_FATAL("could not open brcompat socket. Check " + "\"brcompat\" kernel module."); } if (prune_timeout) { @@ -1307,12 +1307,14 @@ main(int argc, char *argv[]) error = nl_sock_create(NETLINK_ROUTE, &rtnl_sock); if (error) { - ovs_fatal(error, "could not create rtnetlink socket"); + VLOG_FATAL("could not create rtnetlink socket (%s)", + strerror(error)); } error = nl_sock_join_mcgroup(rtnl_sock, RTNLGRP_LINK); if (error) { - ovs_fatal(error, "could not join RTNLGRP_LINK multicast group"); + VLOG_FATAL("could not join RTNLGRP_LINK multicast group (%s)", + strerror(error)); } } @@ -1378,11 +1380,11 @@ validate_appctl_command(void) } else if (p[1] == 's') { n++; } else { - ovs_fatal(0, "only '%%s' and '%%%%' allowed in --appctl-command"); + VLOG_FATAL("only '%%s' and '%%%%' allowed in --appctl-command"); } } if (n != 1) { - ovs_fatal(0, "'%%s' must appear exactly once in --appctl-command"); + VLOG_FATAL("'%%s' must appear exactly once in --appctl-command"); } } @@ -1453,8 +1455,8 @@ parse_options(int argc, char *argv[]) argv += optind; if (argc != 1) { - ovs_fatal(0, "database socket is non-option argument; " - "use --help for usage"); + VLOG_FATAL("database socket is non-option argument; " + "use --help for usage"); } return argv[0]; diff --git a/vswitchd/ovs-vswitchd.c b/vswitchd/ovs-vswitchd.c index 1303e0893..bae03dd0f 100644 --- a/vswitchd/ovs-vswitchd.c +++ b/vswitchd/ovs-vswitchd.c @@ -199,8 +199,8 @@ parse_options(int argc, char *argv[]) argv += optind; if (argc != 1) { - ovs_fatal(0, "database socket is only non-option argument; " - "use --help for usage"); + VLOG_FATAL("database socket is only non-option argument; " + "use --help for usage"); } return argv[0]; -- 2.43.0