#!/bin/bash IF0=eth0 IF1=eth2 function clear_tc() { tc qdisc del dev $IF0 root 2>/dev/null >/dev/null tc qdisc del dev $IF1 root 2>/dev/null >/dev/null } if [ "$1" == "clear" ] ; then clear_tc exit fi if [ $# -lt "3" ] ; then echo "Usage: $0 [packet-loss]" echo "eg.: $0 2mbit 50ms 0ms" echo "eg.: $0 56kbit 100ms 10ms 0.8%" echo "" echo "or: $0 clear" exit fi DIST="distribution normal" if [ $3 == "0ms" ] ; then DIST="" fi LOSS="" if [ $# == "4" ] ; then #packetloss fails if the simulated bandwidth is to small #tc qdisc add dev $IF1 parent 1:1 netem loss $4 LOSS="loss $4" fi clear_tc tc qdisc add dev $IF0 root handle 1: tbf rate $1 buffer 100000 limit 300000 tc qdisc add dev $IF0 parent 1:1 handle 2: netem delay $2 $3 $DIST $LOSS tc qdisc add dev $IF1 root handle 1: tbf rate $1 buffer 100000 limit 300000 tc qdisc