This commit allows users to log the call stack of connectivity_seq_change().
Signed-off-by: Alex Wang <al...@nicira.com> --- lib/connectivity.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/lib/connectivity.c b/lib/connectivity.c index 59f8a39..639224e 100644 --- a/lib/connectivity.c +++ b/lib/connectivity.c @@ -16,9 +16,12 @@ #include <config.h> +#include "backtrace.h" #include "connectivity.h" +#include "ovs-atomic.h" #include "ovs-thread.h" #include "seq.h" +#include "unixctl.h" /* Provides a global seq for connectivity changes. * @@ -26,7 +29,28 @@ * module to report, check or wait on link/port status change. * */ static struct seq *connectivity_seq; +static atomic_bool log_source = ATOMIC_VAR_INIT(false); +static void +connectivity_unixctl_enable_log_source(struct unixctl_conn *conn, + int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, + void *aux OVS_UNUSED) +{ + atomic_store(&log_source, true); + unixctl_command_reply(conn, "log source enabled"); +} + +static void +connectivity_unixctl_disable_log_source(struct unixctl_conn *conn, + int argc OVS_UNUSED, + const char *argv[] OVS_UNUSED, + void *aux OVS_UNUSED) +{ + atomic_store(&log_source, false); + unixctl_command_reply(conn, "log source disabled"); +} + /* Runs only once to initialize 'connectivity_seq'. */ static void connectivity_seq_init(void) @@ -35,9 +59,21 @@ connectivity_seq_init(void) if (ovsthread_once_start(&once)) { connectivity_seq = seq_create(); + + unixctl_command_register("connectivity/enable-log-source", "", 0, 0, + connectivity_unixctl_enable_log_source, NULL); + unixctl_command_register("connectivity/disable-log-source", "", 0, 0, + connectivity_unixctl_disable_log_source, NULL); ovsthread_once_done(&once); } } + +/* Logs the calling stack. */ +static void +log_call_stack(void) +{ + log_backtrace_msg("connectivity_seq"); +} /* Reads and returns the current 'connectivity_seq' value. */ uint64_t @@ -52,7 +88,14 @@ connectivity_seq_read(void) void connectivity_seq_change(void) { + bool log_enabled; + connectivity_seq_init(); + + atomic_read(&log_source, &log_enabled); + if (log_enabled) { + log_call_stack(); + } seq_change(connectivity_seq); } -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev