Repository navigation
Installation
Debian and RPM packages are built by CI for Debian 12 and 13, Ubuntu 24.04 and Fedora. They install the engine, the XDP object, a systemd unit and a sample configuration.
sudo dpkg -i xdp-bfd_*.deb # or: sudo dnf install ./xdp-bfd-*.rpm
The unit ships disabled, because an engine with no arguments would
fail-loop. Nothing starts until you edit /etc/xdp-bfd/engine.conf and
enable it; Deployment covers that.
The install runs xdp-bfd --check, which loads the object and compares
its ABI against the binary. It prints the result and never fails the
install, so a machine that cannot load it still installs cleanly and
tells you why:
xdp-bfd: the XDP object loads and is ABI-matched on this kernel (6.8.0-31-generic).
If that says it did not load, see Supported kernels.
make # bfd_xdp.o, bfd_tx, bfd_loader
make check # unit suites; no root, no NIC, no testbed
You need libbpf, a C compiler, and clang 17 or newer for the BPF object. The clang version matters only on the machine that builds the object, not on the machine that runs it.
Loading and attaching need root, or the four capabilities the packaged
unit grants: CAP_BPF, CAP_PERFMON, CAP_NET_ADMIN and CAP_NET_RAW.
10.1.2 or newer. Anything older loops connecting and disconnecting on the data plane channel and never brings a session up.
Use the TCP transport, not unixc:, which is broken in every release so
far:
bfdd_options=" -A 127.0.0.1 --dplaneaddr ipv4c:127.0.0.1:50700"
On a released FRR, also add more than about twenty peers through vtysh
after the data plane has connected rather than from frr.conf.
See FRR compatibility for the per-version results and what a released FRR does not give you.
Running it
Reference
Development