--flows 64 means 64 distinct tuples, cycled through as packets go out.
This matters when you’re testing anything that hashes: ECMP, LAG, RSS, a firewall’s connection table. One flow exercises one path. A thousand flows exercise the spread.
Generating them
--src-port, and the destination port stays fixed. That mirrors real client traffic, where many clients hit one service port.
Add --vary-dst-port to increment both, which spreads across a wider hash space.
Give --dst-ip a CIDR and destinations cycle across flows too:
Order
--flow-order sequential (the default) walks flows in order. --flow-order random scatters them, so consecutive packets land on different tuples.
“Random” is a fixed permutation, not randomness: a coprime stride derived from the golden ratio. The same config always produces the same order. You get scattering without losing reproducibility.
It’s deterministic
The same configuration always produces the same tuples in the same order. Two things follow:- A run is reproducible. Same flags today and next week, same packets.
- Queue count doesn’t change the traffic. Queue q of Q takes flow q and steps by Q, so together they cover every flow exactly once per cycle. Changing
--queueschanges which queue carries a flow, never which flows exist. If there are fewer flows than queues, the modulo folds them back so every queue stays busy.
--queues safe to use as an experimental variable. See finding your max rate.
Working out the next-hop MAC
Wireblast needs a destination MAC before it can send anything. It works one out from your routing and neighbour tables, and if it can’t, it stops and tells you why. It never falls back to broadcast, because flooding every port in the broadcast domain is not a reasonable thing to do by accident. The review screen shows which branch it took:When it stops
Each failure names the fix.The destination did not answer ARP
The destination did not answer ARP
--dst-mac.The route leaves through a different interface
The route leaves through a different interface
A CIDR destination spanning many hosts
A CIDR destination spanning many hosts
Split routing
Split routing
IPv6
Everything above works for IPv6. Give--dst-ip and --src-ip IPv6 addresses and Wireblast builds IPv6 frames; give --dst-ip an IPv6 prefix and destinations cycle across it just like a v4 CIDR.
- No addresses are reserved. IPv6 has no network or broadcast address, so every address in the prefix is used, including the first one.
- Frames start a little larger. The IPv6 header is 40 bytes rather than 20, and the UDP checksum is mandatory, so the smallest frame is 66 bytes for UDP and 78 for TCP (four more with a VLAN tag).
Source addressing
--src-ip defaults to an address of the chosen interface. If the interface has several, Wireblast picks one and says which:
--src-mac defaults to the interface’s own hardware address, and you can override it if you’re testing MAC learning or filtering.