Occasionally it's necessary to determine the affects of reduced network bandwidth. Authoring software that works for a networked system backed by Gigabit Ethernet as well as DSL requires testing on both forms of systems. The alternative is to test on the most capable networking system and then test lower-bandwidth systems on the same network by artificially limiting the bandwidth.
Consulting the all-knowing Google provided a couple general options: trickle and wondershaper. While there are other utilities, I mainly focused on these two.
Trickle is a 'lightweight user bandwidth shaper', it's particular value is the ability to limit processes independently and it doesn't require superuser privileges.
$ sudo apt-get install trickle
You can limit uploads and downloads to 100 KB/s for a command such as;
$ trickle -u 100 -d 100 wget http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_stereo.ogg
Independently, you could specify alternative limits for another command. Trickle is limited to TCP sockets so if you need to limit bandwidth for UDP sockets you'll need to look for an alternative. Applying system-wide bandwidth, TCP in this case, supposedly is supported via trickled daemon utility but after numerous hours I gave up on getting it to work. Regardless, I abandoned it's use not only because I couldn't get it to work but also it's limitation to TCP and applying the daemon and client command required prepending 'trickle' to the command line. This would disqualify applying the network bandwidth constraints to network services like sshd and such without modifying each service starting the process.
Seeking a system-wide bandwidth traffic shaper brought me back to Wondershaper once again. My first experience with wondershaper I found it didn't always work, this round I tested the usage 1-10 Mbps and I quickly found that it limited the bandwidth like expected until reaching 10 Mbps where it jumped to realized bandwidth of 40 Mbps. Head-scratcher; working fine for bandwidths under 10Mbps but broke at >= 10Mbps. Consulting Google again brought me to a fix proposed by 'buzzy'; https://github.com/magnific0/wondershaper/issues/2. Modifying the wondershaper script as 'buzzy' indicated resolved the issue and I could consistently specify bandwidths 1-40 Mbps and observe realized bandwidths accordingly.
$ cat go #!/bin/bash for i in `seq 1 50`; do echo "$i Mbps" K=`expr $i \* 1024` sudo wondershaper wlan0 $K $K iperf -t 10 -c 192.168.1.132 2> /dev/null | grep "Mbits/sec" sleep 2 done sudo wondershaper wlan0 clear
[ 3] 0.0-11.2 sec 1.38 MBytes 1.03 Mbits/sec
[ 3] 0.0-10.7 sec 2.62 MBytes 2.06 Mbits/sec
[ 3] 0.0-10.4 sec 3.75 MBytes 3.02 Mbits/sec
[ 3] 0.0-10.4 sec 5.00 MBytes 4.04 Mbits/sec
[ 3] 0.0-10.5 sec 5.12 MBytes 4.11 Mbits/sec
[ 3] 0.0-10.3 sec 7.38 MBytes 6.00 Mbits/sec
[ 3] 0.0-10.3 sec 8.50 MBytes 6.95 Mbits/sec
[ 3] 0.0-10.3 sec 9.75 MBytes 7.97 Mbits/sec
[ 3] 0.0-10.2 sec 10.6 MBytes 8.76 Mbits/sec
[ 3] 0.0-10.1 sec 12.0 MBytes 9.94 Mbits/sec
[ 3] 0.0-10.1 sec 13.2 MBytes 11.0 Mbits/sec
[ 3] 0.0-10.2 sec 14.5 MBytes 12.0 Mbits/sec
[ 3] 0.0-10.2 sec 15.5 MBytes 12.8 Mbits/sec
[ 3] 0.0-10.3 sec 16.1 MBytes 13.2 Mbits/sec
[ 3] 0.0-10.1 sec 16.4 MBytes 13.6 Mbits/sec
[ 3] 0.0-10.1 sec 19.0 MBytes 15.8 Mbits/sec
[ 3] 0.0-10.1 sec 19.8 MBytes 16.4 Mbits/sec
[ 3] 0.0-10.1 sec 21.1 MBytes 17.6 Mbits/sec
[ 3] 0.0-10.1 sec 22.1 MBytes 18.3 Mbits/sec
[ 3] 0.0-10.1 sec 23.1 MBytes 19.3 Mbits/sec...
While the use of WonderShaper requires superuser privileges, it limits the system network bandwidth in it's entirety. Enjoy.