Go to file
Donald Sharp 5772419c1c zebra: Get zebra graceful restart working when restarting on *BSD
Upon restart zebra reads in the kernel state.  Under linux
there is a mechanism to read the route and convert the protocol
to the correct internal FRR protocol to allow the zebra graceful
restart efforts to work properly.

Under *BSD I do not see a mechanism to convey the original FRR
protocol into the kernel and thus back out of it.  Thus when
zebra crashes ( or restarts ) the routes read back in are kernel
routes and are effectively lost to the system and FRR cannot
remove them properly.  Why?  Because FRR see's kernel routes
as routes that it should not own and in general the admin
distance for those routes will be a better one than the
admin distance from a routing protocol.  This is even
worse because when the graceful restart timer pops and rib_sweep
is run, FRR becomes out of sync with the state of the kernel forwarding
on *BSD.

On restart, notice that the route is a self route that there
is no way to know it's originating protocol.  In this case
let's set the protocol to ZEBRA_ROUTE_STATIC and set the admin
distance to 255.

This way when an upper level protocol reinstalls it's route
the general zebra graceful restart code still works.  The
high admin distance allows the code to just work in a way
that is graceful( HA! )

The drawback here is that the route shows up as a static
route for the time the system is doing it's work.  FRR
could introduce *another* route type but this seems like
a bad idea and the STATIC route type is loosely analagous
to the type of route it has become.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-03-01 13:32:56 +02:00
.github .github: improve bug report template 2020-10-20 16:12:03 -04:00
alpine alpine: fix path for daemons file install 2021-08-30 15:21:59 -04:00
babeld babeld: fix #10502 #10503 by repairing the checks on length 2022-02-08 15:11:45 +00:00
bfdd bfdd: Fix overflow possibility with time statements 2022-02-23 17:34:57 +00:00
bgpd *: Add necessary new line for output of vty_out() 2022-02-27 12:44:34 +00:00
debian debian: adjust the changelog for the dev branch 2021-11-08 11:54:42 -06:00
doc doc: Update documentation to indicate *BSD struggles 2022-03-01 12:40:43 +02:00
docker docker: update alpine build enable set own version 2022-01-04 13:14:51 -05:00
eigrpd eigrpd: Up convert to uint64_t before doing math 2022-02-23 17:34:57 +00:00
fpm build: fix AM_LDFLAGS usage (and gcov) 2021-07-21 17:10:08 +02:00
gdb *: Cleanup some documentation from quagga->frr 2021-11-11 14:41:27 -05:00
grpc build: fix AM_LDFLAGS usage (and gcov) 2021-07-21 17:10:08 +02:00
include include, zebra: Add recent nexthop.h 2021-10-25 14:11:37 -04:00
isisd isisd: fix router capability TLV parsing issues 2022-02-09 10:49:32 +00:00
ldpd *: rework renaming the default VRF 2021-12-21 22:09:29 +03:00
lib *: Add necessary new line for output of vty_out() 2022-02-27 12:44:34 +00:00
m4 grpc: improve checks for GRPC C++ requirements 2021-05-22 00:01:06 +00:00
mlag build: fix AM_LDFLAGS usage (and gcov) 2021-07-21 17:10:08 +02:00
nhrpd *: do not print vrf name for interface config when using vrf-lite 2022-01-24 14:44:05 +03:00
ospf6d ospf6d: Fix memory leak for show ipv6 ospf6 zebra json 2022-01-31 16:53:23 +02:00
ospfclient build: fix AM_LDFLAGS usage (and gcov) 2021-07-21 17:10:08 +02:00
ospfd *: Add necessary new line for output of vty_out() 2022-02-27 12:44:34 +00:00
pathd pathd: fix typo in pathd/path_ted.c 2021-12-19 11:25:15 +00:00
pbrd *: Add necessary new line for output of vty_out() 2022-02-27 12:44:34 +00:00
pceplib pceplib: Fix uninited data in test vehicle 2022-02-23 17:34:58 +00:00
pimd pimd: Do not allow 224.0.0.0/24 range in igmp join 2022-02-22 17:46:47 +00:00
pkgsrc *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
python python: pass conditionals through clippy for DEFPY 2022-01-13 16:01:53 +01:00
qpb build: fix AM_LDFLAGS usage (and gcov) 2021-07-21 17:10:08 +02:00
redhat redhat: logrotate file has typo for staticd 2022-01-24 15:05:48 -05:00
ripd ripd: Fix packet send for non primary addresses 2022-02-17 19:59:59 +00:00
ripngd *: rework renaming the default VRF 2021-12-21 22:09:29 +03:00
sharpd *: Add necessary new line for output of vty_out() 2022-02-27 12:44:34 +00:00
snapcraft snapcraft: add missing dependency 2021-08-23 15:08:05 +03:00
staticd staticd: Fix make check failures 2022-02-28 15:40:54 +00:00
tests bgpd: Allow setting attributes over route-maps for conditional advertisements 2022-02-23 21:38:37 +02:00
tools tools: fix frr-reload context keywords 2022-02-10 21:55:49 +00:00
vrrpd *: use ipaddr_cmp instead of memcmp 2022-02-09 10:50:58 +00:00
vtysh zebra: fix segment-routing command not found error with --disable-pathd 2022-01-16 21:46:22 +09:00
watchfrr *: Convert quagga_signal_X to frr_signal_X 2021-11-11 14:41:27 -05:00
yang Merge pull request #9938 from Orange-OpenSource/isis_ls 2022-01-18 10:12:08 -05:00
zebra zebra: Get zebra graceful restart working when restarting on *BSD 2022-03-01 13:32:56 +02:00
.clang-format *: Add FOREACH_AFI_SAFI_NSF(afi, safi) macro to reduce nesting 2022-01-13 14:29:54 +02:00
.dir-locals.el tests: remove python format block from dir-locals 2021-09-13 10:04:29 -04:00
.dockerignore docker: Make docker image on CentOS 7 2019-11-26 19:29:30 +00:00
.git-blame-ignore-revs tools: Ignore mass renaming of topotests for git blame 2021-05-11 14:14:26 +03:00
.gitignore *: Add some missed make check generated files in .gitignore 2021-09-16 08:13:17 -04:00
.pylintrc tests: micronet: update infra 2021-09-04 09:04:46 -04:00
.travis.yml lib: libyang2 add missed conversion 2021-05-17 22:13:59 -04:00
bootstrap.sh build: turn on automake warnings (& symlinks) 2021-04-21 15:42:37 +02:00
buildtest.sh build: remove --enable-exampledir 2021-06-24 16:42:58 +02:00
config.version.in build: carry --with-pkg-extra-version into tarballs 2018-10-24 15:11:50 +02:00
configure.ac build: add "--with-service-timeout" in configure.ac 2022-01-06 07:42:36 -05:00
COPYING *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
COPYING-LGPLv2.1 build: remove LGPL v2.0, add LGPL v2.1 2016-11-15 17:19:38 +09:00
Makefile.am build: fix AM_LDFLAGS usage (and gcov) 2021-07-21 17:10:08 +02:00
README.md doc: Update Documentation to note Solaris Unsupported status 2020-09-21 10:02:20 -04:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00
version.h build: make builddir include path consistent 2021-04-21 15:42:33 +02:00

