Go to file
David Lamparter 0bdeb5e58d lib: rewrite zlog lock-free & TLS-buffered
This is a full rewrite of the "back end" logging code.  It now uses a
lock-free list to iterate over logging targets, and the targets
themselves are as lock-free as possible.  (syslog() may have a hidden
internal mutex in the C library;  the file/fd targets use a single
write() call which should ensure atomicity kernel-side.)

Note that some functionality is lost in this patch:
- Solaris printstack() backtraces are ditched (unlikely to come back)
- the `log-filter` machinery is gone (re-added in followup commit)
- `terminal monitor` is temporarily stubbed out.  The old code had a
  race condition with VTYs going away.  It'll likely come back rewritten
  and with vtysh support.
- The `zebra_ext_log` hook is gone.  Instead, it's now much easier to
  add a "proper" logging target.

v2: TLS buffer to get some actual performance

Signed-off-by: David Lamparter <equinox@diac24.net>
2020-04-01 06:53:26 +02:00
.github .github: move pr template to subdir 2019-03-29 16:51:58 +00:00
alpine *: use the current project name (FRRouting) 2020-03-25 17:38:56 -04:00
babeld Merge pull request #5937 from ton31337/fix/sizeof 2020-03-08 20:01:10 -04:00
bfdd lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
bgpd lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
debian doc: rename man pages to frr-* 2020-01-15 14:05:11 +01:00
doc *: use the current project name (FRRouting) 2020-03-25 17:38:56 -04:00
docker Merge pull request #5606 from ton31337/fix/docker_centos8_image_name 2020-01-06 11:24:15 -06:00
eigrpd eigrpd: stop checking for ancient OpenBSD 2020-03-11 13:31:13 +01:00
fpm *: Replace sizeof something to sizeof(something) 2020-03-08 21:44:53 +02:00
gdb bgpd: Convert binfo to path 2018-10-09 14:26:30 -04:00
grpc build: fix "make tags" 2019-09-17 16:35:12 +02:00
include include: add kernel header for seg6/seg6local 2020-01-09 09:53:04 +09:00
isisd *: use the current project name (FRRouting) 2020-03-25 17:38:56 -04:00
ldpd lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
lib lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
m4 build: Add Python 3.8 2020-03-11 14:56:10 +01:00
mlag zebra: Do not build mlag protobuf support if version 3 is not avail 2019-12-15 09:37:51 -05:00
nhrpd Merge pull request #5825 from pguibert6WIND/nhrp_vty 2020-03-22 14:21:42 +02:00
ospf6d ospf6d: Fix spelling mistakes found by debian packaging 2020-03-13 19:13:57 -04:00
ospfclient *: Replace s_addr 0 => INADDR_ANY 2020-02-06 09:00:12 +02:00
ospfd *: remove line breaks from log messages 2020-03-24 19:43:18 +01:00
pbrd pbrd: convert gotos in set vrf command to returns 2020-03-19 14:30:42 -04:00
pimd lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
pkgsrc *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
python bgpd/bmp: BMP implementation 2019-08-30 19:22:23 +02:00
qpb build: fix "make tags" 2019-09-17 16:35:12 +02:00
redhat redhat: Update frr.spec.in to move all systems to Python3 except CentOS 6 2020-01-25 00:44:34 +01:00
ripd lib, *: add a common time interval formatting api 2020-03-09 11:12:32 -04:00
ripngd bgpd, lib, ripngd: Add agg_node_get_prefix 2020-03-24 07:51:41 -04:00
sharpd lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
snapcraft snapcraft: Add vrrpd to the snapcraft package 2019-11-19 10:46:33 +01:00
solaris doc: rename man pages to frr-* 2020-01-15 14:05:11 +01:00
staticd *: use the current project name (FRRouting) 2020-03-25 17:38:56 -04:00
tests lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
tools tools/gcc-plugins: add small test for frr-format 2020-03-29 10:45:46 +02:00
vrrpd Merge pull request #5919 from qlyoung/fix-vrrp-mvl-uaf 2020-03-09 08:03:34 +02:00
vtysh lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
watchfrr lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02:00
yang *: use the current project name (FRRouting) 2020-03-25 17:38:56 -04:00
zebra Merge pull request #6093 from LabNConsulting/working/lb/no-birds 2020-03-31 15:10:17 +02:00
.clang-format *: frr_elevate_privs -> frr_with_privs 2019-09-03 17:18:35 +02:00
.dir-locals.el tools: fix emacs configuration file 2019-11-04 11:45:52 -03:00
.dockerignore docker: Make docker image on CentOS 7 2019-11-26 19:29:30 +00:00
.gitignore git: Skip .kitchen files 2020-03-15 22:27:33 +02:00
bootstrap.sh autoreconf -i 2007-02-06 19:28:28 +00:00
buildtest.sh config: switch a few references to say FRR 2017-07-12 11:25:33 -05:00
changelog-auto.in debian: cleanly split off from dist tarball 2019-02-19 21:31:18 +01:00
config.version.in build: carry --with-pkg-extra-version into tarballs 2018-10-24 15:11:50 +02:00
configure.ac lib: rewrite zlog lock-free & TLS-buffered 2020-04-01 06:53:26 +02: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 lib: new defaults logic 2019-12-06 15:13:32 +01:00
README.md README.md: Add FRR Icon 2019-10-29 12:42:06 -04:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00: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 as well as Solaris 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