fastd v22
*********

The main improvement of fastd v22 is the L2TP kernel offloading
support, which brings fastd's throughput for unsecured connections on
par with other L2TP solutions like Tunneldigger, while maintaining
most of fastd's flexibility. It is even possible to use fast L2TP
connections for some peers and secure encryption for others in a
single fastd instance.


New features
============

* Added new method "null@l2tp"

  Like the old "null" method, "null@l2tp" doesn't provide any
  security. In TAP mode, it uses a packet format compatible with
  L2TPv3 Ethernet Pseudowires (RFC3931 and RFC4719) for payload data.

  Using "null@lt2p" for new unsecured deployments and migrating
  existing "null" setups is recommended for a number of reasons:

  * "null" uses a 1-byte packet header, which can make data transfer
    between kernel and userspace slightly slower on platforms that
    care about alignment

  * The L2TP-compatible data format facilitates debugging, as packet
    sniffers like Wireshark can decode the payload

  * L2TP can be offloaded to the Linux kernel, significantly
    increasing throughput

  See offload configuration for information on the setup and
  limitations of the L2TP offload feature.

* Added support for NetBSD (tested on NetBSD 9.2)


Bugfixes
========

* Fix build for MacOS

  This issue was introduced during the move to the Meson build system
  in fastd v20.

* Fix TUN mode crash on FreeBSD/OpenBSD

  This issue is a regression introduced in fastd v20. The buffer
  management optimization caused an assertion failure in many
  configurations upon reading packets from the TUN interface.

* Fix version number format

  When not building from Git, fastd v21 would format its own version
  number as "21" rather than "v21", deviating from previous releases.
  This is fixed with v22.


Other changes
=============

* A new handshake format has been introduced, prepending an L2TPv3
  Control Message header to the actual fastd handshake. This improves
  certain interactions between fastd and the L2TP kernel module used
  for offloading.

  To maintain compatibility with older fastd versions, both handshake
  formats are accepted. For the initial handshake packet, an old and a
  new format packet are sent at the same time.

  Sessions established using the old handshake format are marked with
  "compat mode" in the log.
