N.Leiten 89 Posted 2005-09-04 20:07:39 Share Posted 2005-09-04 20:07:39 В общем облазил уже все, обчитал везде... Повсюду пишут как добавлять фильтр, какие параметры можно указывать - но нигде не нашел как удалить только один фильтр. Подробнее: Делаем корневую дисциплину tc qdisc add dev eth0 root handle 1: htb default 1 Для нее создаем класс (для нас он будет корневым - к нему остальные подцепим и он будет по-умалчанию выбран, если не подойдет ни к одному фильтру) tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit Создаем классы с нужными скоростями и цепляем их к верхнему tc class add dev eth0 parent 1:1 classid 1:2 htb rate 192kbit tc class add dev eth0 parent 1:1 classid 1:3 htb rate 128kbit tc class add dev eth0 parent 1:1 classid 1:4 htb rate 64kbit Для каждого класса определяем дисциплину и метод шейпинга пакетов tc qdisc add dev eth0 parent 1:2 handle 2: sfq perturb 10 tc qdisc add dev eth0 parent 1:3 handle 3: sfq perturb 10 tc qdisc add dev eth0 parent 1:4 handle 4: sfq perturb 10 Создаем фильтры (если пакет идет на определенный айпи - задерживаем согласну классу) tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.0.1 flowid 1:2 tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.0.2 flowid 1:3 tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.0.3 flowid 1:4 Теперь самое главное. Когда я хочу удалить один фильтр - посылает матом либо очищает всю таблицу фильтров. Вот что я ему пишу: tc filter del dev eth1 parent 1: protocol ip prio 1 u32 match ip dst 192.168.0.1 flowid 1:2 или tc filter del dev eth1 parent 1: protocol ip prio 1 u32 flowid 1:2 или tc filter del dev eth1 parent 1: protocol ip prio 1 u32 match ip dst 192.168.0.1 - Происходит полная очистка от всех фильтров Когда пытаюсь удалить класс, на который ссылается фильтр - посылает в далекие края - мол устройство занято (логично предположить, что занято оно именно фильтром) Пару раз выдавало ошибку - что-то вроде укажите тип фильтра, с этим понятно - переключатель u32 и является его типом (читает первые 32 байта пакета, в которых и есть наши адреса источника и получателя). Вопрос, что такое handle FILTERID (из хелпа по фильтрам взял)? Или кто знает как по отдельности удалять фильтры - ну не хочу я делать двойные классы (чтоб каждый фильтр приклерплять к своему классу) - да и сложно это будет прописать, если вообще возможно... Link to post Share on other sites
N.Leiten 89 Posted 2005-09-05 07:32:45 Author Share Posted 2005-09-05 07:32:45 Насчет handle FILTERID вопрос снимаю... писал ночью - не вспомнил вовремя, что написал Link to post Share on other sites
N.Leiten 89 Posted 2005-09-05 19:47:55 Author Share Posted 2005-09-05 19:47:55 В общем методом научного тыка был обнаружен ответ на мой вопрос: При выводе списка фильтров есть такой параметр handle, в моему случае он был равен 802::800 вот его стоит указать при удалении и нужный фильтр отправляется в небытие. Осталось определить зависимость этого номера от самого фильтра и класса в который он направляет пакет. Link to post Share on other sites
Dr.Techno 0 Posted 2005-09-06 09:42:19 Share Posted 2005-09-06 09:42:19 а add на del менять не пробовали? Link to post Share on other sites
N.Leiten 89 Posted 2005-09-06 13:53:27 Author Share Posted 2005-09-06 13:53:27 Гы, если б работало - не спрашивал... Меняешь на дел и очищается вся цепочка - писал в начале обсуждения... Кстати, что-то редко в аське появляешься... не авторизировал меня. Я уже и сам забыл по какому вопросу хотел поговорить (что-то о свитчах). Link to post Share on other sites
Ruerick 0 Posted 2007-01-12 00:00:28 Share Posted 2007-01-12 00:00:28 Ну что, найден ли выход из этой ситуации? сам стучусь лбом туда же Link to post Share on other sites
deep_admin 1 Posted 2007-01-12 09:48:36 Share Posted 2007-01-12 09:48:36 тоже бьюсь, рез-т пока отрицательный, есть подозрение в ошибках самой утилиты tc, вообщем надо смотреть ее исходники Link to post Share on other sites
Ruerick 0 Posted 2007-01-12 13:51:15 Share Posted 2007-01-12 13:51:15 http://mailman.ds9a.nl/pipermail/lartc/2006q3/019431.html это непосредственно в майл-листе у разработчиков. т е предлагают перезапускать всю таблицу. но мне как и автору мессаги в этом урле такой подход не устраивает. (у меня все в динамике, и отслеживать кто жив кто нет через mysql в ip-up и ip-down слишком долго и что важнее - слишком ненадежно) тоже пошел по пути регекспа tc filter show, вычленения оттуда хэндла по имеющемуся флоу-айди и запуска той же команды которую я давал в tc filter add блаблабла с хэндлом : tc filter del блаблабла handle хэн::дл ... вот такой секс ... ... но - работает!... Link to post Share on other sites
N.Leiten 89 Posted 2007-01-13 08:38:24 Author Share Posted 2007-01-13 08:38:24 Я-то давно сделал... Правда кривовато получается Там по хэндлу смотреть нужно. Но он его назначает сам и в произвольном порядке. То есть предварительно его прочесть надобно, а потом удалять... Все детали можете посмотреть в скриптах flexshape http://flexshape.narod.ru PS. Ответ хранится в третьем посте этого треда Link to post Share on other sites
Ruerick 0 Posted 2007-01-13 10:48:22 Share Posted 2007-01-13 10:48:22 Да я сам накатал подобный скрипт (точнее два - ip-up и ip-down , у меня все это в pptp и pppoe потому что задействуется) на тикле, если надо, могу поделится. просто хотелось бы чегото более прямого чем регекспить список текущих фильтров и удалять потом. глюков у себя пока не заметил особо. но все равно, дело не в глюках, дело в том что из за отсутствия возможности както по простому удалять фильтр приходится городить монструозный скрипт на ровном месте... Link to post Share on other sites
Ruerick 0 Posted 2007-01-13 11:38:43 Share Posted 2007-01-13 11:38:43 а в чем, если не секрет, кривоватость (на практике)? Link to post Share on other sites
paul@1 0 Posted 2007-03-29 14:22:54 Share Posted 2007-03-29 14:22:54 Долго искал в Интернете как удалить отдельный фильтр, но вы, господа, меня простите... Он удаляется командой вида: tc filter del dev ethX parent X: protocol ip prioX handle X::X u32 X - это ваши значения. Т.е. ничего общего с тем, что обсуждается на форуме. Link to post Share on other sites
N.Leiten 89 Posted 2007-03-29 21:16:38 Author Share Posted 2007-03-29 21:16:38 paul@1 Простите, в чем ваш ответ оригинальней моего ответа в третьем посте? (вопрос риторический, ответа не требует) ЗЫ. Ответ уже давно получен. Прошу модераторов закрыть эту тему, дабы не флудить больше. Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now