[РЕШЕНО, SOLVED] tc filter + iptables mark, почему-то не работает

Всем доброго времени суток!

Хочу построить шейпер на базе маркирования пакетов в iptables. Но, что странно, на одной машине у меня все работает, а на двух других - нет. Не пойму, в чем дело. Пробовал в качестве теста простенький пример. Что делаю:
1.
IPTABLES:
iptables -t mangle -A POSTROUTING -o eth0 -d 192.168.200.77 -j MARK --set-mark 0x2ff

2.
TC:
tc qdisc add dev eth0 root handle 1 r2q 3 default 0

tc class add dev eth0 parent 1: classid 1:2 htb rate 100Mbit
tc class add dev eth0 parent 1:2 classid 1:3 htb rate 256Kbit

tc filter add dev eth0 parent 1:0 protocol ip prio 100 handle 0x2ff fw classid 1:3

После последней команды выпадает сообщение:
RTNETLINK answers: Invalid argument.
We have an error talking to the kernel.

Странно - на одной машине все работает, а на двух других - нет. Ядра (в разделе QOS) - одинаковые.
Версии iproute2 одинаковые, --sync делал неделю назад.

Может, кто подскажет, где грабли?

Добавлю. На

Добавлю. На двух машинах одинаковые версии iproute2 и одинаковые конфиги ядра.
Различие только в архитектуре - i386 и x86_64.

На x86_64 - работает, на i386 - нет

alexpro пишет: tc

alexpro написал(а):
tc filter add dev eth0 parent 1:0 protocol ip prio 100 handle 0x2ff fw classid 1:3

Разобрался. Все оказалось просто, как дверь военкомата. Правда, пришлось заниматься трассировкой кода ядра, чтобы выловить, где именно вылезают грабли.
Грабли были в части процитированной команды: "prio 100"
На указанном выше x86_64 вообще не было установлено ни одного фильтра (потому все и работало), а на i386 фильтры были. prio 100 u32 match ip dst . Если prio изменить на любое другое значение, все работает. Выходит так, что если я уже применяю фильтры u32, то fw фильтр не может быть с тем же значением prio, что есть у u32. ИМХО, данные "грабли" заслуживают помещения в FAQ по iproute2.

Всем спасибо за внимание :)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".