Установка модуля IPMARK для iptables в Debian Squeeze и shaper tc без нагрузки на процессор

Режу я скорость клиентам с помощью tc в Linux.
Входящая для клиента режется на ppp интерфейсах, поэтому там не много фильтров и это не грузит процессор.
А вот исходящую клиента приходилось резать на eth1 смотрящем во внешнюю сторону. Для этого приходилось вешать много фильтров tc на один интерфейс. Последствия были весьма плачевны для процессоров, нагрузка была запредельной, поэтому я около года вообще не резал исходящую для клиентов скорость, дал общий канал применил sfq чтоб делилась поровну и жили не тужили так, пока жизнь всё-таки не заставила резать исходящую. О причинах рассказывать не стану, не в этом суть, но необходимость появилась. К моему счастью после не долгих копаний в инете нашел то что мне нужно. модуль IPMARK в iptables.
Установка IPMARK:

# aptitude update
# aptitude install module-assistant xtables-addons-source xtables-addons-common
# m-a prepare
# m-a auto-install xtables-addons-source
# depmod -a

после этого добавляем правило, чтоб метить нужные пакеты для зарезки скорости

iptables -t mangle -A POSTROUTING -o eth1 -j IPMARK --addr=src --and-mask=0xffff --or-mask=0x10000

--addr - может иметь 2 значения src и dst, говорит о том какие адреса метим отправителя или получателя
--and-mask=0xffff - метим на основании последних двух октетов
--or-mask=0×10000 - указывает на 1-ую родительскую дисциплину

например адрес 172.16.151.83 пометится в 16-тиричной системе 9753
151 - это 97 (hex)
83 - это 53 (hex)
а адрес
172.16.146.58 как 923a
146 - 92 (hex)
58 - 3a (hex)

после этого добавляя фильтр типа

tc filter add dev eth1 parent 1:0 protocol ip fw

и класс
tc class replace dev eth1 parent 1: classid 1:9753 htb rate 1024kbit burst 100k cburst 100k prio 1
tc class replace dev eth1 parent 1: classid 1:923a htb rate 2048kbit burst 100k cburst 100k prio 1

всё работает. при этом имеем в фильтрах всего одно правило.
классы добавляем на каждого клиента при подключении его по ppp
и удаляем при отключении
с помощью сриптов добавленных в каталоги
/etc/ppp/ip-up.d
/etc/ppp/ip-down.d
/etc/ppp/auth-up.d
/etc/ppp/auth-down.d
кому уж как нравится зависит от конкретной ситуации.

перевожу я в шестнацетиричную таким способом.
не забываем про нолик если октет меньше 16-ти =)

okt3=`printf "%x\n" $(echo $IP | awk -F. {'print $3'})`
okt4=`printf "%x\n" $(echo $IP | awk -F. {'print $4'})`
if [ `echo $IP | awk -F. {'print $3'}` -lt "16" ]; then
  okt3=0$okt3
fi
if [ `echo $IP | awk -F. {'print $4'}` -lt "16" ]; then
  okt4=0$okt4
fi
 
# добавляем класс
tc class replace dev $IF_OUT parent 1: classid 1:$okt3$okt4 htb rate $5kbit burst 100k cburst 100k prio 1
 
# удаляем класс
tc class del dev $IF_OUT parent 1: classid 1:$okt3$okt4