From 1bd1ebaa08e9ca2e120f31fb9db3bd6be8111989 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 14 Sep 2020 18:05:47 -0400 Subject: lib: generate trace events for log messages LTTng supports tracef() and tracelog() macros, which work like printf, and are used to ease transition between logging and tracing. Messages printed using these macros end up as trace events. For our uses we are not interested in dropping logging, but it is nice to get log messages in trace output, so I've added a call to tracelog() in zlog that dumps our zlog messages as trace events. Signed-off-by: Quentin Young --- lib/zlog.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'lib/zlog.c') diff --git a/lib/zlog.c b/lib/zlog.c index 8dfd20371b..f28ff08617 100644 --- a/lib/zlog.c +++ b/lib/zlog.c @@ -52,6 +52,7 @@ #include "printfrr.h" #include "frrcu.h" #include "zlog.h" +#include "trace.h" DEFINE_MTYPE_STATIC(LIB, LOG_MESSAGE, "log message") DEFINE_MTYPE_STATIC(LIB, LOG_TLSBUF, "log thread-local buffer") @@ -450,6 +451,34 @@ void vzlog(int prio, const char *fmt, va_list ap) { struct zlog_tls *zlog_tls = zlog_tls_get(); +#ifdef HAVE_LTTNG + va_list copy; + va_copy(copy, ap); + char *msg = vasprintfrr(MTYPE_LOG_MESSAGE, fmt, copy); + + switch (prio) { + case LOG_ERR: + tracelog(TRACE_ERR, msg); + break; + case LOG_WARNING: + tracelog(TRACE_WARNING, msg); + break; + case LOG_DEBUG: + tracelog(TRACE_DEBUG, msg); + break; + case LOG_NOTICE: + tracelog(TRACE_DEBUG, msg); + break; + case LOG_INFO: + default: + tracelog(TRACE_INFO, msg); + break; + } + + va_end(copy); + XFREE(MTYPE_LOG_MESSAGE, msg); +#endif + if (zlog_tls) vzlog_tls(zlog_tls, prio, fmt, ap); else -- cgit v1.2.3 From 912d45a1610dc7ec14017a2d8618ad357e89370e Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 28 Sep 2020 15:49:22 -0400 Subject: lib: move trace.h -> libfrr_trace.h Signed-off-by: Quentin Young --- lib/frr_pthread.c | 2 +- lib/hash.c | 2 +- lib/libfrr_trace.c | 4 + lib/libfrr_trace.h | 249 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/linklist.c | 2 +- lib/memory.c | 2 +- lib/subdir.am | 6 +- lib/table.c | 2 +- lib/thread.c | 2 +- lib/trace.c | 4 - lib/trace.h | 249 ----------------------------------------------------- lib/zlog.c | 2 +- 12 files changed, 263 insertions(+), 263 deletions(-) create mode 100644 lib/libfrr_trace.c create mode 100644 lib/libfrr_trace.h delete mode 100644 lib/trace.c delete mode 100644 lib/trace.h (limited to 'lib/zlog.c') diff --git a/lib/frr_pthread.c b/lib/frr_pthread.c index 82d0c8c49f..689284eb69 100644 --- a/lib/frr_pthread.c +++ b/lib/frr_pthread.c @@ -28,7 +28,7 @@ #include "memory.h" #include "linklist.h" #include "zlog.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, FRR_PTHREAD, "FRR POSIX Thread") DEFINE_MTYPE_STATIC(LIB, PTHREAD_PRIM, "POSIX sync primitives") diff --git a/lib/hash.c b/lib/hash.c index d0dc639229..f34a2aae0b 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -29,7 +29,7 @@ #include "command.h" #include "libfrr.h" #include "frr_pthread.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, HASH, "Hash") DEFINE_MTYPE_STATIC(LIB, HASH_BACKET, "Hash Bucket") diff --git a/lib/libfrr_trace.c b/lib/libfrr_trace.c new file mode 100644 index 0000000000..2f300e6ee1 --- /dev/null +++ b/lib/libfrr_trace.c @@ -0,0 +1,4 @@ +#define TRACEPOINT_CREATE_PROBES +#define TRACEPOINT_DEFINE + +#include "libfrr_trace.h" diff --git a/lib/libfrr_trace.h b/lib/libfrr_trace.h new file mode 100644 index 0000000000..337360852c --- /dev/null +++ b/lib/libfrr_trace.h @@ -0,0 +1,249 @@ +/* Tracing + * + * Copyright (C) 2020 NVIDIA Corporation + * Quentin Young + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#if !defined(_LIBFRR_TRACE_H_) || defined(TRACEPOINT_HEADER_MULTI_READ) +#define _LIBFRR_TRACE_H_ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* HAVE_CONFIG_H */ + +#ifdef HAVE_LTTNG + +#undef TRACEPOINT_PROVIDER +#define TRACEPOINT_PROVIDER frr_libfrr + +#undef TRACEPOINT_INCLUDE +#define TRACEPOINT_INCLUDE "./libfrr_trace.h" + +#include + +#include "hash.h" +#include "thread.h" +#include "memory.h" +#include "linklist.h" +#include "table.h" + +/* clang-format off */ + +TRACEPOINT_EVENT( + frr_libfrr, + hash_get, + TP_ARGS(struct hash *, hash, void *, data), + TP_FIELDS( + ctf_string(name, hash->name ? hash->name : "(unnamed)") + ctf_integer(unsigned int, index_size, hash->size) + ctf_integer(unsigned long, item_count, hash->count) + ctf_integer_hex(intptr_t, data_ptr, data) + ) +) + +TRACEPOINT_LOGLEVEL(frr_libfrr, hash_get, TRACE_INFO) + +TRACEPOINT_EVENT( + frr_libfrr, + hash_insert, + TP_ARGS(struct hash *, hash, void *, data, unsigned int, key), + TP_FIELDS( + ctf_string(name, hash->name ? hash->name : "(unnamed)") + ctf_integer(unsigned int, key, hash->size) + ctf_integer(unsigned int, index_size, hash->size) + ctf_integer(unsigned long, item_count, hash->count) + ctf_integer_hex(intptr_t, data_ptr, data) + ) +) + +TRACEPOINT_LOGLEVEL(frr_libfrr, hash_insert, TRACE_INFO) + +TRACEPOINT_EVENT( + frr_libfrr, + hash_release, + TP_ARGS(struct hash *, hash, void *, data, void *, released_item), + TP_FIELDS( + ctf_string(name, hash->name ? hash->name : "(unnamed)") + ctf_integer(unsigned int, index_size, hash->size) + ctf_integer(unsigned long, item_count, hash->count) + ctf_integer_hex(intptr_t, data_ptr, data) + ctf_integer_hex(intptr_t, released_item, data) + ) +) + +TRACEPOINT_LOGLEVEL(frr_libfrr, hash_release, TRACE_INFO) + +#define THREAD_SCHEDULE_ARGS \ + TP_ARGS(struct thread_master *, master, const char *, funcname, \ + const char *, schedfrom, int, fromln, struct thread **, \ + thread_ptr, int, fd, int, val, void *, arg, long, time) + +TRACEPOINT_EVENT_CLASS( + frr_libfrr, + thread_operation, + THREAD_SCHEDULE_ARGS, + TP_FIELDS( + ctf_string(threadmaster_name, master->name) + ctf_string(function_name, funcname ? funcname : "(unknown function)") + ctf_string(scheduled_from, schedfrom ? schedfrom : "(unknown file)") + ctf_integer(int, scheduled_on_line, fromln) + ctf_integer_hex(intptr_t, thread_addr, thread_ptr ? *thread_ptr : NULL) + ctf_integer(int, file_descriptor, fd) + ctf_integer(int, event_value, val) + ctf_integer_hex(intptr_t, argument_ptr, arg) + ctf_integer(long, timer, time) + ) +) + +#define THREAD_OPERATION_TRACEPOINT_INSTANCE(name) \ + TRACEPOINT_EVENT_INSTANCE(frr_libfrr, thread_operation, name, \ + THREAD_SCHEDULE_ARGS) \ + TRACEPOINT_LOGLEVEL(frr_libfrr, name, TRACE_INFO) + +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_timer) +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_event) +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_read) +THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_write) +THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel) +THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel_async) +THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_call) + +TRACEPOINT_EVENT( + frr_libfrr, + frr_pthread_run, + TP_ARGS( + char *, name + ), + TP_FIELDS( + ctf_string(frr_pthread_name, name) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + frr_pthread_stop, + TP_ARGS( + char *, name + ), + TP_FIELDS( + ctf_string(frr_pthread_name, name) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + memalloc, + TP_ARGS( + struct memtype *, mt, void *, ptr, size_t, size + ), + TP_FIELDS( + ctf_string(memtype, mt->name) + ctf_integer(size_t, size, size) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + memfree, + TP_ARGS( + struct memtype *, mt, void *, ptr + ), + TP_FIELDS( + ctf_string(memtype, mt->name) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_add, + TP_ARGS( + struct list *, list, const void *, ptr + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_remove, + TP_ARGS( + struct list *, list, const void *, ptr + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ctf_integer_hex(intptr_t, ptr, ptr) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_delete_node, + TP_ARGS( + struct list *, list, const void *, node + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ctf_integer_hex(intptr_t, node, node) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + list_sort, + TP_ARGS( + struct list *, list + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, list, list) + ctf_integer(unsigned int, count, list->count) + ) +) + +TRACEPOINT_EVENT( + frr_libfrr, + route_node_get, + TP_ARGS( + struct route_table *, table, char *, prefix + ), + TP_FIELDS( + ctf_integer_hex(intptr_t, table, table) + ctf_string(prefix, prefix) + ) +) + +/* clang-format on */ + +#include +#include + +#else /* HAVE_LTTNG */ + +#define tracepoint(...) +#define tracef(...) +#define tracelog(...) +#define tracepoint_enabled(...) true + +#endif /* HAVE_LTTNG */ + +#endif /* _TRACE_H */ diff --git a/lib/linklist.c b/lib/linklist.c index 19a8514cd6..ea206d89e7 100644 --- a/lib/linklist.c +++ b/lib/linklist.c @@ -23,7 +23,7 @@ #include "linklist.h" #include "memory.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, LINK_LIST, "Link List") DEFINE_MTYPE_STATIC(LIB, LINK_NODE, "Link Node") diff --git a/lib/memory.c b/lib/memory.c index 219ddcb638..6bc46b2f30 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -29,7 +29,7 @@ #include "memory.h" #include "log.h" -#include "trace.h" +#include "libfrr_trace.h" static struct memgroup *mg_first = NULL; struct memgroup **mg_insert = &mg_first; diff --git a/lib/subdir.am b/lib/subdir.am index 54fdf429fc..5c371f2cc9 100644 --- a/lib/subdir.am +++ b/lib/subdir.am @@ -46,6 +46,7 @@ lib_libfrr_la_SOURCES = \ lib/lib_errors.c \ lib/lib_vty.c \ lib/libfrr.c \ + lib/libfrr_trace.c \ lib/linklist.c \ lib/log.c \ lib/log_filter.c \ @@ -93,7 +94,6 @@ lib_libfrr_la_SOURCES = \ lib/table.c \ lib/termtable.c \ lib/thread.c \ - lib/trace.c \ lib/typerb.c \ lib/typesafe.c \ lib/vector.c \ @@ -205,6 +205,7 @@ pkginclude_HEADERS += \ lib/lib_errors.h \ lib/lib_vty.h \ lib/libfrr.h \ + lib/libfrr_trace.h \ lib/libospf.h \ lib/linklist.h \ lib/log.h \ @@ -252,7 +253,6 @@ pkginclude_HEADERS += \ lib/table.h \ lib/termtable.h \ lib/thread.h \ - lib/trace.h \ lib/typerb.h \ lib/typesafe.h \ lib/vector.h \ @@ -413,9 +413,9 @@ lib_clippy_SOURCES = \ lib/command_py.c \ lib/defun_lex.l \ lib/graph.c \ + lib/libfrr_trace.c \ lib/memory.c \ lib/vector.c \ - lib/trace.c \ # end # (global) clippy rules for all directories diff --git a/lib/table.c b/lib/table.c index 0d1be2beff..26bcca4b2b 100644 --- a/lib/table.c +++ b/lib/table.c @@ -27,7 +27,7 @@ #include "table.h" #include "memory.h" #include "sockunion.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, ROUTE_TABLE, "Route table") DEFINE_MTYPE(LIB, ROUTE_NODE, "Route node") diff --git a/lib/thread.c b/lib/thread.c index 8679454367..a15bd541dd 100644 --- a/lib/thread.c +++ b/lib/thread.c @@ -35,7 +35,7 @@ #include "frratomic.h" #include "frr_pthread.h" #include "lib_errors.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, THREAD, "Thread") DEFINE_MTYPE_STATIC(LIB, THREAD_MASTER, "Thread master") diff --git a/lib/trace.c b/lib/trace.c deleted file mode 100644 index 7b6c09b387..0000000000 --- a/lib/trace.c +++ /dev/null @@ -1,4 +0,0 @@ -#define TRACEPOINT_CREATE_PROBES -#define TRACEPOINT_DEFINE - -#include "trace.h" diff --git a/lib/trace.h b/lib/trace.h deleted file mode 100644 index 5e0b13a655..0000000000 --- a/lib/trace.h +++ /dev/null @@ -1,249 +0,0 @@ -/* Tracing - * - * Copyright (C) 2020 NVIDIA Corporation - * Quentin Young - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; see the file COPYING; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined(_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ) -#define _TRACE_H - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ - -#ifdef HAVE_LTTNG - -#undef TRACEPOINT_PROVIDER -#define TRACEPOINT_PROVIDER frr_libfrr - -#undef TRACEPOINT_INCLUDE -#define TRACEPOINT_INCLUDE "./trace.h" - -#include - -#include "hash.h" -#include "thread.h" -#include "memory.h" -#include "linklist.h" -#include "table.h" - -/* clang-format off */ - -TRACEPOINT_EVENT( - frr_libfrr, - hash_get, - TP_ARGS(struct hash *, hash, void *, data), - TP_FIELDS( - ctf_string(name, hash->name ? hash->name : "(unnamed)") - ctf_integer(unsigned int, index_size, hash->size) - ctf_integer(unsigned long, item_count, hash->count) - ctf_integer_hex(intptr_t, data_ptr, data) - ) -) - -TRACEPOINT_LOGLEVEL(frr_libfrr, hash_get, TRACE_INFO) - -TRACEPOINT_EVENT( - frr_libfrr, - hash_insert, - TP_ARGS(struct hash *, hash, void *, data, unsigned int, key), - TP_FIELDS( - ctf_string(name, hash->name ? hash->name : "(unnamed)") - ctf_integer(unsigned int, key, hash->size) - ctf_integer(unsigned int, index_size, hash->size) - ctf_integer(unsigned long, item_count, hash->count) - ctf_integer_hex(intptr_t, data_ptr, data) - ) -) - -TRACEPOINT_LOGLEVEL(frr_libfrr, hash_insert, TRACE_INFO) - -TRACEPOINT_EVENT( - frr_libfrr, - hash_release, - TP_ARGS(struct hash *, hash, void *, data, void *, released_item), - TP_FIELDS( - ctf_string(name, hash->name ? hash->name : "(unnamed)") - ctf_integer(unsigned int, index_size, hash->size) - ctf_integer(unsigned long, item_count, hash->count) - ctf_integer_hex(intptr_t, data_ptr, data) - ctf_integer_hex(intptr_t, released_item, data) - ) -) - -TRACEPOINT_LOGLEVEL(frr_libfrr, hash_release, TRACE_INFO) - -#define THREAD_SCHEDULE_ARGS \ - TP_ARGS(struct thread_master *, master, const char *, funcname, \ - const char *, schedfrom, int, fromln, struct thread **, \ - thread_ptr, int, fd, int, val, void *, arg, long, time) - -TRACEPOINT_EVENT_CLASS( - frr_libfrr, - thread_operation, - THREAD_SCHEDULE_ARGS, - TP_FIELDS( - ctf_string(threadmaster_name, master->name) - ctf_string(function_name, funcname ? funcname : "(unknown function)") - ctf_string(scheduled_from, schedfrom ? schedfrom : "(unknown file)") - ctf_integer(int, scheduled_on_line, fromln) - ctf_integer_hex(intptr_t, thread_addr, thread_ptr ? *thread_ptr : NULL) - ctf_integer(int, file_descriptor, fd) - ctf_integer(int, event_value, val) - ctf_integer_hex(intptr_t, argument_ptr, arg) - ctf_integer(long, timer, time) - ) -) - -#define THREAD_OPERATION_TRACEPOINT_INSTANCE(name) \ - TRACEPOINT_EVENT_INSTANCE(frr_libfrr, thread_operation, name, \ - THREAD_SCHEDULE_ARGS) \ - TRACEPOINT_LOGLEVEL(frr_libfrr, name, TRACE_INFO) - -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_timer) -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_event) -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_read) -THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_write) -THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel) -THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel_async) -THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_call) - -TRACEPOINT_EVENT( - frr_libfrr, - frr_pthread_run, - TP_ARGS( - char *, name - ), - TP_FIELDS( - ctf_string(frr_pthread_name, name) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - frr_pthread_stop, - TP_ARGS( - char *, name - ), - TP_FIELDS( - ctf_string(frr_pthread_name, name) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - memalloc, - TP_ARGS( - struct memtype *, mt, void *, ptr, size_t, size - ), - TP_FIELDS( - ctf_string(memtype, mt->name) - ctf_integer(size_t, size, size) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - memfree, - TP_ARGS( - struct memtype *, mt, void *, ptr - ), - TP_FIELDS( - ctf_string(memtype, mt->name) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_add, - TP_ARGS( - struct list *, list, const void *, ptr - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_remove, - TP_ARGS( - struct list *, list, const void *, ptr - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ctf_integer_hex(intptr_t, ptr, ptr) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_delete_node, - TP_ARGS( - struct list *, list, const void *, node - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ctf_integer_hex(intptr_t, node, node) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - list_sort, - TP_ARGS( - struct list *, list - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, list, list) - ctf_integer(unsigned int, count, list->count) - ) -) - -TRACEPOINT_EVENT( - frr_libfrr, - route_node_get, - TP_ARGS( - struct route_table *, table, char *, prefix - ), - TP_FIELDS( - ctf_integer_hex(intptr_t, table, table) - ctf_string(prefix, prefix) - ) -) - -/* clang-format on */ - -#include -#include - -#else /* HAVE_LTTNG */ - -#define tracepoint(...) -#define tracef(...) -#define tracelog(...) -#define tracepoint_enabled(...) true - -#endif /* HAVE_LTTNG */ - -#endif /* _TRACE_H */ diff --git a/lib/zlog.c b/lib/zlog.c index f28ff08617..aec8744b9c 100644 --- a/lib/zlog.c +++ b/lib/zlog.c @@ -52,7 +52,7 @@ #include "printfrr.h" #include "frrcu.h" #include "zlog.h" -#include "trace.h" +#include "libfrr_trace.h" DEFINE_MTYPE_STATIC(LIB, LOG_MESSAGE, "log message") DEFINE_MTYPE_STATIC(LIB, LOG_TLSBUF, "log thread-local buffer") -- cgit v1.2.3 From c7bb4f006b22592d3c57bd7d84d521485c278567 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 28 Sep 2020 18:13:27 -0400 Subject: lib, bgpd: convert lttng tracepoints to frrtrace() - tracepoint() -> frrtrace() - tracelog() -> frrtracelog() - tracepoint_enabled() -> frrtrace_enabled() Also removes copypasta'd #ifdefs for those LTTng macros, those are handled in lib/trace.h Signed-off-by: Quentin Young --- bgpd/bgp_io.c | 4 ++-- bgpd/bgp_packet.c | 12 ++++++------ bgpd/bgp_route.c | 18 +++++++++--------- bgpd/bgp_trace.h | 11 +---------- lib/frr_pthread.c | 4 ++-- lib/hash.c | 6 +++--- lib/libfrr_trace.h | 13 ++----------- lib/linklist.c | 8 ++++---- lib/memory.c | 4 ++-- lib/table.c | 4 ++-- lib/thread.c | 44 +++++++++++++++++++++----------------------- lib/zlog.c | 10 +++++----- 12 files changed, 59 insertions(+), 79 deletions(-) (limited to 'lib/zlog.c') diff --git a/bgpd/bgp_io.c b/bgpd/bgp_io.c index 65b388e61a..0997fdba97 100644 --- a/bgpd/bgp_io.c +++ b/bgpd/bgp_io.c @@ -39,7 +39,7 @@ #include "bgpd/bgp_errors.h" // for expanded error reference information #include "bgpd/bgp_fsm.h" // for BGP_EVENT_ADD, bgp_event #include "bgpd/bgp_packet.h" // for bgp_notify_send_with_data, bgp_notify... -#include "bgpd/bgp_trace.h" // for tracepoints +#include "bgpd/bgp_trace.h" // for frrtraces #include "bgpd/bgpd.h" // for peer, BGP_MARKER_SIZE, bgp_master, bm /* clang-format on */ @@ -236,7 +236,7 @@ static int bgp_process_reads(struct thread *thread) stream_set_endp(pkt, pktsize); frr_with_mutex(&peer->io_mtx) { - tracepoint(frr_bgp, packet_read, peer, pkt); + frrtrace(2, frr_bgp, packet_read, peer, pkt); stream_fifo_push(peer->ibuf, pkt); } diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index f498dc69db..2ebac56670 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -2367,7 +2367,7 @@ int bgp_process_packet(struct thread *thread) */ switch (type) { case BGP_MSG_OPEN: - tracepoint(frr_bgp, open_process, peer, size); + frrtrace(2, frr_bgp, open_process, peer, size); atomic_fetch_add_explicit(&peer->open_in, 1, memory_order_relaxed); mprc = bgp_open_receive(peer, size); @@ -2378,7 +2378,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_UPDATE: - tracepoint(frr_bgp, update_process, peer, size); + frrtrace(2, frr_bgp, update_process, peer, size); atomic_fetch_add_explicit(&peer->update_in, 1, memory_order_relaxed); peer->readtime = monotime(NULL); @@ -2390,7 +2390,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_NOTIFY: - tracepoint(frr_bgp, notification_process, peer, size); + frrtrace(2, frr_bgp, notification_process, peer, size); atomic_fetch_add_explicit(&peer->notify_in, 1, memory_order_relaxed); mprc = bgp_notify_receive(peer, size); @@ -2401,7 +2401,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_KEEPALIVE: - tracepoint(frr_bgp, keepalive_process, peer, size); + frrtrace(2, frr_bgp, keepalive_process, peer, size); peer->readtime = monotime(NULL); atomic_fetch_add_explicit(&peer->keepalive_in, 1, memory_order_relaxed); @@ -2414,7 +2414,7 @@ int bgp_process_packet(struct thread *thread) break; case BGP_MSG_ROUTE_REFRESH_NEW: case BGP_MSG_ROUTE_REFRESH_OLD: - tracepoint(frr_bgp, refresh_process, peer, size); + frrtrace(2, frr_bgp, refresh_process, peer, size); atomic_fetch_add_explicit(&peer->refresh_in, 1, memory_order_relaxed); mprc = bgp_route_refresh_receive(peer, size); @@ -2425,7 +2425,7 @@ int bgp_process_packet(struct thread *thread) __func__, peer->host); break; case BGP_MSG_CAPABILITY: - tracepoint(frr_bgp, capability_process, peer, size); + frrtrace(2, frr_bgp, capability_process, peer, size); atomic_fetch_add_explicit(&peer->dynamic_cap_in, 1, memory_order_relaxed); mprc = bgp_capability_receive(peer, size); diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index e3c6c463a5..4713452d5e 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -1329,12 +1329,12 @@ static enum filter_type bgp_input_filter(struct peer *peer, } done: - if (tracepoint_enabled(frr_bgp, input_filter)) { + if (frrtrace_enabled(frr_bgp, input_filter)) { char pfxprint[PREFIX2STR_BUFFER]; prefix2str(p, pfxprint, sizeof(pfxprint)); - tracepoint(frr_bgp, input_filter, peer, pfxprint, afi, safi, - ret == FILTER_PERMIT ? "permit" : "deny"); + frrtrace(5, frr_bgp, input_filter, peer, pfxprint, afi, safi, + ret == FILTER_PERMIT ? "permit" : "deny"); } return ret; @@ -1386,12 +1386,12 @@ static enum filter_type bgp_output_filter(struct peer *peer, } } - if (tracepoint_enabled(frr_bgp, output_filter)) { + if (frrtrace_enabled(frr_bgp, output_filter)) { char pfxprint[PREFIX2STR_BUFFER]; prefix2str(p, pfxprint, sizeof(pfxprint)); - tracepoint(frr_bgp, output_filter, peer, pfxprint, afi, safi, - ret == FILTER_PERMIT ? "permit" : "deny"); + frrtrace(5, frr_bgp, output_filter, peer, pfxprint, afi, safi, + ret == FILTER_PERMIT ? "permit" : "deny"); } done: @@ -3463,12 +3463,12 @@ int bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, uint8_t pi_type = 0; uint8_t pi_sub_type = 0; - if (tracepoint_enabled(frr_bgp, process_update)) { + if (frrtrace_enabled(frr_bgp, process_update)) { char pfxprint[PREFIX2STR_BUFFER]; prefix2str(p, pfxprint, sizeof(pfxprint)); - tracepoint(frr_bgp, process_update, peer, pfxprint, addpath_id, - afi, safi, attr); + frrtrace(6, frr_bgp, process_update, peer, pfxprint, addpath_id, + afi, safi, attr); } #ifdef ENABLE_BGP_VNC diff --git a/bgpd/bgp_trace.h b/bgpd/bgp_trace.h index 4b79155efb..bd26c8de8a 100644 --- a/bgpd/bgp_trace.h +++ b/bgpd/bgp_trace.h @@ -21,9 +21,7 @@ #if !defined(_BGP_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ) #define _BGP_TRACE_H -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include "lib/trace.h" #ifdef HAVE_LTTNG @@ -122,13 +120,6 @@ TRACEPOINT_LOGLEVEL(frr_bgp, output_filter, TRACE_INFO) #include -#else /* HAVE_LTTNG */ - -#define tracepoint(...) -#define tracef(...) -#define tracelog(...) -#define tracepoint_enabled(...) true - #endif /* HAVE_LTTNG */ #endif /* _BGP_TRACE_H */ diff --git a/lib/frr_pthread.c b/lib/frr_pthread.c index 689284eb69..3f0179fbc1 100644 --- a/lib/frr_pthread.c +++ b/lib/frr_pthread.c @@ -168,7 +168,7 @@ int frr_pthread_run(struct frr_pthread *fpt, const pthread_attr_t *attr) sigfillset(&blocksigs); pthread_sigmask(SIG_BLOCK, &blocksigs, &oldsigs); - tracepoint(frr_libfrr, frr_pthread_run, fpt->name); + frrtrace(1, frr_libfrr, frr_pthread_run, fpt->name); fpt->rcu_thread = rcu_thread_prepare(); ret = pthread_create(&fpt->thread, attr, frr_pthread_inner, fpt); @@ -207,7 +207,7 @@ void frr_pthread_notify_running(struct frr_pthread *fpt) int frr_pthread_stop(struct frr_pthread *fpt, void **result) { - tracepoint(frr_libfrr, frr_pthread_stop, fpt->name); + frrtrace(1, frr_libfrr, frr_pthread_stop, fpt->name); int ret = (*fpt->attr.stop)(fpt, result); memset(&fpt->thread, 0x00, sizeof(fpt->thread)); diff --git a/lib/hash.c b/lib/hash.c index f34a2aae0b..ed429b77d0 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -139,7 +139,7 @@ static void hash_expand(struct hash *hash) void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *)) { - tracepoint(frr_libfrr, hash_get, hash, data); + frrtrace(2, frr_libfrr, hash_get, hash, data); unsigned int key; unsigned int index; @@ -175,7 +175,7 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *)) hash->index[index] = bucket; hash->count++; - tracepoint(frr_libfrr, hash_insert, hash, data, key); + frrtrace(3, frr_libfrr, hash_insert, hash, data, key); int oldlen = bucket->next ? bucket->next->len : 0; int newlen = oldlen + 1; @@ -246,7 +246,7 @@ void *hash_release(struct hash *hash, void *data) pp = bucket; } - tracepoint(frr_libfrr, hash_release, hash, data, ret); + frrtrace(3, frr_libfrr, hash_release, hash, data, ret); return ret; } diff --git a/lib/libfrr_trace.h b/lib/libfrr_trace.h index 337360852c..7215007ffb 100644 --- a/lib/libfrr_trace.h +++ b/lib/libfrr_trace.h @@ -21,9 +21,7 @@ #if !defined(_LIBFRR_TRACE_H_) || defined(TRACEPOINT_HEADER_MULTI_READ) #define _LIBFRR_TRACE_H_ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif /* HAVE_CONFIG_H */ +#include "trace.h" #ifdef HAVE_LTTNG @@ -237,13 +235,6 @@ TRACEPOINT_EVENT( #include #include -#else /* HAVE_LTTNG */ - -#define tracepoint(...) -#define tracef(...) -#define tracelog(...) -#define tracepoint_enabled(...) true - #endif /* HAVE_LTTNG */ -#endif /* _TRACE_H */ +#endif /* _LIBFRR_TRACE_H_ */ diff --git a/lib/linklist.c b/lib/linklist.c index ea206d89e7..43c2002231 100644 --- a/lib/linklist.c +++ b/lib/linklist.c @@ -67,7 +67,7 @@ static void listnode_free(struct list *list, struct listnode *node) struct listnode *listnode_add(struct list *list, void *val) { - tracepoint(frr_libfrr, list_add, list, val); + frrtrace(2, frr_libfrr, list_add, list, val); struct listnode *node; @@ -284,7 +284,7 @@ void listnode_move_to_tail(struct list *l, struct listnode *n) void listnode_delete(struct list *list, const void *val) { - tracepoint(frr_libfrr, list_remove, list, val); + frrtrace(2, frr_libfrr, list_remove, list, val); struct listnode *node = listnode_lookup(list, val); @@ -365,7 +365,7 @@ struct listnode *listnode_lookup_nocheck(struct list *list, void *data) void list_delete_node(struct list *list, struct listnode *node) { - tracepoint(frr_libfrr, list_delete_node, list, node); + frrtrace(2, frr_libfrr, list_delete_node, list, node); if (node->prev) node->prev->next = node->next; @@ -381,7 +381,7 @@ void list_delete_node(struct list *list, struct listnode *node) void list_sort(struct list *list, int (*cmp)(const void **, const void **)) { - tracepoint(frr_libfrr, list_sort, list); + frrtrace(1, frr_libfrr, list_sort, list); struct listnode *ln, *nn; int i = -1; diff --git a/lib/memory.c b/lib/memory.c index 6bc46b2f30..f715044ea3 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -78,7 +78,7 @@ static inline void mt_count_alloc(struct memtype *mt, size_t size, void *ptr) static inline void mt_count_free(struct memtype *mt, void *ptr) { - tracepoint(frr_libfrr, memfree, mt, ptr); + frrtrace(2, frr_libfrr, memfree, mt, ptr); assert(mt->n_alloc); atomic_fetch_sub_explicit(&mt->n_alloc, 1, memory_order_relaxed); @@ -92,7 +92,7 @@ static inline void mt_count_free(struct memtype *mt, void *ptr) static inline void *mt_checkalloc(struct memtype *mt, void *ptr, size_t size) { - tracepoint(frr_libfrr, memalloc, mt, ptr, size); + frrtrace(3, frr_libfrr, memalloc, mt, ptr, size); if (__builtin_expect(ptr == NULL, 0)) { if (size) { diff --git a/lib/table.c b/lib/table.c index 26bcca4b2b..89e32182b5 100644 --- a/lib/table.c +++ b/lib/table.c @@ -277,10 +277,10 @@ struct route_node *route_node_lookup_maynull(struct route_table *table, struct route_node *route_node_get(struct route_table *table, union prefixconstptr pu) { - if (tracepoint_enabled(frr_libfrr, route_node_get)) { + if (frrtrace_enabled(frr_libfrr, route_node_get)) { char buf[PREFIX2STR_BUFFER]; prefix2str(pu, buf, sizeof(buf)); - tracepoint(frr_libfrr, route_node_get, table, buf); + frrtrace(2, frr_libfrr, route_node_get, table, buf); } struct route_node search; diff --git a/lib/thread.c b/lib/thread.c index a15bd541dd..9a5453b185 100644 --- a/lib/thread.c +++ b/lib/thread.c @@ -789,11 +789,11 @@ struct thread *funcname_thread_add_read_write(int dir, struct thread_master *m, struct thread **thread_array; if (dir == THREAD_READ) - tracepoint(frr_libfrr, schedule_read, m, funcname, schedfrom, - fromln, t_ptr, fd, 0, arg, 0); + frrtrace(9, frr_libfrr, schedule_read, m, funcname, schedfrom, + fromln, t_ptr, fd, 0, arg, 0); else - tracepoint(frr_libfrr, schedule_write, m, funcname, schedfrom, - fromln, t_ptr, fd, 0, arg, 0); + frrtrace(9, frr_libfrr, schedule_write, m, funcname, schedfrom, + fromln, t_ptr, fd, 0, arg, 0); assert(fd >= 0 && fd < m->fd_limit); frr_with_mutex(&m->mtx) { @@ -869,8 +869,8 @@ funcname_thread_add_timer_timeval(struct thread_master *m, assert(type == THREAD_TIMER); assert(time_relative); - tracepoint(frr_libfrr, schedule_timer, m, funcname, schedfrom, fromln, - t_ptr, 0, 0, arg, (long)time_relative->tv_sec); + frrtrace(9, frr_libfrr, schedule_timer, m, funcname, schedfrom, fromln, + t_ptr, 0, 0, arg, (long)time_relative->tv_sec); frr_with_mutex(&m->mtx) { if (t_ptr && *t_ptr) @@ -950,8 +950,8 @@ struct thread *funcname_thread_add_event(struct thread_master *m, { struct thread *thread = NULL; - tracepoint(frr_libfrr, schedule_event, m, funcname, schedfrom, fromln, - t_ptr, 0, val, arg, 0); + frrtrace(9, frr_libfrr, schedule_event, m, funcname, schedfrom, fromln, + t_ptr, 0, val, arg, 0); assert(m != NULL); @@ -1181,10 +1181,9 @@ void thread_cancel(struct thread *thread) { struct thread_master *master = thread->master; - tracepoint(frr_libfrr, thread_cancel, master, thread->funcname, - thread->schedfrom, thread->schedfrom_line, NULL, - thread->u.fd, thread->u.val, thread->arg, - thread->u.sands.tv_sec); + frrtrace(9, frr_libfrr, thread_cancel, master, thread->funcname, + thread->schedfrom, thread->schedfrom_line, NULL, thread->u.fd, + thread->u.val, thread->arg, thread->u.sands.tv_sec); assert(master->owner == pthread_self()); @@ -1227,14 +1226,14 @@ void thread_cancel_async(struct thread_master *master, struct thread **thread, assert(!(thread && eventobj) && (thread || eventobj)); if (thread && *thread) - tracepoint(frr_libfrr, thread_cancel_async, master, - (*thread)->funcname, (*thread)->schedfrom, - (*thread)->schedfrom_line, NULL, (*thread)->u.fd, - (*thread)->u.val, (*thread)->arg, - (*thread)->u.sands.tv_sec); + frrtrace(9, frr_libfrr, thread_cancel_async, master, + (*thread)->funcname, (*thread)->schedfrom, + (*thread)->schedfrom_line, NULL, (*thread)->u.fd, + (*thread)->u.val, (*thread)->arg, + (*thread)->u.sands.tv_sec); else - tracepoint(frr_libfrr, thread_cancel_async, master, NULL, NULL, - 0, NULL, 0, 0, eventobj, 0); + frrtrace(9, frr_libfrr, thread_cancel_async, master, NULL, NULL, + 0, NULL, 0, 0, eventobj, 0); assert(master->owner != pthread_self()); @@ -1611,10 +1610,9 @@ void thread_call(struct thread *thread) GETRUSAGE(&before); thread->real = before.real; - tracepoint(frr_libfrr, thread_call, thread->master, thread->funcname, - thread->schedfrom, thread->schedfrom_line, NULL, - thread->u.fd, thread->u.val, thread->arg, - thread->u.sands.tv_sec); + frrtrace(9, frr_libfrr, thread_call, thread->master, thread->funcname, + thread->schedfrom, thread->schedfrom_line, NULL, thread->u.fd, + thread->u.val, thread->arg, thread->u.sands.tv_sec); pthread_setspecific(thread_current, thread); (*thread->func)(thread); diff --git a/lib/zlog.c b/lib/zlog.c index aec8744b9c..e77feec5f2 100644 --- a/lib/zlog.c +++ b/lib/zlog.c @@ -458,20 +458,20 @@ void vzlog(int prio, const char *fmt, va_list ap) switch (prio) { case LOG_ERR: - tracelog(TRACE_ERR, msg); + frrtracelog(TRACE_ERR, msg); break; case LOG_WARNING: - tracelog(TRACE_WARNING, msg); + frrtracelog(TRACE_WARNING, msg); break; case LOG_DEBUG: - tracelog(TRACE_DEBUG, msg); + frrtracelog(TRACE_DEBUG, msg); break; case LOG_NOTICE: - tracelog(TRACE_DEBUG, msg); + frrtracelog(TRACE_DEBUG, msg); break; case LOG_INFO: default: - tracelog(TRACE_INFO, msg); + frrtracelog(TRACE_INFO, msg); break; } -- cgit v1.2.3