Network Condition Emulation

Page content

I was asked to today if it was possible to add latency and packet loss to a device in order to replicated network problems. After a while googleing i found tc +netem. This allows you do funcy stuff to replicated network problems. If i wanted to add 100ms of latency i could do

tc qdisc add dev eth0 root netem delay 100ms

You can also add variation

tc qdisc change dev eth0 root netem delay 100ms 10ms

This causes the added delay to be 100ms ± 10ms.

or even better

tc qdisc change dev eth0 root netem delay 100ms 10ms 25%

This causes the added delay to be 100ms ± 10ms with the next random element depending 25% on the last one.

If we also wanted to add packet loss we can do

tc qdisc change dev eth0 root netem loss 0.1%

This would cause 1 out of 1000 packets to be randomly dropped.

To emulate packet loss “in a row”

tc qdisc change dev eth0 root netem loss 0.3% 25%

This will cause 0.3% of packets to be lost, and each successive probability depends by a quarter on the last one.