Перейти до

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


Рекомендованные сообщения

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

 

Подробнее:

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

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 (из хелпа по фильтрам взял)?

Или кто знает как по отдельности удалять фильтры - ну не хочу я делать двойные классы (чтоб каждый фильтр приклерплять к своему классу) - да и сложно это будет прописать, если вообще возможно...

Ссылка на сообщение
Поделиться на других сайтах

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

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

Ссылка на сообщение
Поделиться на других сайтах

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

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

Ссылка на сообщение
Поделиться на других сайтах
  • 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 хэн::дл

... вот такой секс ...

... но - работает!...

Ссылка на сообщение
Поделиться на других сайтах

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

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

http://flexshape.narod.ru

 

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

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
  • 2 months later...

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

 

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

 

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

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

Ссылка на сообщение
Поделиться на других сайтах

paul@1

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

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...