Icon

FRRouting

FRR is free software that implements and manages various IPv4 and IPv6 routing protocols. It runs on nearly all distributions of Linux and BSD and supports all modern CPU architectures.

FRR currently supports the following protocols:

  • BGP
  • OSPFv2
  • OSPFv3
  • RIPv1
  • RIPv2
  • RIPng
  • IS-IS
  • PIM-SM/MSDP
  • LDP
  • BFD
  • Babel
  • PBR
  • OpenFabric
  • VRRP
  • EIGRP (alpha)
  • NHRP (alpha)

Installation & Use

For source tarballs, see the releases page.

For Debian and its derivatives, use the APT repository at https://deb.frrouting.org/.

Instructions on building and installing from source for supported platforms may be found in the developer docs.

Once installed, please refer to the user guide for instructions on use.

Community

The FRRouting email list server is located here and offers the following public lists:

Topic List
Development dev@lists.frrouting.org
Users & Operators frog@lists.frrouting.org
Announcements announce@lists.frrouting.org

For chat, we currently use Slack. You can join by clicking the "Slack" link under the Participate section of our website.

Contributing

FRR maintains developer's documentation which contains the project workflow and expectations for contributors. Some technical documentation on project internals is also available.

We welcome and appreciate all contributions, no matter how small!

Security

To report security issues, please use our security mailing list:

security [at] lists.frrouting.org