TC-HTB.SH
Zur Navigation springen
Zur Suche springen
#!/bin/bash
function tc-htb()
{
UPLINK=$3
DOWNLINK=$4
DEV=$2
case $1 in
start)
echo "clean existing down- and uplink qdiscs, hide errors"
tc qdisc del dev $DEV root > /dev/null 2>&1
tc qdisc del dev $DEV ingress > /dev/null 2>&1
echo set mangle tables
iptables -t mangle -D POSTROUTING -o $DEV -j prio-1 > /dev/null 2>&1
echo flush prio-1
iptables -t mangle -F prio-1 > /dev/null 2>&1
echo new prio-1
iptables -t mangle -N prio-1
echo add rule to prio-1
iptables -t mangle -A prio-1 -d 192.168.240.200 -j MARK --set-mark 10
echo jump to prio-1
iptables -t mangle -A POSTROUTING -o $DEV -j prio-1
echo install root HTB, point default traffic to 20
tc qdisc add dev $DEV root handle 1: htb default 20
echo shape everything at $UPLINK speed
tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}mbit
echo set low an high priority 40% 60% speed
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $((40*$UPLINK/100))mbit ceil ${UPLINK}mbit prio 1
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $((60*$UPLINK/100))mbit ceil ${UPLINK}mbit prio 2
echo mangle mark to classes
tc filter add dev $DEV protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
tc filter add dev $DEV protocol ip parent 1:0 prio 2 handle 20 fw flowid 1:20
echo all get stochastic fairness
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
echo ingress qdisc
tc qdisc add dev $DEV handle ffff: ingress
echo ingres filter
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNLINK}mbit burst 10k drop flowid :1
;;
stop)
echo delete mangle
iptables -t mangle -F prio-1
iptables -t mangle -D POSTROUTING -o $DEV -j prio-1
echo delete qdisc
tc qdisc del dev $DEV root 2> /dev/null > /dev/null
tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
;;
status)
tc -s qdisc ls dev $DEV
tc -s class ls dev $DEV
;;
*)
echo "$0 start DEV UP-MB DOWN-MB | stop | status DEV"
;;
esac
}