frr/lib/subdir.am
Christian Hopps ef43a6329b mgmtd: Add MGMT Frontend Interface Framework
This commit introduces the Frontend Interface which can be used
by front-end management clients like Netconf server, Restconf
Server and CLI to interact with new FRR Management daemon (MGMTd)
to access and sometimes modify FRR management data.

This commit includes the following functionalities in the changeset:
1. Add new Frontend server for clients connect to.
2. Add a C-based Frontend client library which can be used by Frontend
   clients to communicate with MGMTd via the Frontend interface.
3. Maintain a frontend adapter for each connection from an appropriate
   Frontend client to facilitate client requests and track one or more
   client sessions across it.
4. Define the protobuf message format for messages to be exchanged
   between MGMTd Frontend module and the Frontend client.
5. This changeset also introduces an instance of MGMT Frontend client
   embedded within the lib/vty module that can be leveraged by any FRR
   daemon to connect to MGMTd's Frontend interface. The same has been
   integrated with and initialized within the MGMTd daemon's process
   context to implement a bunch of 'set-config', 'commit-apply',
   'get-config' and 'get-data' commands via VTYSH

Co-authored-by: Pushpasis Sarkar <pushpasis@gmail.com>
Co-authored-by: Abhinay Ramesh <rabhinay@vmware.com>
Co-authored-by: Ujwal P <ujwalp@vmware.com>
Signed-off-by: Yash Ranjan <ranjany@vmware.com>
2023-03-21 22:08:32 -04:00

628 lines
13 KiB
Plaintext

