RATEUP=380
WAN=${WAN:-eth0.1}
insmod sch_htb
insmod sch_sfq
insmod cls_u32
insmod cls_fw

# clear mangle
iptables -t mangle -F
iptables -t mangle -X
# clear qdiscs
tc qdisc del dev ${WAN} root

# set queuelen
ifconfig $WAN txqueuelen 10

# set up marking
# MARK wii packets 13 (prio 2)
#iptables -t mangle -A PREROUTING -s 192.168.1.51 -j MARK --set-mark 13
iptables -t mangle -N OUTSHAPING
iptables -t mangle -A POSTROUTING -o $WAN -j OUTSHAPING

# MARK google voice chat packets 13 (prio 2)
#iptables -t mangle -A OUTSHAPING -m multiport -p udp \
#  --dports 19305:19309 -j MARK --set-mark 13
#iptables -t mangle -A OUTSHAPING -m multiport -p tcp \
#   --dports 19305:19309 -j MARK --set-mark 13 
   
# MARK ACKs 14 (prio 2)
iptables -t mangle -A OUTSHAPING \
  -p tcp --tcp-flags URG,ACK,PSH,RST,SYN,FIN ACK \
  -m length --length 20:64 -j MARK --set-mark 13

tc qdisc add dev $WAN root handle 1: stab overhead 28 linklayer atm mtu 1600 htb default 11
tc class add dev $WAN parent 1: classid 1:1 htb rate ${RATEUP}kbit ceil ${RATEUP}kbit 
tc class add dev $WAN parent 1:1 classid 1:10 htb rate 12kbit ceil ${RATEUP}kbit prio 0 quantum 1500
tc class add dev $WAN parent 1:1 classid 1:11 htb rate 200kbit ceil ${RATEUP}kbit prio 2 quantum 3000
tc class add dev $WAN parent 1:1 classid 1:12 htb rate 20kbit ceil $(expr ${RATEUP} \* 98 / 100)kbit prio 3 quantum 1500
tc class add dev $WAN parent 1:1 classid 1:13 htb rate 150kbit ceil ${RATEUP}kbit prio 1 quantum 4500 burst 25kbit

tc qdisc add dev $WAN parent 1:10 handle 10: sfq perturb 2
tc qdisc add dev $WAN parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev $WAN parent 1:12 handle 12: sfq perturb 20
tc qdisc add dev $WAN parent 1:13 handle 13: sfq perturb 10

# interactive traffic in flow 1:10 (lowest latency, low bandwidth)
tc filter add dev $WAN parent 1:0 protocol ip prio 1 u32 match ip tos 0x10 0xff flowid 1:10

# TCP control in flow 1:13 (low latency)
tc filter add dev $WAN parent 1:0 protocol ip prio 3 handle 13 fw classid 1:13

# bulk traffic (backups) in flow 1:12 (lowest prio)
tc filter add dev $WAN parent 1:0 protocol ip prio 2 u32 match ip tos 0x08 0xff flowid 1:12

# everything else goes to 11 (set as default on root)
