#!/bin/sh # (c) Dinko Korunic, 2004. CEIL=$[102400/100*70] PHYDEV="eth0 eth1" R2Q=5 # status if [ "$1" = "status" ] then for DEV in $PHYDEV; do tc -s qdisc ls dev $DEV tc -s class ls dev $DEV exit done fi for DEV in $PHYDEV; do # clean tc qdisc del dev $DEV root 2> /dev/null > /dev/null tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null # initial setup tc qdisc add dev $DEV root handle 1: htb default 15 r2q ${R2Q} tc class add dev $DEV parent 1: classid 1:1 htb rate ${CEIL}kbit burst 4k # classes tc class add dev $DEV parent 1:1 classid 1:10 htb rate $[$CEIL/2]kbit ceil $[$CEIL/1]kbit burst 16k prio 0 tc class add dev $DEV parent 1:1 classid 1:11 htb rate $[$CEIL/4]kbit ceil $[$CEIL/3]kbit burst 12k prio 1 tc class add dev $DEV parent 1:1 classid 1:12 htb rate $[$CEIL/13]kbit ceil $[$CEIL/12]kbit burst 2k prio 2 tc class add dev $DEV parent 1:1 classid 1:13 htb rate $[$CEIL/13]kbit ceil $[$CEIL/12]kbit burst 2k prio 2 tc class add dev $DEV parent 1:1 classid 1:14 htb rate $[$CEIL/9]kbit ceil $[$CEIL/8]kbit burst 2k prio 3 tc class add dev $DEV parent 1:1 classid 1:15 htb rate $[$CEIL/9]kbit ceil $[$CEIL/8]kbit burst 2k prio 3 # fairness tc qdisc add dev $DEV parent 1:12 handle 120: sfq perturb 10 tc qdisc add dev $DEV parent 1:13 handle 130: sfq perturb 10 tc qdisc add dev $DEV parent 1:14 handle 140: sfq perturb 10 tc qdisc add dev $DEV parent 1:15 handle 150: sfq perturb 10 # classification tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10 tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11 tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12 tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13 tc filter add dev $DEV parent 1:0 protocol ip prio 5 handle 5 fw classid 1:14 tc filter add dev $DEV parent 1:0 protocol ip prio 6 handle 6 fw classid 1:15 # legend # 1, 1:10 -> highest priority class: ssh, telnet, dns, quake3, irc, SYN flag # 2, 1:11 -> bulk traffic: http, https # 3, 1:12 -> Maximize-Throughput # 4, 1:13 -> other NAT's # 5, 1:14 -> Minimize-Cost: mail, pop3, pop3s, imap, imaps # 6, 1:15 -> P2P services: kazaa, ed2k, torrent, etc. # end done