Кратенькое описание всего этого дела:
1. Создаем корни для qdisc и class
tc qdisc add dev $d root handle 1: htb default 23
tc class add dev $d parent 1: classid 1:1 htb rate ${RATE}kbit
Сие означает, что мы описали корневое устройство, которое будет пропускать 100Мбит
2. Создаем подчиненные классы для того, чтоб разбивать трафик по классам
tc class add dev $d parent 1:1 classid 1:23 htb rate $[$RATE]kbit prio 7
tc class add dev $d parent 1:1 classid 1:24 htb rate 56kbit prio 4
тут класс 1:23 имеет так же 100Мбит и высший приоритет, а 1:24 только 56kbit и средний приоритет.
3. Привязываем фильтры к этим классам (т.е. описания условий, по которым пакеты будут попадать в эти классы)
tc filter add dev $d parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
tc filter add dev $d parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
Тут как раз вступает в дело Firewall based classifier, по меткам "handle 23 fw" и "handle 24 fw" пакеты делятся по классам а эти метки 23 и 24 указываются в правилах iptables для нужных пакетов!
В данном примере для адреса 192.168.160.6 разрешили качать по http с меньшей скоростью.
Запускаем шейпер - /etc/init.d/shaper start - порно льется на 56К
Можно посмотреть статистику - /etc/init.d/shaper info