mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-01 05:14:54 +00:00

Previous commits added LTTng tracepoints. This was primarily for testing / trial purposes; in practice we'd like to support arbitrary tracing methods, and especially USDT probes, which SystemTap and dtrace expect, and which are supported on at least one flavor of BSD (FreeBSD). To that end this patch adds an frr-specific tracing macro, frrtrace(), which proxies into either DTRACE_PROBEn() or tracepoint() macros depending on whether --enable-usdt or --enable-lttng is passed at compile time. At some point this could be tweaked to allow compiling in both types of probes. Ideally there should be some logic there to use LTTng's optional support for generating USDT probes when both are requested. No additional libraries are required to use USDT, since these probes are a kernel feature and only need the <sys/sdt.h> header. - add --enable-usdt to toggle use of LTTng tracepoints or USDT probes - add new trace.h library header for use with tracepoint definition headers - add frrtrace() wrapper macro; this should be used to define tracepoints instead of using tracepoint() or DTRACE_PROBEn() Compilation with USDT does nothing as of this commit; the existing LTTng tracepoints need to be converted to use the frrtrace*() macros in a subsequent commit. Signed-off-by: Quentin Young <qlyoung@nvidia.com>
498 lines
11 KiB
Plaintext
498 lines
11 KiB
Plaintext
#
|
|
# libfrr
|
|
#
|
|
lib_LTLIBRARIES += lib/libfrr.la
|
|
lib_libfrr_la_LDFLAGS = -version-info 0:0:0 -Xlinker -e_libfrr_version
|
|
lib_libfrr_la_LIBADD = $(LIBCAP) $(UNWIND_LIBS) $(LIBYANG_LIBS) $(LUA_LIB) $(UST_LIBS) $(LIBM)
|
|
|
|
lib_libfrr_la_SOURCES = \
|
|
lib/agg_table.c \
|
|
lib/atomlist.c \
|
|
lib/bfd.c \
|
|
lib/buffer.c \
|
|
lib/checksum.c \
|
|
lib/command.c \
|
|
lib/command_graph.c \
|
|
lib/command_lex.l \
|
|
lib/command_match.c \
|
|
lib/command_parse.y \
|
|
lib/csv.c \
|
|
lib/debug.c \
|
|
lib/defaults.c \
|
|
lib/distribute.c \
|
|
lib/ferr.c \
|
|
lib/filter.c \
|
|
lib/filter_cli.c \
|
|
lib/filter_nb.c \
|
|
lib/frrcu.c \
|
|
lib/frrlua.c \
|
|
lib/frr_pthread.c \
|
|
lib/frrstr.c \
|
|
lib/getopt.c \
|
|
lib/getopt1.c \
|
|
lib/grammar_sandbox.c \
|
|
lib/graph.c \
|
|
lib/hash.c \
|
|
lib/hook.c \
|
|
lib/id_alloc.c \
|
|
lib/if.c \
|
|
lib/if_rmap.c \
|
|
lib/imsg-buffer.c \
|
|
lib/imsg.c \
|
|
lib/jhash.c \
|
|
lib/json.c \
|
|
lib/keychain.c \
|
|
lib/ldp_sync.c \
|
|
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 \
|
|
lib/log_vty.c \
|
|
lib/md5.c \
|
|
lib/memory.c \
|
|
lib/mlag.c \
|
|
lib/module.c \
|
|
lib/mpls.c \
|
|
lib/srv6.c \
|
|
lib/network.c \
|
|
lib/nexthop.c \
|
|
lib/netns_linux.c \
|
|
lib/netns_other.c \
|
|
lib/nexthop_group.c \
|
|
lib/northbound.c \
|
|
lib/northbound_cli.c \
|
|
lib/northbound_db.c \
|
|
lib/ntop.c \
|
|
lib/openbsd-tree.c \
|
|
lib/pid_output.c \
|
|
lib/plist.c \
|
|
lib/prefix.c \
|
|
lib/privs.c \
|
|
lib/ptm_lib.c \
|
|
lib/pullwr.c \
|
|
lib/qobj.c \
|
|
lib/ringbuf.c \
|
|
lib/routemap.c \
|
|
lib/routemap_cli.c \
|
|
lib/routemap_northbound.c \
|
|
lib/sbuf.c \
|
|
lib/seqlock.c \
|
|
lib/sha256.c \
|
|
lib/sigevent.c \
|
|
lib/skiplist.c \
|
|
lib/sockopt.c \
|
|
lib/sockunion.c \
|
|
lib/spf_backoff.c \
|
|
lib/srcdest_table.c \
|
|
lib/stream.c \
|
|
lib/strlcat.c \
|
|
lib/strlcpy.c \
|
|
lib/systemd.c \
|
|
lib/table.c \
|
|
lib/termtable.c \
|
|
lib/thread.c \
|
|
lib/typerb.c \
|
|
lib/typesafe.c \
|
|
lib/vector.c \
|
|
lib/vrf.c \
|
|
lib/vty.c \
|
|
lib/wheel.c \
|
|
lib/workqueue.c \
|
|
lib/yang.c \
|
|
lib/yang_translator.c \
|
|
lib/yang_wrappers.c \
|
|
lib/zclient.c \
|
|
lib/zlog.c \
|
|
lib/zlog_targets.c \
|
|
lib/printf/printf-pos.c \
|
|
lib/printf/vfprintf.c \
|
|
lib/printf/glue.c \
|
|
lib/routing_nb.c \
|
|
lib/routing_nb_config.c \
|
|
# end
|
|
|
|
nodist_lib_libfrr_la_SOURCES = \
|
|
yang/frr-filter.yang.c \
|
|
yang/frr-interface.yang.c \
|
|
yang/frr-route-map.yang.c \
|
|
yang/frr-route-types.yang.c \
|
|
yang/frr-vrf.yang.c \
|
|
yang/frr-routing.yang.c \
|
|
yang/frr-nexthop.yang.c \
|
|
yang/ietf/ietf-routing-types.yang.c \
|
|
yang/ietf/ietf-interfaces.yang.c \
|
|
yang/ietf/ietf-bgp-types.yang.c \
|
|
yang/frr-module-translator.yang.c \
|
|
yang/frr-nexthop.yang.c \
|
|
# end
|
|
|
|
vtysh_scan += \
|
|
lib/distribute.c \
|
|
lib/filter.c \
|
|
lib/filter_cli.c \
|
|
lib/if.c \
|
|
lib/if_rmap.c \
|
|
lib/keychain.c \
|
|
lib/lib_vty.c \
|
|
lib/nexthop_group.c \
|
|
lib/plist.c \
|
|
lib/routemap.c \
|
|
lib/routemap_cli.c \
|
|
lib/vrf.c \
|
|
lib/vty.c \
|
|
# end
|
|
# can be loaded as DSO - always include for vtysh
|
|
vtysh_scan += lib/agentx.c
|
|
|
|
if SQLITE3
|
|
lib_libfrr_la_LIBADD += $(SQLITE3_LIBS)
|
|
lib_libfrr_la_SOURCES += lib/db.c
|
|
endif
|
|
|
|
clippy_scan += \
|
|
lib/if.c \
|
|
lib/filter_cli.c \
|
|
lib/log_vty.c \
|
|
lib/nexthop_group.c \
|
|
lib/northbound_cli.c \
|
|
lib/plist.c \
|
|
lib/routemap_cli.c \
|
|
lib/vty.c \
|
|
# end
|
|
|
|
pkginclude_HEADERS += \
|
|
lib/agg_table.h \
|
|
lib/atomlist.h \
|
|
lib/bfd.h \
|
|
lib/bitfield.h \
|
|
lib/buffer.h \
|
|
lib/checksum.h \
|
|
lib/mlag.h \
|
|
lib/command.h \
|
|
lib/command_graph.h \
|
|
lib/command_match.h \
|
|
lib/compiler.h \
|
|
lib/csv.h \
|
|
lib/db.h \
|
|
lib/debug.h \
|
|
lib/defaults.h \
|
|
lib/distribute.h \
|
|
lib/ferr.h \
|
|
lib/filter.h \
|
|
lib/freebsd-queue.h \
|
|
lib/frrlua.h \
|
|
lib/frr_pthread.h \
|
|
lib/frratomic.h \
|
|
lib/frrcu.h \
|
|
lib/frrstr.h \
|
|
lib/getopt.h \
|
|
lib/graph.h \
|
|
lib/hash.h \
|
|
lib/hook.h \
|
|
lib/iana_afi.h \
|
|
lib/id_alloc.h \
|
|
lib/if.h \
|
|
lib/if_rmap.h \
|
|
lib/imsg.h \
|
|
lib/ipaddr.h \
|
|
lib/jhash.h \
|
|
lib/json.h \
|
|
lib/keychain.h \
|
|
lib/ldp_sync.h \
|
|
lib/lib_errors.h \
|
|
lib/lib_vty.h \
|
|
lib/libfrr.h \
|
|
lib/libfrr_trace.h \
|
|
lib/libospf.h \
|
|
lib/linklist.h \
|
|
lib/log.h \
|
|
lib/log_vty.h \
|
|
lib/md5.h \
|
|
lib/memory.h \
|
|
lib/module.h \
|
|
lib/monotime.h \
|
|
lib/mpls.h \
|
|
lib/srv6.h \
|
|
lib/network.h \
|
|
lib/nexthop.h \
|
|
lib/nexthop_group.h \
|
|
lib/nexthop_group_private.h \
|
|
lib/northbound.h \
|
|
lib/northbound_cli.h \
|
|
lib/northbound_db.h \
|
|
lib/ns.h \
|
|
lib/openbsd-queue.h \
|
|
lib/openbsd-tree.h \
|
|
lib/plist.h \
|
|
lib/prefix.h \
|
|
lib/printfrr.h \
|
|
lib/privs.h \
|
|
lib/ptm_lib.h \
|
|
lib/pullwr.h \
|
|
lib/pw.h \
|
|
lib/qobj.h \
|
|
lib/queue.h \
|
|
lib/ringbuf.h \
|
|
lib/routemap.h \
|
|
lib/sbuf.h \
|
|
lib/seqlock.h \
|
|
lib/sha256.h \
|
|
lib/sigevent.h \
|
|
lib/skiplist.h \
|
|
lib/smux.h \
|
|
lib/sockopt.h \
|
|
lib/sockunion.h \
|
|
lib/spf_backoff.h \
|
|
lib/srcdest_table.h \
|
|
lib/srte.h \
|
|
lib/stream.h \
|
|
lib/systemd.h \
|
|
lib/table.h \
|
|
lib/termtable.h \
|
|
lib/thread.h \
|
|
lib/trace.h \
|
|
lib/typerb.h \
|
|
lib/typesafe.h \
|
|
lib/vector.h \
|
|
lib/vlan.h \
|
|
lib/vrf.h \
|
|
lib/vrf_int.h \
|
|
lib/vty.h \
|
|
lib/vxlan.h \
|
|
lib/wheel.h \
|
|
lib/workqueue.h \
|
|
lib/yang.h \
|
|
lib/yang_translator.h \
|
|
lib/yang_wrappers.h \
|
|
lib/zassert.h \
|
|
lib/zclient.h \
|
|
lib/zebra.h \
|
|
lib/zlog.h \
|
|
lib/zlog_targets.h \
|
|
lib/pbr.h \
|
|
lib/routing_nb.h \
|
|
# end
|
|
|
|
|
|
nodist_pkginclude_HEADERS += \
|
|
lib/route_types.h \
|
|
lib/version.h \
|
|
# end
|
|
|
|
noinst_HEADERS += \
|
|
lib/clippy.h \
|
|
lib/plist_int.h \
|
|
lib/printf/printfcommon.h \
|
|
lib/printf/printflocal.h \
|
|
#end
|
|
|
|
# General note about module and module helper library (libfrrsnmp, libfrrzmq)
|
|
# linking: If we're linking libfrr statically into daemons, we *must* remove
|
|
# libfrr from modules because modules will always link it in dynamically and
|
|
# thus 2 copies of libfrr will be loaded... hilarity ensues.
|
|
#
|
|
# Not linking libfrr into modules should generally work fine because the
|
|
# executable refers to libfrr either way and the dynamic linker should make
|
|
# libfrr available to modules. If some OS platform has a dynamic linker that
|
|
# doesn't do that, libfrr needs to be readded to modules, but _only_ _if_
|
|
# it's not linked into daemons statically.
|
|
|
|
#
|
|
# SNMP support
|
|
#
|
|
if SNMP
|
|
lib_LTLIBRARIES += lib/libfrrsnmp.la
|
|
endif
|
|
|
|
lib_libfrrsnmp_la_CFLAGS = $(WERROR) $(SNMP_CFLAGS) -std=gnu99
|
|
lib_libfrrsnmp_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrsnmp_la_LIBADD = $(SNMP_LIBS)
|
|
lib_libfrrsnmp_la_SOURCES = \
|
|
lib/agentx.c \
|
|
lib/snmp.c \
|
|
# end
|
|
|
|
#
|
|
# c-ares support
|
|
#
|
|
if CARES
|
|
lib_LTLIBRARIES += lib/libfrrcares.la
|
|
pkginclude_HEADERS += lib/resolver.h
|
|
endif
|
|
|
|
lib_libfrrcares_la_CFLAGS = $(WERROR) $(CARES_CFLAGS)
|
|
lib_libfrrcares_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrcares_la_LIBADD = $(CARES_LIBS)
|
|
lib_libfrrcares_la_SOURCES = \
|
|
lib/resolver.c \
|
|
#end
|
|
|
|
#
|
|
# ZeroMQ support
|
|
#
|
|
if ZEROMQ
|
|
lib_LTLIBRARIES += lib/libfrrzmq.la
|
|
pkginclude_HEADERS += lib/frr_zmq.h
|
|
endif
|
|
|
|
lib_libfrrzmq_la_CFLAGS = $(WERROR) $(ZEROMQ_CFLAGS)
|
|
lib_libfrrzmq_la_LDFLAGS = -version-info 0:0:0
|
|
lib_libfrrzmq_la_LIBADD = $(ZEROMQ_LIBS)
|
|
lib_libfrrzmq_la_SOURCES = \
|
|
lib/frr_zmq.c \
|
|
#end
|
|
|
|
#
|
|
# Tail-f's ConfD support
|
|
#
|
|
if CONFD
|
|
module_LTLIBRARIES += lib/confd.la
|
|
endif
|
|
|
|
lib_confd_la_CFLAGS = $(WERROR) $(CONFD_CFLAGS)
|
|
lib_confd_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_confd_la_LIBADD = lib/libfrr.la $(CONFD_LIBS)
|
|
lib_confd_la_SOURCES = lib/northbound_confd.c
|
|
|
|
#
|
|
# Sysrepo support
|
|
#
|
|
if SYSREPO
|
|
module_LTLIBRARIES += lib/sysrepo.la
|
|
endif
|
|
|
|
lib_sysrepo_la_CFLAGS = $(WERROR) $(SYSREPO_CFLAGS)
|
|
lib_sysrepo_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_sysrepo_la_LIBADD = lib/libfrr.la $(SYSREPO_LIBS)
|
|
lib_sysrepo_la_SOURCES = lib/northbound_sysrepo.c
|
|
|
|
#
|
|
# gRPC northbound plugin
|
|
#
|
|
if GRPC
|
|
module_LTLIBRARIES += lib/grpc.la
|
|
endif
|
|
|
|
lib_grpc_la_CXXFLAGS = $(WERROR) $(GRPC_CFLAGS)
|
|
lib_grpc_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_grpc_la_LIBADD = lib/libfrr.la grpc/libfrrgrpc_pb.la $(GRPC_LIBS)
|
|
lib_grpc_la_SOURCES = lib/northbound_grpc.cpp
|
|
|
|
#
|
|
# CLI utilities
|
|
#
|
|
noinst_PROGRAMS += \
|
|
lib/grammar_sandbox \
|
|
# end
|
|
|
|
if BUILD_CLIPPY
|
|
noinst_PROGRAMS += lib/clippy
|
|
else
|
|
if HOSTTOOLS_CLIPPY
|
|
$(CLIPPY):
|
|
@$(MAKE) -C $(top_builddir)/hosttools lib/route_types.h lib/clippy
|
|
endif
|
|
endif
|
|
|
|
lib_grammar_sandbox_SOURCES = \
|
|
lib/grammar_sandbox_main.c
|
|
lib_grammar_sandbox_LDADD = \
|
|
lib/libfrr.la
|
|
|
|
lib_clippy_CPPFLAGS = $(AM_CPPFLAGS) -D_GNU_SOURCE -DBUILDING_CLIPPY
|
|
lib_clippy_CFLAGS = $(PYTHON_CFLAGS)
|
|
lib_clippy_LDADD = $(PYTHON_LIBS) $(UST_LIBS)
|
|
lib_clippy_LDFLAGS = -export-dynamic
|
|
lib_clippy_SOURCES = \
|
|
lib/clippy.c \
|
|
lib/command_graph.c \
|
|
lib/command_lex.l \
|
|
lib/command_parse.y \
|
|
lib/command_py.c \
|
|
lib/defun_lex.l \
|
|
lib/graph.c \
|
|
lib/libfrr_trace.c \
|
|
lib/memory.c \
|
|
lib/vector.c \
|
|
# end
|
|
|
|
# (global) clippy rules for all directories
|
|
|
|
AM_V_CLIPPY = $(am__v_CLIPPY_$(V))
|
|
am__v_CLIPPY_ = $(am__v_CLIPPY_$(AM_DEFAULT_VERBOSITY))
|
|
am__v_CLIPPY_0 = @echo " CLIPPY " $@;
|
|
am__v_CLIPPY_1 =
|
|
|
|
CLIPPY_DEPS = $(CLIPPY) $(top_srcdir)/python/clidef.py
|
|
|
|
SUFFIXES += _clippy.c
|
|
.c_clippy.c:
|
|
$(AM_V_CLIPPY) $(CLIPPY) $(top_srcdir)/python/clidef.py -o $@ $<
|
|
|
|
## automake's "ylwrap" is a great piece of GNU software... not.
|
|
.l.c:
|
|
$(AM_V_LEX)$(am__skiplex) $(LEXCOMPILE) $<
|
|
.y.c:
|
|
$(AM_V_YACC)$(am__skipyacc) $(YACCCOMPILE) $<
|
|
|
|
#
|
|
# generated sources & extra foo
|
|
#
|
|
EXTRA_DIST += \
|
|
lib/command_lex.h \
|
|
lib/command_parse.h \
|
|
lib/gitversion.pl \
|
|
lib/route_types.pl \
|
|
lib/route_types.txt \
|
|
# end
|
|
|
|
BUILT_SOURCES += \
|
|
lib/gitversion.h \
|
|
lib/route_types.h \
|
|
# end
|
|
|
|
## force route_types.h
|
|
$(lib_clippy_OBJECTS): lib/route_types.h
|
|
$(lib_libfrr_la_OBJECTS): lib/route_types.h
|
|
|
|
AM_YFLAGS = -d -Dapi.prefix=@BISON_OPENBRACE@cmd_yy@BISON_CLOSEBRACE@ @BISON_VERBOSE@
|
|
|
|
lib/command_lex.h: lib/command_lex.c
|
|
@if test ! -f $@; then rm -f "lib/command_lex.c"; else :; fi
|
|
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) "lib/command_lex.c"; else :; fi
|
|
lib/command_lex.lo: lib/command_parse.h
|
|
lib/command_parse.lo: lib/command_lex.h
|
|
lib/clippy-command_lex.$(OBJEXT): lib/command_parse.h
|
|
lib/clippy-command_parse.$(OBJEXT): lib/command_lex.h
|
|
lib/lib_clippy-command_lex.$(OBJEXT): lib/command_parse.h
|
|
lib/lib_clippy-command_parse.$(OBJEXT): lib/command_lex.h
|
|
|
|
lib/route_types.h: $(top_srcdir)/lib/route_types.txt $(top_srcdir)/lib/route_types.pl
|
|
$(PERL) $(top_srcdir)/lib/route_types.pl < $(top_srcdir)/lib/route_types.txt > $@
|
|
DISTCLEANFILES += lib/route_types.h
|
|
|
|
if GIT_VERSION
|
|
# bit of a trick here to always have up-to-date git stamps without triggering
|
|
# unneccessary rebuilds. .PHONY causes the .tmp file to be rebuilt always,
|
|
# but if we use that on gitversion.h it'll ripple through the .c file deps.
|
|
# (even if gitversion.h's file timestamp doesn't change, make will think it
|
|
# did, because of .PHONY...)
|
|
|
|
PHONY_GITVERSION=lib/gitversion.h.tmp
|
|
.SILENT: lib/gitversion.h lib/gitversion.h.tmp
|
|
GITH=lib/gitversion.h
|
|
lib/gitversion.h.tmp: $(top_srcdir)/.git
|
|
$(PERL) $(top_srcdir)/lib/gitversion.pl $(top_srcdir) > ${GITH}.tmp
|
|
lib/gitversion.h: lib/gitversion.h.tmp
|
|
{ test -f ${GITH} && diff -s -q ${GITH}.tmp ${GITH}; } || cp ${GITH}.tmp ${GITH}
|
|
|
|
else
|
|
PHONY_GITVERSION=lib/gitversion.h
|
|
lib/gitversion.h:
|
|
true
|
|
endif
|
|
.PHONY: $(PHONY_GITVERSION)
|