Jump to content

Удаление одного фильтра из tc (filter)


Recommended Posts

В общем облазил уже все, обчитал везде... Повсюду пишут как добавлять фильтр, какие параметры можно указывать - но нигде не нашел как удалить только один фильтр.

 

Подробнее:

Делаем корневую дисциплину

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

В общем методом научного тыка был обнаружен ответ на мой вопрос:

При выводе списка фильтров есть такой параметр handle, в моему случае он был равен 802::800 вот его стоит указать при удалении и нужный фильтр отправляется в небытие. Осталось определить зависимость этого номера от самого фильтра и класса в который он направляет пакет.

Link to post
Share on other sites

Гы, если б работало - не спрашивал... Меняешь на дел и очищается вся цепочка - писал в начале обсуждения...

Кстати, что-то редко в аське появляешься... не авторизировал меня. Я уже и сам забыл по какому вопросу хотел поговорить (что-то о свитчах).

Link to post
Share on other sites
  • 1 year later...

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

Я-то давно сделал... Правда кривовато получается :) Там по хэндлу смотреть нужно. Но он его назначает сам и в произвольном порядке. То есть предварительно его прочесть надобно, а потом удалять...

Все детали можете посмотреть в скриптах flexshape

http://flexshape.narod.ru

 

PS. Ответ хранится в третьем посте этого треда :(

Link to post
Share on other sites

Да я сам накатал подобный скрипт

(точнее два - ip-up и ip-down , у меня все это в pptp и pppoe

потому что задействуется) на тикле, если надо, могу поделится.

просто хотелось бы чегото более прямого чем регекспить список

текущих фильтров и удалять потом.

глюков у себя пока не заметил особо.

но все равно, дело не в глюках, дело в том что из за отсутствия

возможности както по простому удалять фильтр приходится

городить монструозный скрипт на ровном месте...

Link to post
Share on other sites
  • 2 months later...

Долго искал в Интернете как удалить отдельный фильтр, но вы, господа, меня простите... Он удаляется командой вида:

 

tc filter del dev ethX parent X: protocol ip prioX handle X::X u32

 

X - это ваши значения.

Т.е. ничего общего с тем, что обсуждается на форуме.

Link to post
Share on other sites

paul@1

Простите, в чем ваш ответ оригинальней моего ответа в третьем посте?

(вопрос риторический, ответа не требует)

 

ЗЫ. Ответ уже давно получен. Прошу модераторов закрыть эту тему, дабы не флудить больше.

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...