Skip to main content
Each of these is a complete command. Change the interface and the destination, and you’re running. Every example here is transmit-only, which is safe on a live box: nothing is taken away from the kernel. Where a receiver is involved, that’s called out. The classic small-frame test. 64-byte frames are the hardest thing a NIC does, so this is the number that tells you what your hardware is really worth.
10G line rate with 64-byte frames is 14.88 Mpps. If you’re well under that, finding your max rate walks through whether it’s your CPU, your driver or the path.
Start with a limit rather than unlimited if the interface carries anything you care about, then press + to ramp up while you watch. Wireblast will make you confirm an unlimited run on a default-route interface.
This measures the send rate, which is what you want here. A single flow reaches line rate because Wireblast fans it out across every transmit queue, so one flow is enough to saturate the NIC. Flow diversity only matters on the receive side: RSS hashes a single flow onto one queue, so a receiver counting a single flow tops out at one core’s worth of packets. If you want to verify the rate end to end on a second box, add --flows 100 --vary-dst-port so the receiver spreads across queues. See transmit and receive.
The opposite end. Large frames are easy on packet rate, so this measures bits rather than packets.
--bps is measured in L1, so --bps 10G means 10G line rate.

Run an IMIX test

A realistic mix of frame sizes rather than one artificial size. The classic 7:4:1 spread of 64, 594 and 1518-byte frames, averaging 362 bytes.
Real output:
avg frame 362B is the confirmation that the mix came out right. To find the IMIX ceiling instead of running at a fixed rate, swap --pps 200k for --pps unlimited.

Replay a capture

Put real traffic back on the wire, frame for frame.
By default the capture loops until the duration expires, and the pace comes from --pps. To reproduce the capture’s own timing instead:
Don’t have a capture handy? Make one:
More in PCAP replay.

Exercise ECMP, LAG or RSS hashing

One flow only ever takes one path. To spread across a bundle, generate many flows.
--vary-dst-port moves both ports per flow, which widens the hash space. --flow-order random scatters them so consecutive packets land on different tuples. To spread destination addresses too, give a CIDR:

Stress a firewall or load balancer’s connection table

Stateless SYNs, many flows, no handshake.
This is a SYN flood. Only point it at something you own and have permission to test.

Test a switch’s VLAN handling

Two things to know: bind the physical NIC and let Wireblast build the tag, and the smallest tagged frame is 68 bytes rather than 64. VLAN-tagged traffic explains both.

Send IPv6 traffic

Give Wireblast an IPv6 source and destination and it builds IPv6 frames. UDP, TCP SYN, IMIX, raw and PCAP all work over v6, and so do flows and CIDR cycling.
Next-hop resolution uses IPv6 neighbour discovery (NDP) exactly as the IPv4 path uses ARP. The smallest frame is a little larger than IPv4, 66 bytes for UDP and 78 for TCP (add 4 with a VLAN tag), because the IPv6 header is 40 bytes and its UDP checksum is mandatory. To cycle destinations across a prefix:
Unlike IPv4 there is no network or broadcast address to skip, so every address in the prefix is used. On the receive side, the address-based filters (cidr, generated-flow, keep-management, all) work for IPv6; the port filters (udp-port, tcp-port) are still IPv4 only.

Send raw Ethernet with no IP at all

For testing switches, tag handling, or anything that shouldn’t care what’s inside the frame.
--dst-mac is required here. Raw frames carry no IP addresses, so there’s nothing to resolve a next hop from.

Count what arrives on a box

Turn a machine into a sink. This one does take packets from the kernel, so read transmit and receive first and use an interface you aren’t logged in over.
Pair it with a sender on another box for a full end-to-end check. See the two-box test.

Run it from a script

No wizard, no dashboard, plain text on stdout.
Exit code 0 on success, 1 on error, with the reason on stderr. Scripting and automation covers parsing the output and running unattended.
kill on that PID gives you a clean summary rather than a truncated log, because Wireblast drains its rings and detaches before exiting.

Try any of this with no hardware

Every recipe above works across a veth pair, at whatever rate your CPU manages. Build one in about four commands with the namespace lab.

More examples

The repository ships a numbered set of runnable examples, each with its own README and a run.sh you can execute directly, from a first run through line-rate tuning, IMIX, PCAP replay, VLAN tags and IPv6.

Examples on GitHub

001 through 023, including 022-ipv6-udp and 023-ipv6-flows for IPv6.