fastd v18
=========

New features
~~~~~~~~~~~~

Multi-interface modes
---------------------

A single fastd instance can now manage multiple TUN/TAP interfaces. This allows to
use multiple peers and peer directories in TUN mode, creating one interface for each
peer. *on-up* and *on-down* scripts are run once for each interface.

By default, all interfaces are created on startup or peer reload; the option
*interface persist* can be used to change this behaviour.

In addition to the multi-peer TUN mode, it is also possible to make fastd create one
interface per peer in TAP mode now. This is enabled by the setting *mode multitap*
(the option for multi-interface TUN mode is just *mode tun*, as there is no TUN mode
which handles multiple peers on a single interface.)

Multi-TAP mode is compatible with TAP mode, i.e. the peer may be configured in normal
TAP mode (and may use a fastd version without multi-TAP support.

If explicit interface names are configured, these names must now be set for each peer,
which may either be done explicitly, or using :ref:`name patterns <option-interface>`.

Peer-specific interfaces may also be configured with peer-specific MTUs.

Interface cleanup on FreeBSD/OpenBSD
------------------------------------

FreeBSD and OpenBSD do not automatically destroy TUN/TAP interfaces. fastd will
now destroy the interfaces it creates on these systems on exit.

Improved capability management
------------------------------

fastd will now automatically retain all POSIX capabilities it needs, so all options
should now work without full root privileges.

The option *drop capabilities force* may be used to drop CAP_NET_ADMIN even when
fastd would normally retain it.

More powerful peer groups
-------------------------

All *on-\** options may now be overridden per peer group.

In particular, the *on-verify* option may be moved into a peer group to determine
the peer group of unconfigured peers. This allows to set a peer limit for unconfigured
peers without globally limiting the peer count.

Bugfixes
~~~~~~~~

* When linked with NaCl instead of libsodium, fastd would use SSE for salsa20/salsa2012 on x86 even after
  determining that SSE is not availble. This led to crashes or transmission
  failures on CPUs like the Geode.
* Fix crash on x86-64 systems when built with certain combinations of GCC version and
  stack-protector compiler flags (observed on Fedora)
* fastd did reject configurations which contain neither static peers nor
  peer directories, but a *on-verify* option
* The status socket is now removed correctly if fastd exits with an error message
* fastd did exit with regular exit code 0 instead of re-raising the termination signal after cleanup
* Fix in-tree compile on non-Linux systems

Other changes
~~~~~~~~~~~~~

* fastd now requires at least libuecc v6 (v7 recommended)
* Some error conditions that can't be recovered from will now cause fastd
  to exit instead of just logging an error message. This allows service managers like systemd/procd
  to restart fastd, so proper operation can be restored.
