#/bin/sh
# Wonder Shaper
# please read the README before filling out these values
#
# Set the following values to somewhat less than your actual download
# and uplink speed. In kilobits. Also set the device that is to be shaped.
if [ "$1" = "status" ]
then
echo "[qdisc br0]"
/usr/sbin/tc -s qdisc show dev br0
echo "[qdisc vlan1]"
/usr/sbin/tc -s qdisc show dev vlan1
echo "[class br0]"
/usr/sbin/tc -s class show dev br0
echo "[class vlan1]"
/usr/sbin/tc -s class show dev vlan1
echo "[filter br0]"
/usr/sbin/tc -s filter show dev br0
echo "[filter vlan1]"
/usr/sbin/tc -s filter show dev vlan1
exit
fi
# clean existing down- and uplink qdiscs, hide errors
/usr/sbin/tc qdisc del dev br0 root 2> /dev/null > /dev/null
/usr/sbin/tc qdisc del dev br0 ingress 2> /dev/null > /dev/null
/usr/sbin/tc qdisc del dev vlan1 root 2> /dev/null > /dev/null
/usr/sbin/tc qdisc del dev vlan1 ingress 2> /dev/null > /dev/null
if [ "$1" = "stop" ]
then
exit
fi
if [ "$1" = "start" ]
then
# install root HTB, point default traffic to 1:99
/usr/sbin/tc qdisc add dev br0 root handle 1:0 htb default 99
# root class 1
/usr/sbin/tc class add dev br0 parent 1:0 classid 1:1 htb rate 100mbit
# router traffic subslass 2 (router IP=192.168.15.1)
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:2 htb rate 100mbit ceil 100mbit
/usr/sbin/tc qdisc add dev br0 parent 1:2 handle 2: sfq perturb 2
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.1 flowid 1:2
# internet traffic subclass 10
/usr/sbin/tc class add dev br0 parent 1:1 classid 1:10 htb rate 100mbit ceil 100mbit
# internet traffic subclasses 12, 13,... for each client IP
/usr/sbin/tc class add dev br0 parent 1:10 classid 1:12 htb rate 512kbit ceil 100mbit burst 6k prio 10
/usr/sbin/tc class add dev br0 parent 1:10 classid 1:13 htb rate 128kbit ceil 100mbit burst 6k prio 20
/usr/sbin/tc class add dev br0 parent 1:10 classid 1:14 htb rate 128kbit ceil 100mbit burst 6k prio 30
# creating quques for each class
/usr/sbin/tc qdisc add dev br0 parent 1:12 handle 12: sfq perturb 2
/usr/sbin/tc qdisc add dev br0 parent 1:13 handle 13: sfq perturb 2
/usr/sbin/tc qdisc add dev br0 parent 1:14 handle 14: sfq perturb 2
#sending traffic from clinet's IP's to classes
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.8 flowid 1:12
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.10 flowid 1:13
/usr/sbin/tc filter add dev br0 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.55 flowid 1:14
# install root HTB, point default traffic to 1:99
/usr/sbin/tc qdisc add dev vlan1 root handle 1:0 htb default 99
# root class 1
/usr/sbin/tc class add dev vlan1 parent 1:0 classid 1:1 htb rate 100mbit
# router traffic subslass 2 (router IP=192.168.15.1)
/usr/sbin/tc class add dev vlan1 parent 1:1 classid 1:2 htb rate 100mbit ceil 100mbit
/usr/sbin/tc qdisc add dev vlan1 parent 1:2 handle 2: sfq perturb 2
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip dst 192.168.15.1 flowid 1:2
# internet traffic subclass 10
/usr/sbin/tc class add dev vlan1 parent 1:1 classid 1:10 htb rate 100mbit ceil 100mbit
# internet traffic subclasses 12, 13,... for each client IP
/usr/sbin/tc class add dev vlan1 parent 1:10 classid 1:12 htb rate 512kbit ceil 100mbit burst 6k prio 10
/usr/sbin/tc class add dev vlan1 parent 1:10 classid 1:13 htb rate 128kbit ceil 100mbit burst 6k prio 20
/usr/sbin/tc class add dev vlan1 parent 1:10 classid 1:14 htb rate 128kbit ceil 100mbit burst 6k prio 30
# creating quques for each class
/usr/sbin/tc qdisc add dev vlan1 parent 1:12 handle 12: sfq perturb 2
/usr/sbin/tc qdisc add dev vlan1 parent 1:13 handle 13: sfq perturb 2
/usr/sbin/tc qdisc add dev vlan1 parent 1:14 handle 14: sfq perturb 2
# sending traffic from clinet's IP's to classes
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.8 flowid 1:12
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.10 flowid 1:13
/usr/sbin/tc filter add dev vlan1 parent 1: protocol ip prio 10 u32 match ip src 192.168.15.55 flowid 1:14
fi