#!/bin/sh IF="dev ppp0" IFUP=63kbps P2PUP=50kbps qROOT="1:0" cMAIN="1:1" cHTB="1:88" cSKYPE="1:15" cDEFAULT="1:20" qHTB="10:0" cP2P="10:10" cEMULE="10:11" cFTP="10:12" cMIRANDA="10:13" cAPACHE="10:14" hSKYPE=115 hEMULE=111 hFTP=112 hMIRANDA=113 hAPACHE=114 MTU="1492" q1="quantum 1492" q2="quantum 2984" q3="quantum 4476" q5="quantum 7460" addc="tc class add $IF parent" addq="tc qdisc add $IF parent" addf="tc filter add $IF parent" fst="prio 1 protocol ip" qos_enable() { tc qdisc add $IF root handle $qROOT hfsc default 20 $addc $qROOT classid $cMAIN hfsc ls rate $IFUP ul rate $IFUP $addc $cMAIN classid $cHTB hfsc ls rate 20kbps ul rate $P2PUP $addc $cMAIN classid $cSKYPE hfsc rt umax $MTU dmax 30ms rate 10kbps $addc $cMAIN classid $cDEFAULT hfsc sc umax $MTU dmax 80ms rate 33kbps ul rate 42kbps $addq $cHTB handle $qHTB htb r2q 4 $addc $qHTB classid $cP2P htb rate $P2PUP mtu $MTU $addc $cP2P classid $cEMULE htb rate 16kbps ceil $P2PUP $q1 prio 4 $addc $cP2P classid $cFTP htb rate 10kbps ceil $P2PUP $q1 prio 3 $addc $cP2P classid $cMIRANDA htb rate 12kbps ceil $P2PUP $q1 prio 2 $addc $cP2P classid $cAPACHE htb rate 12kbps ceil $P2PUP $q1 prio 1 $addf $qROOT $fst handle $hSKYPE fw flowid $cSKYPE $addf $qROOT $fst handle $hEMULE fw flowid $cHTB $addf $qROOT $fst handle $hFTP fw flowid $cHTB $addf $qROOT $fst handle $hMIRANDA fw flowid $cHTB $addf $qROOT $fst handle $hAPACHE fw flowid $cHTB $addf $qHTB $fst handle $hEMULE fw flowid $cEMULE $addf $qHTB $fst handle $hFTP fw flowid $cFTP $addf $qHTB $fst handle $hMIRANDA fw flowid $cMIRANDA $addf $qHTB $fst handle $hAPACHE fw flowid $cAPACHE $addq $cEMULE handle 101: sfq perturb 10 $addq $cFTP handle 201: sfq perturb 10 $addq $cMIRANDA handle 301: sfq perturb 10 $addq $cAPACHE handle 401: sfq perturb 10 $addq $cSKYPE handle 501: sfq perturb 10 $addq $cDEFAULT handle 601: sfq perturb 10 } qos_disable() { tc qdisc del $IF root sleep 1 } qos_restart() { qos_disable qos_enable } case "$1" in start) echo "Enabling QoS..." qos_enable ;; stop) echo "Disabling QoS..." qos_disable ;; restart) echo "Restarting QoS... " qos_restart ;; *) echo "*** Usage: QoS {start|stop|restart}" ;; esac