#!/bin/sh
# last update 26.02.2003
TOTAL=575Kbit

echo "delete!"
tc qdisc del dev eth0 root 2> /dev/null > /dev/null

echo "qdisc..."
tc qdisc add dev eth0 root handle 1: htb default 99 r2q 1

#parent
tc class add dev eth0 parent 1: classid 1:1 htb rate $TOTAL ceil $TOTAL

#ssh
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 32Kbit ceil $TOTAL prio 2

#vnc+rdc
#tc class add dev eth0 parent 1:1 classid 1:4 htb rate 16Kbit ceil $TOTAL prio 2

#www
tc class add dev eth0 parent 1:1 classid 1:5 htb rate 128Kbit ceil $TOTAL prio 1 burst 40k

#telnet
#tc class add dev eth0 parent 1:1 classid 1:6 htb rate 16Kbit ceil $TOTAL prio 2

#ACK+SYN+FIN+RST+ICMP+DNS
tc class add dev eth0 parent 1:1 classid 1:60 htb rate 64Kbit ceil 64kbit prio 0

#MSN&YM+IRC
tc class add dev eth0 parent 1:1 classid 1:8 htb rate 64Kbit ceil $TOTAL prio 1


#ICMP
#tc class add dev eth0 parent 1:1 classid 1:70 htb rate 32Kbit ceil 32Kbit # prio 1

#DNS
#tc class add dev eth0 parent 1:1 classid 1:71 htb rate 32Kbit ceil 32Kbit # prio 2

#Counter
tc class add dev eth0 parent 1:1 classid 1:72 htb rate 240Kbit ceil 240Kbit prio 0

#default
tc class add dev eth0 parent 1:1 classid 1:99 htb rate 32Kbit ceil $TOTAL prio 3

#tc qdisc add dev eth0 parent 1:99 handle 99: sfq perturb 1
tc qdisc add dev eth0 parent 1:5 handle 5: sfq perturb 3
#tc qdisc add dev eth0 parent 1:6 handle 6: sfq perturb 1

echo "filters..."
#rdc
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport \
  3389 0xffff flowid 1:3
#vnc
#tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport \
#  445 0xffff flowid 1:3
#telnet
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport \
  23 0xffff flowid 1:3
#ssh sport
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport \
  22 0xffff flowid 1:3
#ssh dport
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dport \
  22 0xffff flowid 1:3
#www
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport \
  80 0xffff flowid 1:5
#HTTPS
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport \
 443 0xffff flowid 1:5
#YM
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport \
  5050 0xffff flowid 1:8
#MSN
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport \
  1863 0xffff flowid 1:8
#IRC
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport \
  6667 0xffff flowid 1:8
#MSN Transfer
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport \
  6891 0xffff flowid 1:8

#DNS
tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
  match ip dport 53 0xff \
  flowid 1:60
#Counter
#tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
#  match ip dport 27005 0xffff \
#  flowid 1:72
#tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
#  match ip dport 27015 0xffff \
#  flowid 1:72
tc filter add dev eth0 parent 1:0 protocol ip prio 0 handle 1 fw classid 1:72
#ICMP
tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
  match u8 0x01 0xff at 9 \
  flowid 1:60

#ACK
tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
  match ip protocol 6 0xff \
  match u8 0x05 0x0f at 0 \
  match u8 0x10 0x10 at 33 \
  match u16 0x0000 0xffc0 at 2 \
  flowid 1:60

#SYN
tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
  match ip protocol 6 0xff \
  match u8 0x05 0x0f at 0 \
  match u8 0x02 0x02 at 33 \
  match u16 0x0000 0xffc0 at 2 \
  flowid 1:60

#FIN
tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
  match ip protocol 6 0xff \
  match u8 0x05 0x0f at 0 \
  match u8 0x01 0x01 at 33 \
  match u16 0x0000 0xffc0 at 2 \
  flowid 1:60

#RST
tc filter add dev eth0 parent 1: protocol ip prio 0 u32 \
  match ip protocol 6 0xff \
  match u8 0x05 0x0f at 0 \
  match u8 0x04 0x04 at 33 \
  match u16 0x0000 0xffc0 at 2 \
  flowid 1:60