mirror of
https://git.proxmox.com/git/mirror_frr
synced 2026-02-01 17:19:52 +00:00
This plugin leverages the northbound API to integrate FRR with Sysrepo, a YANG-based configuration and operational state data store. The plugin is linked to the libsysrepo library and communicates with the sysrepod daemon using GPB (Google Protocol Buffers) over AF_UNIX sockets. The integration consists mostly of glue code that calls the appropriate FRR northbound callbacks in response to events triggered by the sysrepod daemon (e.g. request to change the configuration or to fetch operational data). To build the sysrepo plugin, provide the --enable-sysrepo option to the configure script while building FRR (the libsysrepo library needs to be installed in the system). When installed, the sysrepo plugin will be available for all FRR daemons and can be loaded using the -M (or --module) command line option. Example: bgpd -M sysrepo. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
406 lines
9.0 KiB
Plaintext
406 lines
9.0 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) -lyang
|
|
|
|
lib_libfrr_la_SOURCES = \
|
|
lib/agg_table.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/distribute.c \
|
|
lib/event_counter.c \
|
|
lib/ferr.c \
|
|
lib/filter.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/if.c \
|
|
lib/if_rmap.c \
|
|
lib/imsg-buffer.c \
|
|
lib/imsg.c \
|
|
lib/jhash.c \
|
|
lib/json.c \
|
|
lib/keychain.c \
|
|
lib/lib_errors.c \
|
|
lib/libfrr.c \
|
|
lib/linklist.c \
|
|
lib/log.c \
|
|
lib/md5.c \
|
|
lib/memory.c \
|
|
lib/memory_vty.c \
|
|
lib/module.c \
|
|
lib/mpls.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/openbsd-tree.c \
|
|
lib/pid_output.c \
|
|
lib/plist.c \
|
|
lib/pqueue.c \
|
|
lib/prefix.c \
|
|
lib/privs.c \
|
|
lib/ptm_lib.c \
|
|
lib/qobj.c \
|
|
lib/ringbuf.c \
|
|
lib/routemap.c \
|
|
lib/sbuf.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/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/logicalrouter.c \
|
|
lib/lua.c \
|
|
# end
|
|
|
|
vtysh_scan += \
|
|
$(top_srcdir)/lib/distribute.c \
|
|
$(top_srcdir)/lib/filter.c \
|
|
$(top_srcdir)/lib/if.c \
|
|
$(top_srcdir)/lib/if_rmap.c \
|
|
$(top_srcdir)/lib/keychain.c \
|
|
$(top_srcdir)/lib/logicalrouter.c \
|
|
$(top_srcdir)/lib/nexthop_group.c \
|
|
$(top_srcdir)/lib/plist.c \
|
|
$(top_srcdir)/lib/routemap.c \
|
|
$(top_srcdir)/lib/vrf.c \
|
|
$(top_srcdir)/lib/vty.c \
|
|
# end
|
|
# can be loaded as DSO - always include for vtysh
|
|
vtysh_scan += $(top_srcdir)/lib/agentx.c
|
|
|
|
if SQLITE3
|
|
lib_libfrr_la_LIBADD += -lsqlite3
|
|
lib_libfrr_la_SOURCES += lib/db.c
|
|
endif
|
|
|
|
lib/plist_clippy.c: $(CLIPPY_DEPS)
|
|
lib/plist.lo: lib/plist_clippy.c
|
|
lib/nexthop_group_clippy.c: $(CLIPPY_DEPS)
|
|
lib/nexthop_group.lo: lib/nexthop_group_clippy.c
|
|
lib/northbound_cli_clippy.c: $(CLIPPY_DEPS)
|
|
lib/northbound_cli.lo: lib/northbound_cli_clippy.c
|
|
|
|
pkginclude_HEADERS += \
|
|
lib/agg_table.h \
|
|
lib/bfd.h \
|
|
lib/bitfield.h \
|
|
lib/buffer.h \
|
|
lib/checksum.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/distribute.h \
|
|
lib/event_counter.h \
|
|
lib/ferr.h \
|
|
lib/fifo.h \
|
|
lib/filter.h \
|
|
lib/freebsd-queue.h \
|
|
lib/frr_pthread.h \
|
|
lib/frratomic.h \
|
|
lib/frrstr.h \
|
|
lib/getopt.h \
|
|
lib/graph.h \
|
|
lib/hash.h \
|
|
lib/hook.h \
|
|
lib/if.h \
|
|
lib/if_rmap.h \
|
|
lib/imsg.h \
|
|
lib/ipaddr.h \
|
|
lib/jhash.h \
|
|
lib/json.h \
|
|
lib/keychain.h \
|
|
lib/lib_errors.h \
|
|
lib/libfrr.h \
|
|
lib/libospf.h \
|
|
lib/linklist.h \
|
|
lib/log.h \
|
|
lib/md5.h \
|
|
lib/memory.h \
|
|
lib/memory_vty.h \
|
|
lib/module.h \
|
|
lib/monotime.h \
|
|
lib/mpls.h \
|
|
lib/network.h \
|
|
lib/nexthop.h \
|
|
lib/nexthop_group.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/pqueue.h \
|
|
lib/prefix.h \
|
|
lib/privs.h \
|
|
lib/ptm_lib.h \
|
|
lib/pw.h \
|
|
lib/qobj.h \
|
|
lib/queue.h \
|
|
lib/ringbuf.h \
|
|
lib/routemap.h \
|
|
lib/sbuf.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/stream.h \
|
|
lib/systemd.h \
|
|
lib/table.h \
|
|
lib/termtable.h \
|
|
lib/thread.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/logicalrouter.h \
|
|
lib/lua.h \
|
|
lib/pbr.h \
|
|
# end
|
|
|
|
|
|
nodist_pkginclude_HEADERS += \
|
|
lib/route_types.h \
|
|
lib/version.h \
|
|
# end
|
|
|
|
noinst_HEADERS += \
|
|
lib/clippy.h \
|
|
lib/log_int.h \
|
|
lib/plist_int.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
|
|
|
|
#
|
|
# 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 -lconfd
|
|
lib_confd_la_SOURCES = lib/northbound_confd.c
|
|
|
|
#
|
|
# Sysrepo support
|
|
#
|
|
if SYSREPO
|
|
module_LTLIBRARIES += lib/sysrepo.la
|
|
endif
|
|
|
|
lib_sysrepo_la_CFLAGS = $(WERROR)
|
|
lib_sysrepo_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
|
|
lib_sysrepo_la_LIBADD = lib/libfrr.la -lsysrepo
|
|
lib_sysrepo_la_SOURCES = lib/northbound_sysrepo.c
|
|
|
|
#
|
|
# CLI utilities
|
|
#
|
|
noinst_PROGRAMS += \
|
|
lib/grammar_sandbox \
|
|
# end
|
|
|
|
if BUILD_CLIPPY
|
|
noinst_PROGRAMS += lib/clippy
|
|
else
|
|
$(HOSTTOOLS)lib/clippy:
|
|
@$(MAKE) -C $(top_builddir)/$(HOSTTOOLS) lib/route_types.h lib/clippy
|
|
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)
|
|
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/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 = $(HOSTTOOLS)lib/clippy $(top_srcdir)/python/clidef.py
|
|
|
|
SUFFIXES = _clippy.c .proto .pb-c.c .pb-c.h .pb.h
|
|
.c_clippy.c:
|
|
@{ test -x $(top_builddir)/$(HOSTTOOLS)lib/clippy || \
|
|
$(MAKE) -C $(top_builddir)/$(HOSTTOOLS) lib/clippy; }
|
|
$(AM_V_CLIPPY) $(top_builddir)/$(HOSTTOOLS)lib/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/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)
|