![]() 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> |
||
---|---|---|
.github | ||
alpine | ||
babeld | ||
bfdd | ||
bgpd | ||
debian | ||
doc | ||
docker | ||
eigrpd | ||
fpm | ||
gdb | ||
grpc | ||
include | ||
isisd | ||
ldpd | ||
lib | ||
m4 | ||
mlag | ||
nhrpd | ||
ospf6d | ||
ospfclient | ||
ospfd | ||
pathd | ||
pbrd | ||
pceplib | ||
pimd | ||
pkgsrc | ||
python | ||
qpb | ||
redhat | ||
ripd | ||
ripngd | ||
sharpd | ||
snapcraft | ||
staticd | ||
tests | ||
tools | ||
vrrpd | ||
vtysh | ||
watchfrr | ||
yang | ||
zebra | ||
.clang-format | ||
.dir-locals.el | ||
.dockerignore | ||
.git-blame-ignore-revs | ||
.gitignore | ||
.pylintrc | ||
.travis.yml | ||
bootstrap.sh | ||
buildtest.sh | ||
config.version.in | ||
configure.ac | ||
COPYING | ||
COPYING-LGPLv2.1 | ||
Makefile.am | ||
README.md | ||
stamp-h.in | ||
version.h |
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