bwctl is a very useful tool to run a number of network testing tools. It ensures that only one test is running at a time. bwctl is a wrapper for a number of tools such as iperf / iperf3, nuttcp, ping, owping, traceroute, and tracepath. You need to install both bwctl and the tools the bwctl runs on test endpoints. By default bwctl runs iperf.

There are a number of public bwctl servers you can run a test to. ESnet bwctl servers are open to the entire R&E community.

Sample bwctl commands
bwctl -c receive_host This will use your host as the sender, and run a 10 second iperf3 test.
bwctl -c receive_host -t 30 -i 2
This will use your host as the sender, run a 30 second test, and show output every 2 secs (instead of the default of 1 sec).
bwctl -c receive_host:55555 -t 30 -w 64M
This will run the same test, but will connect to the bwctl daemon on the remote host that is running on the non-standard port 55555 (more on ports below). The TCP window will be 64MB.
bwctl -c receive_host -s send_host -t 30 
This is very useful if you are not logged into one of the two endpoints. It runs a 30 second test from send_host to recv_host.
bwctl -L 1000 -c receive_host 
By default bwctl exits if it can not get a test slot within 5 minutes. Use the -L flag for heavily used servers where you might have to wait longer.
bwctl -T iperf2 -c receive_host -s send_host -i 1 -u -b 500M Use iperf2 instead of iperf2, and do a 500Mbps UDP test.
bwctl -c receive_host -T nuttcp
run nuttcp instead of iperf3
bwctl -c receive_host -s send_host -O 5 -t 20
Use iperf3 instead of iperf, and omit the first 5 seconds of a 20 second test (removes TCP slowstart)
bwctl -4 -c receive_host -s send_host Force test to use IPv4 instead of IPv6
Sample BWPING commands
bwping -s send_host -c receive_host run a ping from host A to host B
bwping -T owamp -s send_host-c receive_host -N 1000 -i .01 run owping from host A to host B, sending 1000 packets, spaced .01 seconds apart.
bwping -E -c run a ping to a host not running bwctld
Sample bwtraceroute commands
bwtraceroute -c receive_host -s send_host run a tracetroute from host A to host B
bwtraceroute -T tracepath -c receive_host -l 8192 -s send_host run a tracepath from host A to host B, using a packet size of 8192 bytes. This will help find MTU issues.

bwtraceroute -E -s send_host -c receive host

Run a traceroute from a bwctl host to a non-bwctl host


The main bwctl control port is 4823. Make sure all these ports are not blocked by any firewalls. In a firewalled environment you may need to create a file $HOME/.bwctlrc that contains the following:

# ESnet runs iperf on these ports 
# make sure your site firewall is configured to allow these 
iperf_ports 5001-5300
iperf3_ports 5001-5300
# ESnet's bwctld is configured to use these ports
# make sure they are open too
peer_port 6001-6050
# if iperf is not installed in /usr/bin, specify location here
iperf_path /path/to/iperf


For more information see the bwctl homepage.