21

I'd like to simulate a high-latency, low-bandwidth network connection on my Linux machine.

Limiting bandwidth has been discussed before, e.g. here, but I can't find any posts which address limiting both bandwidth and latency.

I can get either high latency or low bandwidth using tc. But I haven't been able to combine these into a single connection. In particular, the example rate control script here doesn't work for me:

# tc qdisc add dev lo root handle 1:0 netem delay 100ms 
# tc qdisc add dev lo parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
RTNETLINK answers: Operation not supported

How can I create a low-bandwidth, high-latency connection, using tc or any other readily-available tool?

2
  • 1
    have you tried combining approaches from your links, eg. use tc for latency and trickle for bandwidth? (It's uglier than just using tc, but might still work;)
    – Andy
    May 31, 2010 at 5:35
  • That's a good idea (and, indeed, trickle will even add latency), but unfortunately Firefox doesn't load under trickle, and that's what I need to test.
    – Justin L.
    May 31, 2010 at 19:01

2 Answers 2

15

Aha! It works if we reverse the order of the commands.

tc qdisc add dev lo root handle 1: htb default 12 
tc class add dev lo parent 1:1 classid 1:12 htb rate 20kbps ceil 20kbps 
tc qdisc add dev lo parent 1:12 netem delay 1000ms 

https://lists.linux-foundation.org/pipermail/netem/2010-May/001388.html

3
  • Anyone interested as to why, it seems that the netem qdisc cannot be a parent, so you have to rearrange the hierarchy to have it as a leaf node.
    – Andy
    Jun 2, 2010 at 6:32
  • 3
    Note that the bandwidth limit is in one direction only (outgoing). You have to do additional work to make it happen in both directions (apparently using ifb). linuxfoundation.org/collaborate/workgroups/networking/… Nov 30, 2012 at 6:37
  • Came across this when trying to grok tc. From what I've read the first line creates 1:0, but the second line refers to 1:1? (probably my understanding which is wrong - but I've peered at lots of pages trying to understand how classes/qtdiscs are numbered)
    – symcbean
    Apr 8, 2013 at 22:03
1

It's not free, but the Charles Web Debugging Proxy can simulate low bandwidth high latency connections

http://www.charlesproxy.com/documentation/proxying/throttling/

3
  • Interestingly enough, I'm actually doing this for web debugging. But surely there must be a way to do this without spending money. :)
    – Justin L.
    May 31, 2010 at 5:26
  • Sadly Charles doesn't seem to work with local traffic. It dies when I try to access 192.168.1.1 through the proxy.
    – Justin L.
    May 31, 2010 at 7:15
  • 2
    Or just use WANEm, for free: wanem.sourceforge.net Jan 27, 2011 at 17:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.