26 July 2023: babeld-1.13.1 * Implemented the per-interface option "probe-mtu", which automatically discards links with a mis-configured MTU. Thanks to Daniel Gröber. * Fixed a typo in the handing of the option "v4viav6". 16 July 2023: babeld-1.13 * Removed diversity support and related configuration file directives. This is an incompatible change. * Optimised route redistribution. We now install just the route that the kernel sent us rather than doing a full route dump on every change. * Added optional delay to daemon shutdown; see the configuration option "shutdown-delay-ms". Thanks to Daniel Gröber. * Fixed compilation under BSD. Thanks to Antonin Décimo. 7 February 2023: babeld-1.12.2 * Fixed reinstalling a Babel route after a redistributed route is retracted. This avoids waiting for a new update after a non-Babel route is removed from the routing table. * Fixed parsing of the "allow-duplicates" option. Thanks to Daniel Gröber. * Fixed parsing of multiple sub-TLVs in a single TLV. Since we currently never send multiple sub-TLVs, this was not visible in practice, but is a serious bug in the packet parser. Thanks to zmw12306. 18 May 2022: babeld-1.12.1 * Implemented separate PC values for unicast and multicast, which avoids dropping packets protected by MAC when WiFi powersave is active. Thanks to Daniel Gröber. * Schedule an interface check just after adding an interface. Thanks to Andrew Hoff. 5 May 2022: babeld-1.12 * Implemented v4-via-v6 routing (RFC 9229), which allows a router with IPv4 addresses only to route IPv4. Thanks to Théophile Bastian. * Enableed extended Netlink acks when available. Thanks to Toke Høyland-Jørgensen. * Fixed restoring of interface configuration to avoid unbounded memory consumption. Thanks to andrew-hoff. * Fixed handling of deny filters in the install chain. 30 March 2022: babeld-1.11 * Implemented MAC authentication (RFC 8967). Thanks to Clara Dô, Weronika Kołodziejak and Antonin Décimo. * Changed the interface of the add_filter function in order to simplify integration in OpenWrt. Thanks to Nick Hainke. 25 April 2021: babeld-1.10 * Removed the disambiguation code: source-specific routing is no longer supported for IPv4, and for IPv6 only on Linux 3.11 or later. * Fixed an issue handling of retractions with no next hop, which caused interoperability problems with BIRD. Thanks to Fabian Bläse. * If skip-kernel-setup is set, we no longer disable the rp_filter, which makes babeld work in containers. Thanks to Martin Weinelt. 21 April 2020: babeld-1.9.2 * Fixed two issues that could cause IPv4 routes to be represented incorrectly, with a range of confusing symptoms. Thanks to Fabian Bläse. * Fixed incorrect parsing of TLVs with an unknown Address Encoding. Thanks to Théophile Bastian. * Fixed access to mis-aligned data structure. Thanks to Antonin Décimo. 20 August 2019: babeld-1.9.1 * Fixed a crash that could happen when unicast and RTT estimation are both enabled on an interface. Thanks to Dave Taht. * Fixed compilation under BSD. Thanks to Dave Taht. 4 August 2019: babeld-1.9.0 * Reworked buffering of unicast packets to use a per-neighbour buffer rather than a single buffer per interface. This makes unicast as efficient as multicast, at the cost of slightly higher memory usage. * Added option "unicast" that allows sending most TLVs over unicast. This is necessary for the DTLS extension. * Implemented parsing of unicast Hellos. This makes it possible to interoperate with neighbours that only speak unicast (e.g. over some kinds of tunnels that only do unicast). * Implemented sending of unscheduled unicast Hellos. This makes the RTT extension work over unicast too. * Reworked the xroute data structures to use binary search and linear-time comparison. * Don't attempt to modify the rp_filter sysctl if it already has the desired value; this makes it possible to run babeld in an unpriviledged container. Thanks to Christof Schulze. * Reinstated logging of late hellos. Thanks to Dave Taht. * Don't send wildcard requests or Hellos to newish nodes. This makes acquisition of new neighbours slower, but drastically reduces noise at startup. Thanks to Teco Boot. * Remove an arbitrary limit on the number of interfaces. Thanks to Christof Schulze. * Removed class E from martian filter. Thanks to Dave Taht. * Added the ability to set the preferred source address in install filters. Thanks to Killian Lufau. * Fixed a number of read-only buffer overflows. Thanks to Leo Stefanesco. 22 July 2019: babeld-1.8.5 * Fixed a bug that caused confustion between learned routes and imported routes (thanks to Fabian Bläse). * Fixed a bug that prevented install filters from being evaluated (thanks to Killian Lufau). 9 November 2018: babeld-1.8.4 * Fixed a bug that discarded pipelined commands received on the local configuration interface. * Added the per-interface option rfc6126-compatible. 24 September 2018: babeld-1.8.3 * Fixed a read-only two byte buffer overflow in the packet parser. This is a read-only overflow, and hence most probably not exploitable. * Fixed an issue with creating unreachable routes on recent kernels (4.16 and up). Thanks to Christof Schulze. * Notice interface changes faster by listening to more netlink events. Thanks to Christof Schulze. * Fixed a local interface issue when an interface has no link-local address. Thanks to Christof Schulze. 12 May 2018: babeld-1.8.2 * Fixed a bug that prevented redistribution of IPv4 routes. Thanks to Niklas Yann Wettengel. 7 April 2018: babeld-1.8.1 * Implemented parsing of mandatory sub-TLVs and unicast and unscheduled Hellos. This makes this version comply with RFC 6126bis. However, we don't send any of these yet, so this version remains compatible with RFC 6126. * Fixed a bug that prevented us from sending requests after we lose a route. This makes convergence much faster in some cases, at the cost of slightly increased traffic. * Fixed interface addresses on some kinds of point-to-point links. * The keep-unfeasible (-u) option has been removed, this is now the default behaviour. 6 December 2016: babeld-1.8.0 * Added the ability to reconfigure babeld dynamically from the monitoring interface. This is an incompatible change. * Changed the configuration language to use an enumerated type instead of the "wired" boolean. This is an incompatible change. * Setting max-rtt-penalty no longer enables timestamps. This is an incompatible change. * Added PF_UNIX support to the local interface. Thanks to Julien Cristau. * Made it possible to have a 0 channel number within the diversity extension, which is consistent with draft-chroboczek-babel-diversity-routing-01. * Fixed a bug (introduced in 1.7.0) that could cause spurious policy rules to be created in the kernel. Thanks to Matthieu Boutier. 14 February 2016: babeld-1.7.1 * Fix compilation under musl. Thanks to Gabriel Kerneis. 3 February 2016: babeld-1.7.0 * Added the ability to choose the kernel routing table on a per-route basis. Thanks to Matthieu Boutier. * Refactored the disambiguation code to live above the kernel interface. Thanks to Matthieu Boutier. * Reworked the source table to function in log time. * Optimised the disambiguation code to avoid scanning all routes in non-source-specific networks. Thanks to Matthieu Boutier. * Modified the triggered updates logic to no longer send multihop requests. This makes babeld slightly less noisy, at the cost of slightly longer reconvergence after mobility. * Increased the token bucket limits, which some large meshes are starting to hit. * Increased the size of the netlink socket buffer. 1 October 2015: babeld-1.6.3 * Changed the handling of kernel configuration and added the skip-kernel-setup option. Thanks to Toke Høiland-Jørgensen. * Added the option "router-id" and removed the flag "-R". This is an incompatible change. 31 July 2015: babeld-1.6.2 * Added the ability to specify a router-id explicitly (-R). * Changed router-id computation to use all interfaces, which increases the chances of a stable id. * Changed the format of babel-state to only contain the seqno -- the validation of router-id was useless, and actually harmful when the router-id changed multiple times. * Fixed a bug with native source-specific routing. Thanks to Matthieu Boutier. 16 June 2015: babeld-1.6.1 * Fixed a buffer overflow in zone_equal. This is probably not exploitable, but might cause incorrect routing tables in the presence of source-specific routing. * Added support for defaulting ipv6-subtrees automatically based on the kernel version. * Fixed compilation under musl. 14 April 2015: babeld-1.6.0 * Added support for source-specific routing. Thanks to Matthieu Boutier. * Added support for reflecting metrics as kernel priorities. Thanks to Pierre Pfister. * Worked around a Linux kernel bug with an infinite EAGAIN loop. Thanks to Dave Taht. * Changed wildcard updates to not set flag 0x40. Reported by Markus Stenberg. * Made ipv6-subtrees a runtime option. Thanks to Matthieu Boutier. 4 July 2014: babeld-1.5.1 * Added support for reading multiple configuration files by specifying the -c command-line flag multiple times. * Be less noisy about unknown TLV types. Thanks to Baptiste Jonglez. 22 May 2014: babeld-1.5.0 * Added support for an RTT-based metric -- see the description of "enable-timestamps" in the manual page. This work was done by Baptiste Jonglez with help from Matthieu Boutier. 15 November 2013: babeld-1.4.3 * Added random-id option to config file (equivalent to -r). * Fixed parsing of compressed IPv4 updates. Thanks to Matthieu Boutier. * Fixed formatting of seqno requests with short prefixes. Thanks to Matthieu Boutier. * Fixed possible DoS on the local interface. Thanks to Baptiste Jonglez. * Fixed advertising costs higher than INFINITY on the local interface. Thanks to Baptiste Jonglez. * Fixed an assertion failure when an interface configuration is split into multiple config file directives. * Disable atomic route changes on BSD, which are buggy at least under Mac OS X. Thanks to Grégoire Henry. 19 June 2013: babeld-1.4.2 * Extensive changes to the configuration parser. It is now possible to set all command-line options from the configuration file, and to specify default values for interface parameters. * Allow redistributing routes from multiple kernel tables. Thanks to Toke Høiland-Jørgensen. * Fix some whitespace issues in the configuration parser. * Fix a bug in the configuration parser that could give wrong values to some exotic interface parameters (channel and faraway). * Fix a bug that could cause some extra traffic at shutdown. Thanks to Matthieu Boutier. * Under Linux, set rp_filter explicitly for all interfaces. This avoids mysterious routing failures on distributions that set rp_filter by default. Reported by Baptiste Jonglez. 19 June 2013: babeld-1.3.8 * Fix a bug in the configuration parser that could give wrong values to some exotic interface parameters (channel and faraway). * Fix a bug that could cause some extra traffic at shutdown. Thanks to Matthieu Boutier. * Under Linux, set rp_filter explicitly for all interfaces. This avoids mysterious routing failures on distributions that set rp_filter by default. Reported by Baptiste Jonglez. 26 May 2013: babeld-1.4.1 * Fix a bug that would cause the channel list to remain stuck at its initial value when running with -z3. 26 May 2013: babeld-1.3.7 * Fix a bug that would cause the channel list to remain stuck at its initial value when running with -z3. 3 May 2013: babeld-1.4.0 * Change the route selection algorithm to used a smoothed metric in addition to the "real" metric. This reduces the amount of route flapping without any special case hacks. * New flag -r, use a random router-id. This avoids temporarily unreachable nodes after a reboot when persistent storage is not available. * INCOMPATIBLE CHANGE: the local interface now announces the local hostname, and marks the end of the initial route dump. (Thanks to Gabriel Kerneis.) * The local interface is now able to accept multiple simultaneous connections. * Detect BATMAN interfaces, don't assume they are wired. 2 May 2013: babeld-1.3.6 * Work around recent Linux kernels advertising the IPv6 route cache as if it were part of the routing table. Thanks to Baptiste Jonglez. 12 April 2013: babeld-1.3.5 * Fix parsing of "channel interfering". Reported by Gioacchino Mazzurco. * Correctly reset rp_filter to its old value at shutdown. Thanks to Matthias Schiffer. * Work around a race condition that could cause us to fail to notice an interface's link-local address, and hence mark all neighbours as unreachable. Reported by Gabriel Kerneis. 8 August 2012: babeld-1.3.4 * Disable atomic route changes on Linux; this used to cause stuck unreachable routes on non-multipath kernels. * Improve error checking in command-line and configuration parser. 12 July 2012: babeld-1.3.3 * More fixes to IPv4 support on BSD -- pure meshes are now supported. * Fixed a very rare bug where an unfeasible route could be selected. 30 June 2012: babeld-1.3.2 * INCOMPATIBLE CHANGE: removed parasitic mode (-P). * Fixes to IPv4 support on BSD. * More reduction to the rate of sending requests. 11 February 2012: babeld-1.3.1 * Made the resend logic less aggressive. This should lead to fewer request messages upon link failure, at the cost of somewhat worse behaviour in the presence of heavy packet loss. * INCOMPATIBLE CHANGE: removed the idle detection functionality (-i). This feature was little used and complicated the code somewhat. * Various internal tweaks to bring babeld closer to the Quagga version. 8 December 2011: babeld-1.3.0 * Made the route table into a sorted array, and use binary sort for searching for routes. This makes most route operations O(log n), at a slight cost in memory usage. * Changed the update sending strategy to use buffers large enough for a full update. This makes the duplicate suppression mechanism effective in large networks, at a small cost in memory usage. * Rate-limit the reaction to wildcard requests. This avoids an update storm at boot in large networks. * Fixed a bug that prevented usage of the "default" keyword in configuration files. 16 October 2011: babeld-1.2.1 * Fixed an incorrect assertion that would cause a crash when -w was being used (reported by Thomas McLure). 9 September 2011: babeld 1.2.0 * Merged the interference-aware branch ("babelz"). Please see the "-z" flag in the manual page. * Fixed a memory leak when expiring resent messages. * Fixed a buffer overflow when parsing MAC addresses (Matthieu Boutier). * Implemented MAC address parsing for BSD (Matthieu Boutier). 27 August 2011: babeld 1.1.4 * Change the default port number to 6696, as allocated by IANA. 3 August 2011: babeld 1.1.3 * Implemented an option -u to keep unfeasible routes; this is useful for giving more data to front-end interfaces. * Fixed a number of minor bugs in the front-end interface. * Fixed incorrect handling of interfaces with multiple link-local addresses (thanks to Matthieu Boutier). 27 July 2011: babeld 1.1.2: * Changed the strategy used to tweak an installed route in a way that should avoid packet loss (thanks to Dave Taht). * Fixed the handling of duplicate interface definitions in the config file (thanks to Matthieu Boutier). 16 May 2011: babeld 1.1.1: * Fixed two bugs in the message parser that could cause IPv4 updates to get lost. * Fixed a bug in the monitoring interface that could cause route ids to change (thanks to Gabriel Kerneis). * INCOMPATIBLE CHANGE: the default wired hello interval is now 4 seconds. * Ported to Bionic libc. 30 January 2011: babeld 1.1.0: * INCOMPATIBLE CHANGE: the UDP port number and multicast group have been changed to be the ones allocated by IANA. * Initial port to OpenBSD, by Vincent Gross. 1 October 2010: babeld 1.0.2: * Worked around a gcc bug that would cause assertion failures on MIPS. 2 May 2010: babeld 1.0.1: * Fixed a bug that could cause input filters to be ignored. 22 April 2010: babeld 1.0: * Minor portability fixes. 8 February 2010: babeld 0.98: * Implement the ability to prefer Babel routes to external routes according to the kernel priority (-A). * Implement the ability to redistribute "boot" routes when the protocol is explicitly specified on the "redistribute" line. * Allow trailing whitespace in config file. 5 November 2009: babeld 0.97: * INCOMPATIBLE CHANGE: rename babel.{conf,log} to babeld.*. * Use getopt for parsing command-line options. 11 August 2009: babeld 0.96 * Renamed babel to babeld. * Routes are now automatically flushed when an interface goes down or an IPv4 address changes, which avoids desynchronisation between Babel and the kernel. 21 April 2009: babel 0.95 * Fixed a bug that broke link-quality estimation, and could cause severe instability when we had both good and marginal neighbours. * We now send retractions after a redistributed route is retracted. * Fixed a bug that could cause reliable messages (retractions and router-id switches) to only be sent twice. * We no longer obey a silent time at startup, instead sending a bunch of retractions. The silent time is inconvenient, but seldom useful. * Updates for routes to self are now sent together with other updates (they used to be sent more frequently). * Fixes the configuration parser to interpret hello-interval as a number of seconds, as specified in the documentation (it used to be interpreted as a number of milliseconds). * INCOMPATIBLE CHANGE: the update interval is now a per-interface value, may be configured manually in the configuraton file, and defaults to 4 times the hello interval. The -u flag is gone. 10 April 2009: babel 0.94 * Fixed a bug introduced in 0.17 that caused recently retracted routes to remain until the routing table entry was flushed. * Implemented per-interface configuration of parameters such as link cost, hello interval etc. The command-line flags are now only used to set defaults. 15 March 2009: babel 0.93 * No longer update seqno periodically, rely on explicit seqno requests. 21 January 2009: babel 0.92 * Fixed a bug that could cause a crash if an interface was repeatedly brought down and then back up. * Implemented some protection against time stepping when POSIX clocks are not available. 10 November 2008: babel 0.91 * Maintain buffered updates per-interface, which makes multi-interface nodes significantly less noisy. * Changed the strategy for dealing with unfeasible routes to be slightly more generous while still avoiding loops. * Fixed a bug that would cause multi-hop requests to be spuriously resent. * Made a number of micro-optimisations throughout. 23 October 2008: babel 0.90 * INCOMPATIBLE CHANGE: all new Babel version 2 protocol, which is both more robust and less chatty than version 1. * Tweaked the strategies for sending triggered updates and unfeasible requests to be more conservative. * Minor optimisations all over the place. * Removed the protocol specification -- the version 2 spec is maintained separately. 18 October 2008: babel 0.17 * INCOMPATIBLE CHANGE: removed support for ``inherit'' in redistribution. * INCOMPATIBLE CHANGE: a pidfile is now created by default. * Increased the default seqno interval. * Use a fixed kernel priority for routes installed by babel. 29 September 2008: babel 0.16 * Tweaked cost computation to be slightly slower. * Implemented a local interface for GUIs. * INCOMPATIBLE CHANGE: the -X command-line option is no more. 8 July 2008: babel 0.15 * Fixed a bug that could break link-quality estimation on yo-yo links. * Protect against duplicate neighbour ids on the same interface. * More tweaks to improve scaling with the number of kernel routes. * Tweaked the default update interval. 1 July 2008: babel 0.14 * Use POSIX clocks if available to protect against clock stepping. * Made babel use available internal routes straight away when the set of redistributed routes changes. * Lifted the arbitrary limit on the number of kernel routes. * Changed the routing metric used on wireless links to plain ETX. * Bridges are now automatically detected and treated as potential wireless interfaces. * Reduced the default hello interval. 24 May 2008: babel 0.13 * Removed all arbitrary limits (interfaces, neighbours, routes, xroutes and sources). * Fixed a bug that prevented expiration of stale sources. * Updated the kernel interface to work with recent Linux kernels. * More tweaks to the order in which updates are sent. 7 April 2008: babel 0.12 * Retractions are now sent multiple times, which should speed up convergence in presence of packet loss. * Optimised the sending of updates to make them smaller. * Don't forward requests multiple times; this should reduce the noise due to requests with no increase in convergence time. * Fixed a bug that could cause a crash when resending requests. * Added some protection against clock stepping. 29 March 2008: babel 0.11 * Implemented sub-second hello and update intervals. * Fixed a bug that could prevent the best route from being selected for extended periods of time. * Implemented protection against out-of-date requests being sent and forwarded when a node loses its sequence number. * INCOMPATIBLE CHANGE: reduced the cost of wired networks down to 96 from 128. * Tweaked the frequency at which a router's seqno increases, to make it more likely that a feasible route will be available when needed. * Implemented garbage collection of old sources. * Implemented coalescing of unicast messages. * Fixed a bug that could cause a crash when a link's MTU changes. * Fixed a bug that could delay noticing that a network is no longer idle when running Babel with the -i flag. * Fixed a bug that could cause incorrect metrics to be advertised when output filtering was used. * Fixed a bug that could cause incorrect link costs to be computed when a neighbour reduces its hello interval. * Fixed some minor issues with the ordering of outgoing messages. 11 March 2008: babel 0.10 * Implemented the ability to automatically export local addresses (see the ``local'' keyword in redistribute specifications). This should avoid the need to explicitly specify -X on the command line (Julien Cristau and Juliusz Chroboczek). * INCOMPATIBLE CHANGE: local routes (local interface addresses) are now exported by default. Specify ``redistribute local deny'' to avoid that. * Babel will now automatically choose a router id if none is specified on the command line. * Automatically adapt to interfaces appearing or disappearing at runtime, as is usually the case when running over tunnels or VPNs. * Changed the link quality computation algorithm to not discard very lossy links. * Multi-hop requests will now be forwarded to an unfeasible successor under some circumstances. * Send multi-hop requests more aggressively. * Send requests for a new seqno upon receiving an unfeasible update if it's better than what we have. * No longer consider the age of routes in route selection. * Added ability to run as a daemon. 14 February 2008: babel 0.9 * Implemented a proper configuration language to specify input and output filters and redistribution policies. * INCOMPATIBLE CHANGE: the flags -4, -x and -c are no longer supported. 8 February 2008: babel 0.8 * Babel will now automatically check for interfaces' up/down status, IPv4 address, and optionally for carrier sense. * Implemented the -w option, which disables all optimisations for wired interfaces. * Implemented support for non-default routing tables. * Fixed a bug that could spuriously remove IPv4 routes (thanks to Julien Cristau). 3 January 2008: babel 0.7 * Implemented support for IPv4. * Fixed sending of unicast requests. * Don't send poison when receiving a request for an unknown route. * Basic filtering infrastructure. * Removed support for broadcast IHU. * Changed the behaviour of -d. 16 October 2007: babel 0.6 * Implemented resending of unsatisfied requests, with exponential backoff. * Fixed a potential crash in the request handling code. * Send IHUs more aggressively. 9 October 2007: babel 0.5 * Implemented forwarding of requests and replies. * Fixed a bug that prevented requests from being parsed correctly. * Fixed a bug that prevented IHU intervals from being sent. * Respect reboot_time even after an id change. * Deal with neighbours rebooting and losing their hello seqno when computing link quality. 23 September 2007: babel 0.4 * Fixed incorrect expiration of old sources. This could prevent convergence in some cases. 16 September 2007: babel 0.3 * Fixes to Mac OS X support (Grégoire Henry). 29 August 2007: babel 0.2 * Made jitter computation depend on how urgent a given message is. This dramatically improves convergence speed, without increasing network load. * Fixed a bug that prevented neighbour associations from being discarded at shutdown. 22 August 2007: babel 0.1 * Initial public release.