0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-09-16 18:35:19 +00:00
The BIRD project aims to develop a fully functional dynamic IP routing daemon. https://bird.network.cz
Go to file
Toke Høiland-Jørgensen ee91965894 Babel: Keep separate auth PC counters for unicast and multicast
The babel protocol normally sends all its messages as multicast packets,
but the protocol specification allows most messages to be sent as either
unicast or multicast, and the two can be mixed freely. In particular, the
babeld implementation can be configured to unicast updates to all peers
instead of sending them as unicast.

Daniel discovered that this can cause problems with the packet counter
checks in the MAC extension due to packet reordering. This happens on WiFi
networks where clients have power save enabled (which is quite common in
infrastructure networks): in this case, the access point will buffer all
multicast traffic and only send it out along with its beacons, leading to a
maximum buffering in default Linux-based access point configuration of up
to 200 ms.

This means that a Babel sender that mixes unicast and multicast messages
can have the unicast messages overtake the multicast messages because of
this buffering; when authentication is enabled, this causes the receiver to
discard the multicast message when it does arrive because it now has a
packet counter value less than the unicast message that arrived before it.
Daniel observed that this happens frequently enough that Babel ceases to
work entirely when runner over a WiFi network.

The issue has been described in draft-ietf-babel-mac-relaxed, which is
currently pending RFC publication. That also describes two mitigation
mechanisms: Keeping separate PC counters for unicast and multicast, and
using a reorder window for PC values. This patch implements the former as
that is the simplest, and resolves the particular issue seen on WiFi.

Thanks to Daniel Gröber for the bugreport.

Minor changes from committer.
2023-02-14 18:18:32 +01:00
client Client: Unknown command should return nonzero errorcode 2022-12-10 03:02:26 +01:00
conf BGP: Allow role specific keywords to be used as symbols 2023-01-03 19:11:34 +01:00
distro Pkg: Improve RPM package unit file 2022-03-11 15:47:00 +01:00
doc Babel: Implement IPv4 via IPv6 extension (RFC 9229) 2023-02-14 16:17:03 +01:00
filter Added test case for switch bug fixed in e20bef69cc 2023-01-22 12:55:31 +01:00
lib Log message before aborting 2023-01-12 17:40:53 +01:00
misc Small fix of indenting 2023-01-23 14:23:00 +01:00
nest Build: Partial revert of one of previous changes 2023-02-01 19:30:21 +01:00
proto Babel: Keep separate auth PC counters for unicast and multicast 2023-02-14 18:18:32 +01:00
sysdep NEWS and version update 2023-01-23 02:23:19 +01:00
test Revert "Reducing filter stack size to allow for lesser thread stack size" 2022-09-16 10:11:51 +02:00
tools Small improvement in directory test 2022-03-02 10:52:09 +01:00
.dir-locals.el BIRD coding conventions 2019-06-12 16:37:12 +02:00
.gitignore add apkg-powered upstream packaging for deb, rpm 2021-05-19 17:22:11 +02:00
.gitlab-ci.yml CI: Remove docker rebuild phase 2022-11-30 02:48:59 +01:00
aclocal.m4 Enable more threads for flto 2019-08-01 14:45:23 +02:00
bird-gdb.py Support for address family constants 2019-11-03 22:25:44 +01:00
bird.conf KRT: Fix IPv6 route learn 2018-02-06 16:08:45 +01:00
configure.ac Configure: Expensive check option was broken, never worked 2023-01-03 17:14:48 +01:00
INSTALL Doc: Detect SP/OpenSP automatically 2019-02-19 18:20:07 +01:00
Makefile.in Build: Minor improvement to build output 2023-02-01 17:47:17 +01:00
NEWS NEWS and version update 2023-01-23 02:23:19 +01:00
README Doc: README and INSTALL update 2019-01-03 17:26:52 +01:00

                       BIRD Internet Routing Daemon

                     Home page  http://bird.network.cz/
                  Mailing list  bird-users@network.cz

                (c) 1998--2008  Martin Mares <mj@ucw.cz>
                (c) 1998--2000  Pavel Machek <pavel@ucw.cz>
                (c) 1998--2008  Ondrej Filip <feela@network.cz>
                (c) 2009--2019  CZ.NIC z.s.p.o.

================================================================================

The BIRD project aims to develop a dynamic IP routing daemon with full support
of all modern routing protocols, easy to use configuration interface and
powerful route filtering language, primarily targeted on (but not limited to)
Linux and other UNIX-like systems and distributed under the GNU General
Public License.

What do we support
==================

	o  Both IPv4 and IPv6
	o  Multiple routing tables
	o  Border Gateway Protocol (BGPv4)
	o  Routing Information Protocol (RIPv2, RIPng)
	o  Open Shortest Path First protocol (OSPFv2, OSPFv3)
	o  Babel Routing Protocol (Babel)
	o  Bidirectional Forwarding Detection (BFD)
	o  IPv6 router advertisements
	o  Static routes
	o  Inter-table protocol
	o  Command-line interface allowing on-line control and inspection of
	   status of the daemon
	o  Soft reconfiguration, no need to use complex online commands to
	   change the configuration, just edit the configuration file and notify
	   BIRD to re-read it and it will smoothly switch itself to the new
	   configuration, not disturbing routing protocols unless they are
	   affected by the configuration changes
	o  Powerful language for route filtering, see doc/bird.conf.example
	o  Linux, FreeBSD, NetBSD and OpenBSD ports

How to install BIRD
===================

	o  From standard distribution package of your OS (recommended)
	o  From official binary packages for Debian and Red Hat Linux
	   ftp://bird.network.cz/pub/bird/debian/
	   ftp://bird.network.cz/pub/bird/redhat/
	o  From source code of the latest stable release version
	   ftp://bird.network.cz/pub/bird/
	o  From current development code in Git repository
	   https://gitlab.labs.nic.cz/labs/bird/

See the file INSTALL for information about installation from source code.

Documentation
=============

Online documentation is available at http://bird.network.cz/?get_doc or as HTML
files in the doc directory, you can install it by `make install-docs' and
rebuild it by `make docs', but you'll need SGMLtools and LaTeX to be installed
on your machine. You can also download a neatly formatted PDF version as
a separate archive (bird-doc-*.tar.gz) from ftp://bird.network.cz/pub/bird/

User support
============

If you want to help us debugging, enhancing and porting BIRD or just lurk
around to see what's going to develop, feel free to subscribe to the BIRD
users mailing list bird-users@network.cz, just send `subscribe' to
bird-request@network.cz. Bug reports, suggestions, feature requests and
code are welcome! We don't use gitlab issues for reporting, sorry.

Subscribe:	http://bird.network.cz/mailman/listinfo/bird-users/
Archive:	http://bird.network.cz/pipermail/bird-users/

Licence
=======

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

History
=======

BIRD development started as a student project at the Faculty of Math
and Physics, Charles University, Prague, Czech Republic under supervision
of RNDr. Libor Forst <forst@cuni.cz>. BIRD has been developed and supported
by CZ.NIC z.s.p.o. http://www.nic.cz/ since 2009.


Good Luck and enjoy the BIRD :)
						The BIRD Team