Skip to main content
Wireblast is one static binary with no runtime dependencies. No libpcap, no DPDK, no kernel modules, no cgo.

Requirements

Why 5.9+ matters. On 5.9 and later the XDP program is held by a BPF link that the kernel tears down when the process dies, so a crashed or kill -9’d Wireblast cleans up after itself. On older kernels a dead process can leave the program attached, and you clear it by hand with sudo ip link set dev eth1 xdp off.

Get the binary

Swap amd64 for arm64 on ARM hardware. The releases/latest/download/… URLs always resolve to the newest release, so they’re safe to script against. Each release also publishes a checksums.txt for verification.The arm64 build runs on modern 64-bit Raspberry Pis (Pi 4, Pi 5, Zero 2 W and newer, on a 64-bit OS). Their onboard NIC has no native XDP, though, so Wireblast falls back to generic mode there: it works, just not at line rate.

Privileges

The simple answer is sudo wireblast. AF_XDP has to create raw sockets and load an XDP program, and both need privileges. If you’d rather not run it as root, grant the capabilities once:
After that it runs as your normal user. Re-apply it whenever you replace the binary, since capabilities are attached to the file rather than the name. Skip this and Wireblast tells you before it touches anything:

Locked memory

This is the one that catches people on the first run. AF_XDP packet buffers live in a UMEM, a region of memory the kernel keeps locked into RAM, one per queue. A 12-queue run needs roughly 120 MB of locked memory, and the common default limit is 8 MB. Wireblast raises its own soft limit to the hard limit automatically before it checks. If that still isn’t enough, it stops and hands you the exact command:
All three fixes work. ulimit -l is fine for a one-off, limits.conf if you’ll be doing this regularly, and --queues if you’d rather not change host settings at all.
Wireblast never reconfigures your host. It will tell you that ip link set eth1 mtu 3000 would help. It will not run it. That applies to MTU, queue counts, routes, addresses and every other system-wide setting: the recommendations are yours to accept or ignore.

Check it works

You don’t need a NIC, a link, or root for that one. To actually put packets on a wire, head to the quickstart, which also shows you how to build a throwaway veth pair if you don’t have a spare interface to point it at.