README.md explaining what it demonstrates and a run.sh you can execute directly.
Most are transmit-only, which is safe on a live box: nothing is taken away from the kernel network stack. The ones that receive are grouped together under “receiving and two-box tests” and called out there.
Get them
Nothing to edit
Every script takes its settings from environment variables, so you never have to open one to change a value:IFACE, DST, PPS, SIZE and DUR. Anything a script needs and can’t guess is required, and it will tell you which one is missing rather than run something surprising. Each example’s README lists the rest.
The commands below are what the scripts run with their default values filled in. --start skips the wizard but keeps the live dashboard, so you still watch the run.
Start with no hardware
001-veth-quickstart is the one to run first. It builds aveth pair inside a throwaway network namespace, sends across it, and tears the whole thing down again. There’s no NIC involved, so it can’t touch your real network.
copy on a single queue rather than zero-copy, which is expected on veth.
Run it with KEEP=1 to leave the lab up, and the namespace lab guide turns it into a full sender and receiver with the numbers to expect.
The catalog
Start here
Start here
001-veth-quickstart builds its own lab and needs no NIC. See above.002-first-run is the simplest useful command on a real interface: one flow of 512-byte UDP frames at a modest rate.003-fixed-rate pins the rate and the duration so runs are comparable with each other.
Rate and frame size
Rate and frame size
004-packet-sizes runs three frame sizes back to back at the same packet rate, so you can watch packet rate and bit rate trade off.005-bit-rate-limit limits by bits instead of packets, for when you want “fill 2.5 gigabit” rather than a packet count. 006-line-rate-64byte is the small-frame ceiling, the hardest thing you can ask a NIC to do. 10G line rate at this size is 14.88 Mpps.011-imix-line-rate finds the same ceiling with realistic traffic instead of one artificial size.019-queue-scaling runs the same rate at 1, 2, 4 and all queues. It proves the rate limit is aggregate rather than per queue, and shows whether more queues actually help. Falling short of the number you expected? Finding your max rate walks through whether it was the CPU, the driver or the path.
--bps is measured in L1.--queues 0 means all of them.Flows and hashing
Flows and hashing
One flow only ever takes one path through a network. To exercise anything that hashes, you need many.007-many-flows generates a thousand distinct tuples instead of one.008-flow-hashing widens the hash space as far as it goes: ten thousand flows, both ports varying, and a scattered order so consecutive packets land on different tuples. This is the one for ECMP, LAG and RSS.009-cidr-destinations takes a CIDR instead of a single address and cycles destinations across the flows.A directly connected CIDR would need one MAC per destination, which Wireblast won’t guess. Set
DSTMAC to point it at a router instead. Flows and addressing explains how the tuples are built.Traffic patterns
Traffic patterns
010-imix is the classic 7:4:1 mix of 64, 594 and 1518-byte frames, averaging 362 bytes. 012-tcp-syn sends stateless SYNs across a hundred thousand flows, with no handshake. It’s for stressing a firewall or load balancer’s connection table.013-raw-ethernet sends frames with a fixed EtherType and no IP layer at all. 014-vlan-tagged sends 802.1Q tagged frames. Bind the physical NIC, not a VLAN sub-interface, and note that the smallest tagged frame is 68 bytes rather than 64.Set
avg frame 362B in the summary is your confirmation the mix came out right.--dst-mac is required, because raw frames carry no addresses to resolve a next hop from.SRCIP or DSTMAC and the script adds --src-ip or --dst-mac for you. VLAN-tagged traffic covers both surprises.IPv6
IPv6
Everything Wireblast does over IPv4 it does over IPv6. Give it a v6 destination and it builds v6 frames, resolving the next hop with neighbour discovery exactly as the v4 path uses ARP.022-ipv6-udp is a plain v6 UDP blast. 66 bytes is the smallest IPv6 UDP frame on the wire, because the header is 40 bytes and the checksum is mandatory.023-ipv6-flows cycles ten thousand flows across a prefix. Unlike IPv4 there’s no network or broadcast address to skip, so every address in the prefix gets used.Both take optional
SRCIP and DSTMAC, and 023 also takes VARY_DST_PORT.Capture replay
Capture replay
015-pcap-replay puts a capture back on the wire at a rate you choose. The directory ships a small Frames go out byte for byte as captured. Nothing is rewritten and no checksum is recomputed unless you override the MACs yourself. The capture loops until the duration expires, which is what makes a short one useful as a traffic source. Point Make your own with
sample.pcap, so it runs out of the box with nothing but an interface.PCAP at your own.016-pcap-original-timing replays the same capture with its recorded gaps between packets, exactly once. That reproduces a scenario rather than generating a load.sudo tcpdump -ni eth1 -c 1000 -w mycapture.pcap. It has to be an Ethernet capture. More in PCAP replay.Receiving and two-box tests
Receiving and two-box tests
These are the examples that take packets away from the kernel. Read transmit and receive first, and unless you’re using 021, use an interface you aren’t logged in over.017-receiver turns a box into a sink that transmits nothing and counts what lands on it. The filter is deliberately narrow.Set Other services on that NIC do stop receiving for the duration of the run, which matters on a box that does more than testing.
PROTO=tcp for --rx-mode tcp-port instead.018-two-box-imix is the sender half of an end-to-end test. Start the receiver on the far box first, then run the sender. When both ends report the same packet count, the path carried everything.VLAN, SRCIP and DSTMAC are all optional additions to the sender. The two-box test covers reading the two summaries against each other.021-safe-capture is the exception: it’s safe on the very NIC you’re logged in over. keep-management takes every packet on the interface except ARP, IPv6 neighbour discovery, SSH and DNS, so it cannot strand you. No --allow-match-all, no typed confirmation.Long runs
Long runs
020-soak-test runs for hours, unattended, logging to a file. It’s for the failures that only show up after a while: thermal throttling, memory leaks in the device under test, slow counter drift.Set
HOURS to change the length. Stop it with sudo pkill -INT wireblast, which gives you a clean summary rather than a truncated log, because Wireblast drains its rings and detaches before exiting.Scripting and automation covers parsing that log.Next
Common tasks
The same ground as copy-paste commands, when you don’t want to clone anything.
All the flags
Every flag the scripts use, its default, and what it does.
Transmit and receive
Read this before running any of the receive examples on a shared box.
Examples on GitHub
The source for all of the above, with a fuller README in every directory.