Для формирования трафика я сейчас использую установку, которая выглядит точно так же, как установка 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 описание проблемы:
Я создал хэш-фильтр на каком-то интерфейсе, как в этом http://lartc.org/howto/lartc.adv-filter.hashing.html
Я хочу найти команду, которая удаляет одно правило (например, 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
.