Skip to main content
Wireblast tries to fail before it touches anything, and to say what would fix it. If you’re here, something got past that. These are the ones people actually hit.

It won’t start

Run it with sudo, or grant the capabilities once:
Re-apply that whenever you replace the binary, since capabilities live on the file.If sudo wireblast says “command not found”, you installed with go install and the binary is in your user’s GOPATH, which root’s PATH doesn’t include. Copy it to /usr/local/bin.
The most common first-run failure. Three fixes, all fine:
Wireblast already raises its own soft limit to the hard limit before checking, so if you’re seeing this, the hard limit is the binding one.
Check the name with ip -br link show. If you meant a VLAN, see the next entry.
Do what it says. Details in VLAN-tagged traffic.
Something else owns the interface. Either another Wireblast is running:
Or a previous run died without cleaning up, which is possible on kernels older than 5.9, where the program isn’t tied to the process lifetime. Clear it:
Confirm it’s gone with ip link show eno2. There should be no xdp in the output.

It won’t accept my settings

A tagged frame can’t be smaller than 68 bytes. Use 68. Why.
Wireblast will not change your MTU. Either send smaller frames or raise it yourself.The VLAN tag doesn’t count against the MTU, which is why a 1500-byte MTU accepts --packet-size 1522 when tagged.
--mode raw always needs --dst-mac.
Normal on a NIC used only for testing, especially when the addresses live on a VLAN sub-interface. Pass --src-ip. It doesn’t have to be an address the host owns, because nothing needs to route back.
Working as intended. --yes deliberately doesn’t cover this. See transmit and receive.
Either it isn’t reachable (ping -c1 it), or you’re deliberately sending at something that won’t answer, in which case pass --dst-mac directly. Wireblast never falls back to broadcast. Full decision tree in flows and addressing.

It runs, but the numbers are wrong

It isn’t hanging:
Attaching native XDP reinitialises the driver’s queues, which drops carrier. Normal, and the run clock doesn’t start until it’s back. Rerunning with r in the TUI skips it entirely. More.
Expected. The kernel’s counters exclude the FCS, and on a VLAN sub-interface they also exclude the Ethernet header and tag. About 6% at 64-byte frames, 1% at IMIX.Point bwm-ng at the physical NIC and it lands just under Wireblast’s L2. Full explanation.
L1 for link utilisation, the “am I filling the pipe” question. L2 for the frame you asked for. --bps is measured in L1.
Your driver has no native XDP support, so the kernel fell back. It still works, just much slower and it drops under load. See hardware and drivers.On AWS, ENA needs at least two combined queues and an MTU at or below 3000:
If TX errors are zero, you’ve found the box’s limit rather than a fault. Finding your max rate walks through isolating whether it’s the CPU, the NIC or the path.
Check Drops/errors on the receiver. Climbing means its rings filled up, so try more queues or a lower rate. Clean but short means the loss is in the path between them, not at either end.

Getting back to a clean state

On kernel 5.9 and later the program is held by a BPF link the kernel tears down when the process dies, so a crashed Wireblast cleans up after itself. On older kernels, the manual xdp off is your recovery.