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