#!/bin/sh # (c) Dinko Korunic, 2007. CEIL=$[1024*1024/100*80] PHYDEV="eth0 eth1" R2Q=$[125*${CEIL}/1024/1500] # status if [ "$1" = "status" ] then for DEV in $PHYDEV; do echo "Device $DEV" tc -s qdisc ls dev $DEV tc -s class ls dev $DEV done exit 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:0 htb default 15 tc class add dev $DEV parent 1:0 classid 1:1 htb rate ${CEIL}kbit # classes tc class add dev $DEV parent 1:1 classid 1:10 htb rate $[$CEIL/3]kbit ceil $[$CEIL/3]kbit burst 16k prio 0 tc class add dev $DEV parent 1:1 classid 1:11 htb rate $[$CEIL/3]kbit ceil $[$CEIL/4]kbit burst 20k prio 2 tc class add dev $DEV parent 1:1 classid 1:12 htb rate $[$CEIL/12]kbit ceil $[$CEIL/12]kbit burst 2k prio 3 tc class add dev $DEV parent 1:1 classid 1:13 htb rate $[$CEIL/12]kbit ceil $[$CEIL/12]kbit burst 2k prio 4 tc class add dev $DEV parent 1:1 classid 1:14 htb rate $[$CEIL/5]kbit ceil $[$CEIL/8]kbit burst 6k prio 1 tc class add dev $DEV parent 1:1 classid 1:15 htb rate $[$CEIL/4]kbit ceil $[$CEIL/8]kbit burst 2k prio 5 tc class add dev $DEV parent 1:1 classid 1:16 htb rate 5120kbit ceil 5120kbit prio 6 # leaves tc qdisc add dev $DEV parent 1:10 handle 100: pfifo limit 5 tc qdisc add dev $DEV parent 1:11 handle 110: pfifo limit 5 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 tc qdisc add dev $DEV parent 1:16 handle 160: 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 tc filter add dev $DEV parent 1:0 protocol ip prio 7 handle 7 fw classid 1:16 # legend # 1, 1:10 -> highest priority class: syn flag, ssh, telnet, dns, rtelnet, # telnets, ntp; prio 0 # 2, 1:11 -> bulk traffic: http, https, nntp, skype; prio 2 # 3, 1:12 -> Maximize-Throughput: ftp; prio 3 # 4, 1:13 -> other NAT's; prio 4 # 5, 1:14 -> Minimize-Cost: smtp, pop3, pop3s, imap4, imaps; prio 1 # 6, 1:15 -> unknown traffic; prio 5 # 7, 1:16 -> P2P services: kazaa, ed2k, torrent, etc.; prio 6 # end done