#
# libfrr
#
lib_LTLIBRARIES += lib/libfrr.la
lib_libfrr_la_LDFLAGS = $(LIB_LDFLAGS) -version-info 0:0:0 -Xlinker -e_libfrr_version
lib_libfrr_la_LIBADD = $(LIBCAP) $(UNWIND_LIBS) $(LIBYANG_LIBS) $(LUA_LIB) $(UST_LIBS) $(LIBCRYPT) $(LIBDL) $(LIBM)
lib_libfrr_la_SOURCES = \
lib/admin_group.c \
lib/affinitymap.c \
lib/affinitymap_cli.c \
lib/affinitymap_northbound.c \
lib/agg_table.c \
lib/atomlist.c \
lib/asn.c \
lib/base64.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/cspf.c \
lib/csv.c \
lib/debug.c \
lib/defaults.c \
lib/distribute.c \
lib/explicit_bzero.c \
lib/ferr.c \
lib/filter.c \
lib/filter_cli.c \
lib/filter_nb.c \
lib/frrcu.c \
lib/frrlua.c \
lib/frrscript.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/link_state.c \
lib/log.c \
lib/log_filter.c \
lib/log_vty.c \
lib/md5.c \
lib/memory.c \
lib/mgmt_fe_client.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/strformat.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/xref.c \
lib/yang.c \
lib/yang_translator.c \
lib/yang_wrappers.c \
lib/zclient.c \
lib/zlog.c \
lib/zlog_5424.c \
lib/zlog_5424_cli.c \
lib/zlog_live.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 \
lib/tc.c \
# end
nodist_lib_libfrr_la_SOURCES = \
yang/frr-affinity-map.yang.c \
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 \
# end
# Add logic to build mgmt.proto
lib_libfrr_la_LIBADD += $(PROTOBUF_C_LIBS)
BUILT_SOURCES += \
lib/mgmt.pb-c.c \
lib/mgmt.pb-c.h \
# end
CLEANFILES += \
lib/mgmt.pb-c.h \
lib/mgmt.pb-c.c \
# end
lib_libfrr_la_SOURCES += \
lib/mgmt.pb-c.c \
#end
if SQLITE3
lib_libfrr_la_LIBADD += $(SQLITE3_LIBS)
lib_libfrr_la_SOURCES += lib/db.c
endif
clippy_scan += \
lib/affinitymap_cli.c \
lib/if.c \
lib/filter_cli.c \
lib/log_vty.c \
lib/nexthop_group.c \
lib/northbound_cli.c \
lib/plist.c \
lib/routemap.c \
lib/routemap_cli.c \
lib/thread.c \
lib/vty.c \
lib/zlog_5424_cli.c \
# end
pkginclude_HEADERS += \
lib/admin_group.h \
lib/affinitymap.h \
lib/agg_table.h \
lib/asn.h \
lib/atomlist.h \
lib/base64.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/cspf.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/frrscript.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/link_state.h \
lib/log.h \
lib/log_vty.h \
lib/md5.h \
lib/memory.h \
lib/mgmt.pb-c.h \
lib/mgmt_fe_client.h \
lib/mgmt_pb.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/route_opaque.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/xref.h \
lib/yang.h \
lib/yang_translator.h \
lib/yang_wrappers.h \
lib/zclient.h \
lib/zebra.h \
lib/zlog.h \
lib/zlog_5424.h \
lib/zlog_live.h \
lib/zlog_targets.h \
lib/pbr.h \
lib/tc.h \
lib/routing_nb.h \
\
lib/assert/assert.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 = $(AM_CFLAGS) $(SNMP_CFLAGS) -std=gnu11
lib_libfrrsnmp_la_LDFLAGS = $(LIB_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 = $(AM_CFLAGS) $(CARES_CFLAGS)
lib_libfrrcares_la_LDFLAGS = $(LIB_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 = $(AM_CFLAGS) $(ZEROMQ_CFLAGS)
lib_libfrrzmq_la_LDFLAGS = $(LIB_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 = $(AM_CFLAGS) $(CONFD_CFLAGS)
lib_confd_la_LDFLAGS = $(MODULE_LDFLAGS)
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 = $(AM_CFLAGS) $(SYSREPO_CFLAGS)
lib_sysrepo_la_LDFLAGS = $(MODULE_LDFLAGS)
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 = $(MODULE_LDFLAGS)
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 = $(CPPFLAGS_BASE) -D_GNU_SOURCE -DBUILDING_CLIPPY
lib_clippy_CFLAGS = $(AC_CFLAGS) $(PYTHON_CFLAGS)
lib_clippy_LDADD = $(PYTHON_LIBS) $(UST_LIBS) -lelf
# no $(SAN_FLAGS) here
lib_clippy_LDFLAGS = -export-dynamic $(AC_LDFLAGS) $(AC_LDFLAGS_EXEC)
lib_clippy_SOURCES = \
lib/jhash.c \
lib/clippy.c \
lib/command_graph.c \
lib/command_lex.l \
lib/command_parse.y \
lib/command_py.c \
lib/defun_lex.l \
lib/elf_py.c \
lib/graph.c \
lib/libfrr_trace.c \
lib/memory.c \
lib/typesafe.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 $@ $<
# xrelfo, the ELF xref extractor
AM_V_XRELFO = $(am__v_XRELFO_$(V))
am__v_XRELFO_ = $(am__v_XRELFO_$(AM_DEFAULT_VERBOSITY))
am__v_XRELFO_0 = @echo " XRELFO " $@;
am__v_XRELFO_1 =
XRELFO_FLAGS = -Wlog-format -Wlog-args
SUFFIXES += .xref
%.xref: % $(CLIPPY)
$(AM_V_XRELFO) $(CLIPPY) $(top_srcdir)/python/xrelfo.py $(WERROR) $(XRELFO_FLAGS) -o $@ $<
# dependencies added in python/makefile.py
frr.xref:
$(AM_V_XRELFO) $(CLIPPY) $(top_srcdir)/python/xrelfo.py -o $@ -c vtysh/vtysh_cmd.c $^
all-am: frr.xref
clean-xref:
-rm -rf $(xrefs) frr.xref
clean-local: clean-xref
CLEANFILES += vtysh/vtysh_cmd.c
vtysh/vtysh_cmd.c: frr.xref
@test -f $@ || rm -f frr.xref || true
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) frr.xref
## 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
DISTCLEANFILES += lib/command_lex.h \
lib/command_lex.c \
lib/command_parse.h \
lib/command_parse.c
rt_enabled =
if BABELD
rt_enabled += --enabled babeld
endif
if BFDD
rt_enabled += --enabled bfdd
endif
if BGPD
rt_enabled += --enabled bgpd
if ENABLE_BGP_VNC
rt_enabled += --enabled bgpd-vnc
endif
endif
if EIGRPD
rt_enabled += --enabled eigrpd
endif
if ISISD
rt_enabled += --enabled isisd
endif
if FABRICD
rt_enabled += --enabled fabricd
endif
if LDPD
rt_enabled += --enabled ldpd
endif
if NHRPD
rt_enabled += --enabled nhrpd
endif
if OSPFD
rt_enabled += --enabled ospfd
endif
if OSPF6D
rt_enabled += --enabled ospf6d
endif
if PBRD
rt_enabled += --enabled pbrd
endif
if PIMD
rt_enabled += --enabled pimd
endif
if RIPD
rt_enabled += --enabled ripd
endif
if RIPNGD
rt_enabled += --enabled ripngd
endif
if SHARPD
rt_enabled += --enabled sharpd
endif
if ZEBRA
rt_enabled += --enabled zebra
endif
lib/route_types.h: $(top_srcdir)/lib/route_types.txt $(top_srcdir)/lib/route_types.pl
@$(MKDIR_P) lib
$(PERL) $(top_srcdir)/lib/route_types.pl $(rt_enabled) < $(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
# unnecessary 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
@$(MKDIR_P) lib
$(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)