Назад | Перейти на главную страницу

Фильтры хеширования TC - удаление одного правила

Для формирования трафика я сейчас использую установку, которая выглядит точно так же, как установка LARTC на этой странице:

http://lartc.org/howto/lartc.adv-filter.hashing.html

У меня с этим простая проблема - каждый раз, когда я хочу что-то изменить в хеш-таблице (например, назначить IP-адрес другому идентификатору потока), мне нужно удалить всю таблицу фильтров и добавить ее снова фильтровать по фильтру. (На самом деле я не делаю это вручную, у меня есть хорошая программа, которая делает это за меня ... но все же ...) Есть проблема - я получил примерно 10k фильтров, выделенных таким образом, и удаление и повторное заполнение всей таблицы фильтров может получиться довольно длинным, что не совсем хорошо для формирования трафика. Моя программа могла бы легко удалить только те правила, которые нужно удалить (таким образом, уменьшив всю проблему до нескольких команд и миллисекунд), но я просто не знаю команду, которая удаляет только одно правило хеширования.

Мой tc filter показывает:

filter parent 1: protocol ip pref 1 u32 
filter parent 1: protocol ip pref 1 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 1 u32 fh 2:a:800 order 2048 key ht 2 bkt a flowid 1:101 
  match 0a0a0a0a/ffffffff at 16
filter parent 1: protocol ip pref 1 u32 fh 2:c:800 order 2048 key ht 2 bkt c flowid 1:102 
  match 0a0a0a0c/ffffffff at 16
filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2: 
  match 00000000/00000000 at 16
    hash mask 000000ff at 16 

Команда wish: 'tc filter del ...', удаляющая только один специальный фильтр (например, соответствие IP 0a0a0a0a (IP-адрес 10.10.10.10)). Также было бы хорошо удалить небольшую подгруппу - например, я все еще мог бы довольно быстро воссоздать ведро (bkt a).

Мои попытки: я попытался пронумеровать все фильтры с помощью prio, но без помощи - они просто создают что-то непригодное для использования (но удаляемое) ниже, но фильтры с разделениями остаются там после того, как это удаляется.

Любые идеи?


edit - я добавляю упрощенное tl; dr описание проблемы:

  1. Я создал хэш-фильтр на каком-то интерфейсе, как в этом http://lartc.org/howto/lartc.adv-filter.hashing.html

  2. Я хочу найти команду, которая удаляет одно правило (например, 1.2.1.123) из таблицы, оставляя остальные нетронутыми и работающими.

Я знаю, что это старый пост, но я использую его, и, похоже, он работает хорошо:

Добавить фильтр:

tc filter add dev eth1 parent 1: handle ::100 prio 1 protocol ip u32 match ip dst 10.10.10.10/32 flowid 1:100

Удалить фильтр:

tc filter del dev eth1 parent 1: handle 800::100 prio 1 protocol ip u32

Просто измените число 100 для каждого нужного фильтра.

Я попробовал следующую команду, и, похоже, она работает:

$ sudo tc filter delete dev eth1 protocol ip parent 1: prio 1 u32 match ip src 10.10.10.10 flowid 1:2

Та же команда работала с add, replace и delete варианты после слова filter.