TC="tc"
IFCONFIG="ifconfig"
if [ "$2" = "" ];
then
echo error
exit 1
fi
IF=$1
IFIN="ifb0"
case $2 in
start)
$TC qdisc del dev $IF root
$TC qdisc del dev $IF handle ffff: ingress
$TC qdisc del dev $IFIN root
BW=$3
if [ "$BW" != "0" -a "$BW" != "-1" ]
then
BW=$BW"bit"
$TC qdisc add dev $IF root handle 1: htb default 10
$TC class add dev $IF parent 1: classid 1:1 htb rate $BW
$TC class add dev $IF parent 1:1 classid 1:10 htb rate $BW
fi
BWIN=$4
if [ "$BWIN" != "0" -a "$BWIN" != "-1" ]
then
BWIN=$BWIN"bit"
$IFCONFIG $IFIN up
$TC qdisc add dev $IF handle ffff: ingress
$TC qdisc add dev $IFIN root handle 1: htb default 10
$TC class add dev $IFIN parent 1: classid 1:1 htb rate $BWIN
$TC class add dev $IFIN parent 1:1 classid 1:10 htb rate $BWIN
$TC filter add dev $IF parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $IFIN
fi
;;
stop)
$TC qdisc del dev $IF root
$TC qdisc del dev $IF handle ffff: ingress
$TC qdisc del dev $IFIN root
$IFCONFIG $IFIN down
;;
update)
BW=$3
if [ "$BW" = "" ]
then
echo error
exit 1;
fi
BW=$BW"bit"
$TC class change dev $IF parent 1: classid 1:1 htb rate $BW
$TC class change dev $IF parent 1:1 classid 1:10 htb rate $BW
;;
*)
echo error
exit 1
;;
esac
exit 0