diff --git a/Makefile.am b/Makefile.am index 8c96f39f39..3e268f703d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -56,6 +56,7 @@ include sharpd/subdir.am include pimd/subdir.am include pbrd/subdir.am include staticd/subdir.am +include bfdd/subdir.am SUBDIRS = . @LIBRFP@ @RFPTEST@ \ @BGPD@ \ diff --git a/configure.ac b/configure.ac index f65b1640d2..9e7ca2f7e1 100755 --- a/configure.ac +++ b/configure.ac @@ -452,6 +452,8 @@ AC_ARG_ENABLE([numeric_version], AS_HELP_STRING([--enable-numeric-version], [Only numeric digits allowed in version (for Alpine)])) AC_ARG_ENABLE([gcov], AS_HELP_STRING([--enable-gcov], [Add code coverage information])) +AC_ARG_ENABLE(bfdd, + AS_HELP_STRING([--disable-bfdd], [do not build bfdd])) AS_IF([test "${enable_clippy_only}" != "yes"], [ AC_CHECK_HEADERS(json-c/json.h) @@ -1368,6 +1370,30 @@ AS_IF([test "${enable_ldpd}" != "no"], [ AC_DEFINE(HAVE_LDPD, 1, ldpd) ]) +if test "$enable_bfdd" = "no"; then + AC_DEFINE(HAVE_BFDD, 0, bfdd) + BFDD="" +else + AC_DEFINE(HAVE_BFDD, 1, bfdd) + BFDD="bfdd" + + case $host_os in + linux*) + AC_DEFINE(BFD_LINUX, 1, bfdd) + ;; + + *) + AC_DEFINE(BFD_BSD, 1, bfdd) + ;; + esac +fi + +AM_CONDITIONAL(BFDD, [test "x$BFDD" = "xbfdd"]) + +if test $ac_cv_lib_json_c_json_object_get = no -a "x$BFDD" = "xbfdd"; then + AC_MSG_ERROR(["you must use json-c library to use bfdd"]) +fi + NHRPD="" case "$host_os" in linux*) @@ -1880,6 +1906,7 @@ AC_SUBST(frr_statedir) AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket) AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket) +AC_DEFINE_UNQUOTED(BFDD_CONTROL_SOCKET, "$frr_statedir/bfdd.sock", bfdd control socket) AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory) dnl autoconf does this, but it does it too late... diff --git a/debianpkg/backports/ubuntu12.04/debian/rules b/debianpkg/backports/ubuntu12.04/debian/rules index 01ad81d371..3a6c80297e 100755 --- a/debianpkg/backports/ubuntu12.04/debian/rules +++ b/debianpkg/backports/ubuntu12.04/debian/rules @@ -134,6 +134,7 @@ override_dh_auto_configure: --enable-poll=yes \ $(USE_CUMULUS) \ $(USE_PIM) \ + --disable-bfdd \ --enable-dependency-tracking \ $(USE_BGP_VNC) \ $(shell dpkg-buildflags --export=configure); \ diff --git a/debianpkg/backports/ubuntu14.04/debian/rules b/debianpkg/backports/ubuntu14.04/debian/rules index f7b9428658..f7468d6f79 100755 --- a/debianpkg/backports/ubuntu14.04/debian/rules +++ b/debianpkg/backports/ubuntu14.04/debian/rules @@ -16,6 +16,7 @@ WANT_CUMULUS_MODE ?= 0 WANT_MULTIPATH ?= 1 WANT_SNMP ?= 0 WANT_RPKI ?= 0 +WANT_BFD ?= 1 # NOTES: # @@ -108,6 +109,12 @@ else USE_RPKI=--disable-rpki endif +ifeq ($(WANT_BFD), 1) + USE_BFD=--enable-bfdd +else + USE_BFD=--disable-bfdd +endif + ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) DEBIAN_JOBS := $(subst parallel=,,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) endif @@ -159,6 +166,7 @@ override_dh_auto_configure: --enable-dependency-tracking \ $(USE_BGP_VNC) \ $(USE_RPKI) \ + $(USE_BFD) \ $(shell dpkg-buildflags --export=configure); \ fi diff --git a/debianpkg/rules b/debianpkg/rules index 9c84c06516..c1cb865490 100755 --- a/debianpkg/rules +++ b/debianpkg/rules @@ -16,6 +16,7 @@ WANT_CUMULUS_MODE ?= 0 WANT_MULTIPATH ?= 1 WANT_SNMP ?= 0 WANT_RPKI ?= 0 +WANT_BFD ?= 1 # NOTES: # @@ -108,6 +109,12 @@ else USE_RPKI=--disable-rpki endif +ifeq ($(WANT_BFD), 1) + USE_BFD=--enable-bfdd +else + USE_BFD=--disable-bfdd +endif + ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) DEBIAN_JOBS := $(subst parallel=,,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) endif @@ -160,6 +167,7 @@ override_dh_auto_configure: --enable-dependency-tracking \ $(USE_BGP_VNC) \ $(USE_RPKI) \ + $(USE_BFD) \ $(shell dpkg-buildflags --export=configure); \ fi diff --git a/redhat/daemons b/redhat/daemons index f9dbffea4d..de708cf4fd 100644 --- a/redhat/daemons +++ b/redhat/daemons @@ -52,6 +52,8 @@ babeld=no sharpd=no pbrd=no staticd=no +bfdd=no + # # Command line options for the daemons # @@ -70,6 +72,7 @@ babeld_options=("-A 127.0.0.1") sharpd_options=("-A 127.0.0.1") pbrd_options=("-A 127.0.0.1") staticd_options=("-A 127.0.0.1") +bfdd_options=("-A 127.0.0.1") # # If the vtysh_enable is yes, then the unified config is read diff --git a/redhat/frr.init b/redhat/frr.init index 740aa5b64d..2e33aee173 100755 --- a/redhat/frr.init +++ b/redhat/frr.init @@ -7,7 +7,7 @@ # # chkconfig: 2345 15 85 # -# description: FRRouting (FRR) is a routing suite for IP routing protocols +# description: FRRouting (FRR) is a routing suite for IP routing protocols # like BGP, OSPF, RIP and others. This script contols the main # daemon "frr" as well as the individual protocol daemons. # @@ -20,7 +20,7 @@ # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/Stop the FRR Routing daemons -# Description: FRRouting (FRR) is a routing suite for IP routing protocols +# Description: FRRouting (FRR) is a routing suite for IP routing protocols # like BGP, OSPF, RIP and others. This script contols the main # daemon "frr" as well as the individual protocol daemons. ### END INIT INFO @@ -33,7 +33,7 @@ V_PATH=/var/run/frr # Local Daemon selection may be done by using /etc/frr/daemons. # See /usr/share/doc/frr/README.Debian.gz for further information. # Keep zebra first and do not list watchfrr! -DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd pimd pbrd ldpd nhrpd eigrpd babeld staticd sharpd" +DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd pimd pbrd ldpd nhrpd eigrpd babeld staticd sharpd bfdd" MAX_INSTANCES=5 RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py diff --git a/redhat/frr.logrotate b/redhat/frr.logrotate index 25a5587787..654d355fd7 100644 --- a/redhat/frr.logrotate +++ b/redhat/frr.logrotate @@ -86,3 +86,10 @@ endscript } +/var/log/frr/bfdd.log { + notifempty + missingok + postrotate + /bin/kill -USR1 `cat /var/run/frr/bfdd.pid 2> /dev/null` 2> /dev/null || true + endscript +} diff --git a/redhat/frr.spec.in b/redhat/frr.spec.in index f5b116978e..25b48506a6 100644 --- a/redhat/frr.spec.in +++ b/redhat/frr.spec.in @@ -11,6 +11,7 @@ #################### FRRouting (FRR) configure options ##################### # with-feature options %{!?with_babeld: %global with_babeld 1 } +%{!?with_bfdd: %global with_bfdd 1 } %{!?with_bgp_vnc: %global with_bgp_vnc 0 } %{!?with_cumulus: %global with_cumulus 0 } %{!?with_eigrpd: %global with_eigrpd 1 } @@ -85,7 +86,7 @@ %{!?frr_gid: %global frr_gid 92 } %{!?vty_gid: %global vty_gid 85 } -%define daemon_list zebra ripd ospfd bgpd isisd ripngd ospf6d pbrd staticd +%define daemon_list zebra ripd ospfd bgpd isisd ripngd ospf6d pbrd staticd bfdd %if %{with_ldpd} %define daemon_ldpd ldpd @@ -129,7 +130,13 @@ %define daemon_watchfrr "" %endif -%define all_daemons %{daemon_list} %{daemon_ldpd} %{daemon_pimd} %{daemon_nhrpd} %{daemon_eigrpd} %{daemon_babeld} %{daemon_watchfrr} %{daemon_pbrd} +%if %{with_bfdd} + %define daemon_bfdd bfdd +%else + %define daemon_bfdd "" +%endif + +%define all_daemons %{daemon_list} %{daemon_ldpd} %{daemon_pimd} %{daemon_nhrpd} %{daemon_eigrpd} %{daemon_babeld} %{daemon_watchfrr} %{daemon_pbrd} %{daemon_bfdd} #release sub-revision (the two digits after the CONFDATE) %{!?release_rev: %global release_rev 01 } @@ -193,7 +200,7 @@ protocol. It takes multi-server and multi-thread approach to resolve the current complexity of the Internet. FRRouting supports BGP4, OSPFv2, OSPFv3, ISIS, RIP, RIPng, PIM, LDP -NHRP, Babel, PBR and EIGRP. +NHRP, Babel, PBR, EIGRP and BFD. FRRouting is a fork of Quagga. @@ -331,9 +338,14 @@ developing OSPF-API and frr applications. --enable-systemd \ %endif %if %{with_rpki} - --enable-rpki + --enable-rpki \ %else - --disable-rpki + --disable-rpki \ +%endif +%if %{with_bfdd} + --enable-bfdd +%else + --disable-bfdd %endif make %{?_smp_mflags} MAKEINFO="makeinfo --no-split" SPHINXBUILD=%{sphinx} @@ -444,6 +456,9 @@ zebra_spec_add_service isisd 2608/tcp "ISISd vty" %if %{with_eigrpd} zebra_spec_add_service eigrpd 2613/tcp "EIGRPd vty" %endif +%if %{with_bfdd} + zebra_spec_add_service bfdd 2617/tcp "BFDd vty" +%endif %if "%{initsystem}" == "systemd" for daemon in %all_daemons ; do @@ -591,6 +606,9 @@ fi %if %{with_babeld} %{_sbindir}/babeld %endif +%if %{with_bfdd} + %{_sbindir}/bfdd +%endif %{_libdir}/lib*.so.0 %{_libdir}/lib*.so.0.* %if %{with_fpm} @@ -644,6 +662,9 @@ fi %changelog +* Sun May 28 2018 Rafael Zalamena - %{version} +- Add BFDd support + * Sun May 20 2018 Martin Winter - Fixed RPKI RPM build diff --git a/tools/etc/frr/daemons b/tools/etc/frr/daemons index 9a96c0490a..474b299d90 100644 --- a/tools/etc/frr/daemons +++ b/tools/etc/frr/daemons @@ -35,3 +35,4 @@ eigrpd=no babeld=no sharpd=no pbrd=no +bfdd=no diff --git a/tools/etc/frr/daemons.conf b/tools/etc/frr/daemons.conf index 04a857f47d..640437f441 100644 --- a/tools/etc/frr/daemons.conf +++ b/tools/etc/frr/daemons.conf @@ -19,6 +19,7 @@ babeld_options=" --daemon -A 127.0.0.1" sharpd_options=" --daemon -A 127.0.0.1" pbrd_options=" --daemon -A 127.0.0.1" staticd_options=" --daemon -A 127.0.0.1" +bfdd_options=" --daemon -A 127.0.0.1" # The list of daemons to watch is automatically generated by the init script. watchfrr_enable=yes diff --git a/tools/frr b/tools/frr index 91c9091448..0b170d33fd 100755 --- a/tools/frr +++ b/tools/frr @@ -21,7 +21,7 @@ V_PATH=/var/run/frr # Local Daemon selection may be done by using /etc/frr/daemons. # See /usr/share/doc/frr/README.Debian.gz for further information. # Keep zebra first and do not list watchfrr! -DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd ldpd nhrpd eigrpd sharpd pbrd staticd" +DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd ldpd nhrpd eigrpd sharpd pbrd staticd bfdd" MAX_INSTANCES=5 RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py