1. ETH=$1
2. LATENCY=$2
3. LOSS=$3
4. JITTER=$4
5. BW=$5
6. sudo /sbin/tc qdisc del dev eth0 root
7. sudo /sbin/tc qdisc add dev eth0 root handle 1: netem delay $LATENCY
RTNETLINK answers :No such file or directory
comes for 2 reason.
tc qdisc
with wrong options sch_netem
is missingSo check first sch_netem
is installed in your machine by using command lsmod -l
. If it is missing install using command modprobe sch_netem
.
Even after installing sch_netem, if you get this same error means you are executing with wrong option. For example you can add a impairment on a network interface using ip qdisc add dev ...
. Similarly for removing this you can do ip qdisc delete dev...
. If you are trying to delete an impairment without any prior add means, then also you get this error. And also for wrong options also you get this error.
Your handles and parent handles don't match. e.g change to:
7. sudo /sbin/tc qdisc add dev eth0 root handle 1:1 netem delay $LATENCY $JITTER
8. sudo /sbin/tc qdisc add dev eth0 parent 1:1 handle 10:1 netem loss $LOSS
9. sudo /sbin/tc qdisc add dev eth0 parent 10:1 handle 20:1 htb default 1
10.sudo /sbin/tc class add dev eth0 parent 20:1 classid 0:1 htb rate $BW ceil $BW
and it should work.
I am running Fedora Core 27. In order to get the module installed, I had to use
sudo dnf install install kernel-modules-extra
That's not intuitively obvious.
The problem is with missing kernel modules and/or kernel support. Make sure you can run
modprobe sch_netem
I also had to rebuild the kernel after I enabled because there's something built-in that is enabled after you enable network emulation.
See also http://forums.fedoraforum.org/showthread.php?t=285408 and http://www.linuxfoundation.org/collaborate/workgroups/networking/netem