Go to file
Donald Sharp 4bb420ab81 ospfd: Do not allow thread drop
When the ospf->oi_write_q is not empty that means that ospf could
already have a thread scheduled for running.  Just dropping
the pointer before resheduling does not stop the one currently
scheduled for running from running.  The calling of thread_add_write
checks to see if we are already running and does the right thing here
so it is sufficient to just call thread_add_write.

This issue was tracked down from this stack trace:

Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [EC 134217739] interface eth2.1032:172.16.4.110: ospf_check_md5 bad sequence 5333618 (expect 5333649)
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: message repeated 3 times: [ [EC 134217739] interface eth2.1032:172.16.4.110: ospf_check_md5 bad sequence 5333618 (expect 5333649)]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: Assertion `node’ failed in file ospfd/ospf_packet.c, line 666, function ospf_write
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: Backtrace for 8 stack frames:
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 0] /usr/lib/libfrr.so.0(zlog_backtrace+0x3a) [0x7fef3efe9f8a]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 1] /usr/lib/libfrr.so.0(_zlog_assert_failed+0x61) [0x7fef3efea501]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 2] /usr/lib/frr/ospfd(+0x2f15e) [0x562e0c91815e]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 3] /usr/lib/libfrr.so.0(thread_call+0x60) [0x7fef3f00d430]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 4] /usr/lib/libfrr.so.0(frr_run+0xd8) [0x7fef3efe7938]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 5] /usr/lib/frr/ospfd(main+0x153) [0x562e0c901753]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 6] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7fef3d83db45]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: [bt 7] /usr/lib/frr/ospfd(+0x190be) [0x562e0c9020be]
Oct 19 18:04:00 VYOS-R1 ospfd[1811]: Current thread function ospf_write, scheduled from file ospfd/ospf_packet.c, line 881
Oct 19 18:04:00 VYOS-R1 zebra[1771]: [EC 4043309116] Client ‘ospf’ encountered an error and is shutting down.
Oct 19 18:04:00 VYOS-R1 zebra[1771]: client 41 disconnected. 0 ospf routes removed from the rib

We had an assert(node) in ospf_write, which means that the list was empty.  So I just
searched until I saw a code path that allowed multiple writes to the ospf_write function.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-10-20 09:04:25 -04:00
.github Merge pull request #2909 from netravnen/feature/git-pl-template 2018-09-04 11:56:43 -04:00
alpine alpine: add unit tests to build 2018-06-14 10:27:24 -07:00
babeld *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00:00
bfdd bfdd: fix multi hop hash lookup 2018-10-14 15:39:55 +02:00
bgpd Merge pull request #3186 from donaldsharp/aggregate_ecomm 2018-10-19 12:34:08 +02:00
debianpkg build: rewrite readline/curses check 2018-10-19 13:14:10 +02:00
doc doc: inform user that expanded communities can not be used in set mode 2018-10-15 15:01:52 +02:00
docker unit tests: support code coverage instrumentation and reports 2018-07-04 11:06:11 -07:00
eigrpd Merge pull request #3120 from opensourcerouting/remove-list-delete 2018-10-02 10:03:46 -04:00
fpm *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
gdb bgpd: Convert binfo to path 2018-10-09 14:26:30 -04:00
include include: add netlink.h to our build system 2018-06-21 08:07:30 -04:00
isisd isisd: adjust lsp size to area->lsp_size before packing 2018-10-16 19:35:54 +02:00
ldpd bgpd, doc, ldpd, lib, tests, zebra: LM fixes 2018-09-18 17:39:16 +02:00
lib Merge pull request #3163 from donaldsharp/more_vty_errors 2018-10-19 12:11:21 +02:00
m4 build: add --enable-static-bin option 2018-10-01 14:56:18 +02:00
nhrpd *: style for EC replacements 2018-09-13 19:38:57 +00:00
ospf6d ospf6d: fix ospf6 crash in inp lsa processing 2018-10-12 09:56:09 -07:00
ospfclient build: add --enable-static-bin option 2018-10-01 14:56:18 +02:00
ospfd ospfd: Do not allow thread drop 2018-10-20 09:04:25 -04:00
pbrd bgpd lib ospf6d pbrd tests zebra: shadowing fixes 2018-09-13 17:37:08 +02:00
pimd *: list_delete_and_null() -> list_delete() 2018-10-02 11:40:52 +02:00
pkgsrc *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
ports *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
python *: fix some solaris warnings 2018-09-08 21:30:42 +02:00
qpb *: fix config.h/zebra.h include order 2018-09-08 21:30:42 +02:00
redhat frr-reload.py: Add python2 & python3 compatibility. 2018-09-26 21:45:33 +02:00
ripd *: list_delete_and_null() -> list_delete() 2018-10-02 11:40:52 +02:00
ripngd *: list_delete_and_null() -> list_delete() 2018-10-02 11:40:52 +02:00
sharpd build: fix not building docs w/o sphinx 2018-09-09 20:01:08 +02:00
snapcraft *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
solaris *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
staticd staticd: add ability to create onlink static route 2018-10-16 20:50:46 +00:00
tests lib: add libunwind support for backtraces 2018-10-18 02:51:51 +02:00
tools tools: reindent frr 2018-10-15 15:45:36 +00:00
vtysh Merge pull request #3203 from opensourcerouting/buildfoo-20181015 2018-10-19 09:11:31 -04:00
watchfrr watchfrr, lib: cleanup & delay detaching 2018-10-02 12:27:47 +02:00
zebra zebra: Add some missing breadcrumbs 2018-10-18 09:13:18 -04:00
.clang-format lib: import new JSON iteration macro 2018-08-08 18:01:20 -03:00
.dir-locals.el .dir-locals.el: show trailing whitespace 2017-11-07 12:05:09 -05:00
.dockerignore alpine packaging: build packages and base image directly from git 2018-04-04 10:05:44 -07:00
.gitignore *: cleanup .gitignore files 2018-09-08 21:30:42 +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
configure.ac build: rewrite readline/curses check 2018-10-19 13:14:10 +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
defaults.h *: reindent 2017-07-17 14:04:07 +02:00
Makefile.am build: try to use -D option for ar and ranlib 2018-10-19 13:13:42 +02:00
README.md frr: improve README 2018-09-10 15:30:22 +00:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00

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
  • EIGRP (alpha)
  • NHRP (alpha)

Installation & Use

Packages are available for various distributions on our releases page.

Snaps are also available here.

Instructions on building and installing from source for supported platforms may be found here.

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. Please email the mailing list to request an invite as we do not issue automatic invites.

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