Linux IPv6 Router Advertisement Daemon (radvd)
The router advertisement daemon (radvd) is run by Linux or BSD systems acting as IPv6 routers. It sends Router Advertisement messages, specified by RFC 2461, to a local Ethernet LAN periodically and when requested by a node sending a Router Solicitation message. These messages are required for IPv6 stateless autoconfiguration.
Linux is supported. Your mileage may vary on BSD.
To download the latest version.
This website is hosted by GitHub Pages, improve it: source.
There are two mailing lists for radvd:
The first list is for announcements of new radvd releases, and the second list is for discussion of radvd development. Please subscribe to one or both of these if you are interested in radvd.
We encourage you to help with radvd development! The repository for radvd is available to anybody via GitHub.
You may want to discuss development on the radvd-devel-l mailing list. Please consider contributing bug fixes and improvements back to the project.
You can also try to discuss development on the Libera.Chat IRC, channel #radvd. IRC discussion is intended to cover development issues, and is not intended as a general support system.
Sep 23, 2020 - Version 2.19 updates:
- Add PPC64LE support
- Update PidFile path to avoid system warnings
- Fix segfault because of accessing NULL pointer
- Allow building on musl
- Crash on SIGHUP when config file removed.
- Don't force -fstack-protector, the toolchain might lack support for it
- fix wrong assignment of struct msghdr
- Change location of tmpfiles to /run to avoid warnings
For more informations about recent modifications, please see the CHANGES file.
Available:
Feb 25, 2019 - Version 2.18 updates:
- Fix double-free scenario in case if duplicate interface was specified
- Separate systemd and SysV packaging
- Update fedora packaging files
- No router advertisements on tunnel interfaces
- Add nodaemon option to the manpage
- Write to stderr in non-daemonized mode
- Fixes memory leak in add_ra_options_dnssl
- Allow quoted strings in config.
- nd_opt_6co endianness fix
Jul 3, 2017 - Version 2.17 updates:
- Fix STDERR_SYSLOG log level bug.
- Always close stdout and stderr when daemonizing.
- Implement RFC 7772 Section 5.1.2, 5.1.2, defaulted to on. (Robin H. Johnson)
- Added a new co-maintainer, Robin H. Johnson
Feb 1, 2017 - Version 2.16 updates:
- Allow selection of RA source address. (Robin H. Johnson)
- Fixed ExecReload in systemd service file (Harald Albrecht)
Sep 24, 2016 - Version 2.15 updates:
- Moved auto prefix code from config file parser to send_ra.
- Merged ARPHRD_6LOWPAN netlink query from (Alexander Aring)
- Add systemd service file (Craig Andrews)
Jul 5, 2016 - Version 2.14 updates:
- Fix bug in netlink message processing
Apr 2, 2016 - Version 2.13 updates:
- Ignore bogus RTM_NEWADDR netlink messages
Feb 1, 2016 - Version 2.12 updates:
- process.c: fixup ugly overflow check
- radvd.conf.5.man: minor fixup to 'client' option
- radvd.conf.5.man: update abro usage
- gram.y: deprecate abro prefix length
- device-linux.c: IEEE 802.15.4 musl libc fix
- send.c: seconds/miliseconds comparison fix
- send.c: preferred lifetime RFC 4862, 5.5.3 fix
- defaults.h: remaining lifetime RFC 4862 fix
- radvdump: show routes with prefixlen > 64
Apr 9, 2015 - Version 2.11 updates:
- Added '--with-check' option which defaults to 'no' in configure
Jan 22, 2015 - Version 2.10 updates:
- Revert a change which broke responding to new interfaces
Dec 31, 2014 - Version 2.9 updates:
- Recognize new interfaces coming up and react immediately (Volker)
- Better checking for sysctl() availability (Alexey)
- Ensure random delay in non-UnicastOnly mode
- Fix deref NULL ptr in Deprecate* code
Oct 6, 2014 - Version 2.8 updates:
- Remove autoconf=0 code.
- Fix memory leak when getting SIGHUP.
Sep 10, 2014 - Version 2.7 updates:
- Move privsep after daemonize to avoid doing the same deamonization in privsep.
Sep 3, 2014 - Version 2.6 updates:
- Make sure radvd PID file is written before startup radvd process exits
- Normalize some logging to read like headlines rather than prose English
- Build fixed on FreeBSD
Aug 4, 2014 - Version 2.5 updates:
- Move disable_autoconf to privsep
- Cleaned up some logging
- Fixed a few memory leaks
Jul 30, 2014 - Version 2.4 updates:
- Add RDNSS test file to DIST_EXTRA
- Enhance make packages target to ensure the packages build
Jul 30, 2014 - Version 2.3 updates:
- Fix RDNSS option length
- Fix --test option in check_all
Jul 29, 2014 - Version 2.2 updates:
- Fix netlink and setup_iface for down interface coming up
Jul 20, 2014 - Version 2.1 updates:
- Removed parser locations to maintain byacc support
- added files needed for make check target to DIST_EXTRA
Jul 12, 2014 - Version 2.0 updates:
- parser can run without root
- parser locations
- fewer global variables
- PIDs embedded in logging
- stricter interface initialization
- flesh out some netlink code to handle RTM_NEWADDR
- code cleanup, simplification and factoring
- Makefile.am cleanup and organization
- use -fstack-protector for enhanced security
- 6lowpan support
- format string checking in log functions
- Use clock_gettime and monotonic clock
- organize and factor struct Interface and send_ra
- removed libdaemon dependency
- added make check target based on check unit testing framework
Jun 28, 2014 - Version 1.14 updates:
- add check in configure.ac for clock_gettime (Zacarias)
Jun 16, 2014 - Version 1.13 updates:
- Use clock_gettime and monotonic clock (Pargmann)
Jun 4, 2014 - Version 1.12 updates:
- Backport a few code cleanup items from the 2.0 branch
- Add compiler attributes to type check format strings (RodrÃguez)
Jun 1, 2014 - Version 2.0 updates:
- Version 1.X branch forks here, master is now 2.X
Jun 1, 2014 - Version 1.11 updates:
- Add compiler attributes to type check format strings (RodrÃguez)
Mar 18, 2014 - Version 1.10.0 updates:
Jan 10, 2014 - Version 1.9.8 updates:
- setting -no-strict-aliasing in CFLAGS
September 20, 2013 - Version 1.9.7 updates:
- ioctl bug fix for getting the hardware address and mtu of an interface
September 17, 2013 - Version 1.9.6 updates:
- Check AdvSendAdvert before sending an advertisement
October 2, 2013 - Version 1.9.5 updates:
- IPv6 forwarding setting should be 1 or 2
- Performance fix in netlink message processing
- fix for kernels with no NETLINK_NO_ENOBUFS defined
- distributing gz, bz2 and xz tarballs
- also distributing md5, sha1, sha256 and gpg signatures
October 1, 2013 - Version 1.9.4 updates:
- IPv6 forwarding setting should be 1 or 2
- Performance fix in netlink message processing
- fix for kernels with no NETLINK_NO_ENOBUFS defined
- distributing gz, bz2 and xz tarballs
- also distributing md5, sha1, sha256 and gpg signatures
March 31, 2013 - Version 1.9.3 updates:
- check for sys/sysctl.h availability
- radvdump fix to interpret MTU and Route
November 20, 2012 - Version 1.9.2 updates:
- A few minor Makefile.am fixes
June 19, 2012 - Version 1.9.1 updates:
- Replacing a '==' in configure with '=' for better shell portability
June 14, 2012 - Version 1.9 updates:
Jan 26, 2012 - Version 1.8.5 updates:
- corrects the PID stored in the PID file
Jan 20, 2012 - Version 1.8.4 updates:
- Fixes in privsep on linux
- privsep is now the default and only code path
- added --nodaemon option
Oct 14, 2011 - Version 1.8.3 updates:
- proper tracking of buffer usage in send_ra
Oct 6, 2011 - Version 1.8.2 updates:
- Security fixes by Vasiliy Kulikov
Aug 22, 2011 - Version 1.8.1 updates:
- Patch for cross compiling on uClibc
- Minor fixes to debug logging.
May 14, 2011 - Version 1.8 updates:
- IgnoreIfMissing now defaults to on
- Timer code replaced with poll
- radvd now listens for interface state changes on a netlink socket
- DecrementLifetimes
- DeprecatePrefix
- FlushRoute
- BugFix in DNSSL parsing
Jan 12, 2011 - Version 1.7 updates:
- Fix radvd skipping multiple interfaces when UnicastOnly is on or AdvSendAdvert is off. This got broken in radvd 1.3. Patch from Cedric BAIL.
- Fix a segmentation fault on reload_config() timer list corruption that only occurs with multiple interfaces.
- Add '-c' flag to test configuration.
- Deprecate old, pre-RFC5006 parameters. Support RFC6106 by adding DNS Search List support. From Pierre Ossman.
- AdvSourceLLAddress fixed on FreeBSD when link layer token length is zero.
- Welcome new co-maintainer: Reuben Hawkins
March 5, 2010 - Version 1.6 updates:
- Decrease MSG_SIZE from 4096 to about 1500B. Send buffer uses a smaller size in order to avoid sending out fragmented packets, yet being able to receive full-size frames.
- Keep track of buffer size and exit if the number of prefixes/routes/etc. would grow too much. Prevent a memory corruption due to wrong memset. Patches from Jan Gorig, Red Hat bug #554125.
- On BSD use getifaddrs() also in setup_deviceinfo(), fixes a multiple interfaces problem on NetBSD 5 due to change in data structures. Patch from Michael Stapelberg.
- Allow radvd.conf prefix, clients, route, and RDNSS options to be in any order. Patch from Michael Stapelberg.
September 10, 2009 - Version 1.5 updates:
- Fix infinite loop/segmentation fault problems when cable plugged out/plugged back in, caused by reload_config() and subsequent timer list corruption.
- Fix IgnoreIfMissing when cable is unplugged at startup. Radvd would keep skipping the interface.
- Fix parallel make.
August 3, 2009 - Version 1.4 updates:
- Fix an unintentional change in 1.3: RAs were accidentally often unicast to solicitors instead of being multicast. This is still compliant with the specification but is not optimal.
July 7, 2009 - Version 1.3 updates:
- Add a "clients" directive which can be used to specify the clients to which radvd will unicast RAs and ignore RSs from every other client. Possibly useful in gradual rollouts.
- Work around Linux IPV6_RECVPKTINFO|IPV6_RECVHOPLIMIT renumbering issues with some combinations of glibc and kernel (e.g. OpenWrt and Freetz projects)
- Use getifaddrs() on BSD instead of ioctl; work around unaligned traps on Alpha; Make NetBSD 5 compile.
October 28, 2008 - Version 1.2 updates:
- Accept virtually any kind of interface naming convention.
- If stale radvd.pid exists, try to overwrite it unless the specified PID exists.
- Define _GNU_SOURCE to fix compilation with glibc >= 2.8.
- Remove -Wconversion from default CFLAGS due to bogus warnings, fix some real warnings.
- Decrease the default preferred lifetimes from 30/1 days to 1d/4h.
February 4, 2008 - Version 1.1 updates:
- Implement privilege separation on Linux: a master root process (which is able to reconfigure interfaces) and the main process. There is '-s' toggle to keep old behaviour.
- Fix Linux retrans_timer on old kernels (newer ones have retrans_timer_ms)
- Fix stderr+syslog (default) logging on non-i386 platforms.
- Require that interface must be RUNNING instead of just UP.
Note: this could break deployments with very old kernels.
- Implement automatic interface address advertising with special prefix ::/64.
- Relax interface naming (e.g. with VLANs) requirements.
- Fix ordering of route, prefix and RDNSS options (only matters with RDNSS)
November 1, 2006 - Version 1.0 updates:
- Fix AdvDefaultLifetime initalization, broken in 0.9.1.
- Fix STDERR+syslog logging, don't try STDERR after forking.
- Implement RDNSS draft with (non-allocated) ND type code 25.
- Redefined IgnoreIfMissing: failed interfaces are now reinitialized by default. IgnoreIfMissing only omits warnings about these.
- Unblock SIGALRM at startup.
- Implement MAX_INITIAL_RTR_ADVERT_INTERVAL handling.
- Perform some dynamic/static code audit, fix some minor bugs and do cleanup as a result.
January 13, 2006 - Version 0.9.1 updates:
- Clean up signed/unsigned values, add more warnings to CFLAGS
- Fix a couple of IPv6 Ready Logo Phase-2 IPv6 Core Protocols Self Test issues
- Create a short FAQ in README file, other minor documentation updates
- Get interface MTU automatically, so that you can use jumboframes and advertise MTU >1500
October 19, 2005 - Version 0.9 updates:
- radvdump cleaned up, only config-file syntax supported
- add NEMO Basic support (RFC3961) and fix default HomeAgentLifetime
- more robust timer handler in case the kernel is buggy
- new default logging method "stderr_syslog"; Everything is logged on syslog, but the most important messages (i.e., start-up failures) are also logged on stderr.
July 8, 2005 - Version 0.8 updates:
- More specific route codepoint has been changed to the official value, 24.
- Fix incorrect calculation of the 6to4 prefix on big-endian architectures.
- Fix a multicast join issue with HUP signal on newer 2.6.12+ Linux kernels.
- Merge some MIPv6 and non-MIPv6 code, improve error messages.
- Improve slightly the error messages from config file parsing.
February 21, 2005 - Version 0.7.3 updates:
- A large number of fixes and cleanups
- Support Router Preferences and More Specific routes
- Add "IgnoreIfMissing" interface flag, to be used with interfaces which may become available only later on
October 28, 2002 - Version 0.7.2 updates:
- add support for VLANs (from USAGI)
- make it compile better on newer NetBSD's (NetBSD)
- fix a syntax error in radvd.conf(5) sample documentation
- use IPV6_RECV{HOPLIMIT,PKTINFO} not IPV6_{HOPLIMIT,PKTINFO} if supported
- (in Red Hat spec file) don't create radvd gid explicitly
- a lot of coding style cleanups
January 16, 2002 - Version 0.7.1 updates:
- Check that forwarding is enabled when starting radvd (helps avoid odd problems)
- Check configuration file permissions (note: in setuid operation, must not be writable by the user.group)
- Cleanups and enhancements for radvdump
- Ensure NULL-termination with strncpy even with overlong strings (non-criticals, but better safe than sorry)
- Update config.{guess,sub} to cope with some newer architectures
- Minor fixes and cleanups
November 21, 2001 - Version 0.7.0 updates:
- Maintainership of radvd transferred from Lars Fenneberg to Nathan Lutchansky and Pekka Savola
- Support for ISATAP and other NMBA link types
- Bug fixed concerning FreeBSD 4.4 with multiple interfaces
- A few cleanups, including a couple of possible 1-byte buffer overflows (non-critical)
June 20, 2001 - Version 0.6.2pl4 updates:
- Set supplementary groups properly when dropping root (security)
- Do some more RFC2461 validity checks on received packets
- Rejoin all-routers multicast group if interface is cycled
- Remove provider-based addressing support, minor cleanups
April 28, 2001 - Version 0.6.2pl3 updates:
- Fixed broken 6to4 support.
- Converted to automake-based build style.
April 14, 2001 - Version 0.6.2pl2 updates:
- Now compiles on FreeBSD. (suggested by Marko Myllynen)
- Allows negative values for Home Agent Preference. (from Marko Myllynen)
- Misc bugfixes.
April 4, 2001 - Version 0.6.2pl1 contains:
- Integrated 6to4 support, to allow a prefix address to be dynamically created from the IPv4 address of a specific interface at configuration time. (from Nathan Lutchansky)
- The option to have radvd drop root privileges after the ICMP socket has been opened. (from Pekka Savola)
- The option to have radvd chroot to a "safe" directory. Currently unusable under Linux. (from Pekka Savola)
- Fixed signal handling, allowing signals to take effect immediately rather than at the next advertisement. (from Nathan Lutchansky)
- Misc bugfixes. (from Pekka Savola)
- Configuration parser grammar cleanup. (from Nathan Lutchansky)