Linux

TC 雜湊過濾器 - 單個規則刪除

  • October 11, 2021

對於流量整形,我目前使用的設置看起來與 LARTC 的設置完全相同,在此頁面上:

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

我有一個簡單的問題 - 每次我想修改雜湊表中的某些內容(比如將 IP 分配給不同的 flowid),我需要刪除整個過濾器表並再次按過濾器過濾添加它。(我實際上不是手動做的,我有一個很好的程序可以為我做這件事……但仍然……)有一個問題 - 我以這種方式分配了大約 10k 個過濾器,並刪除並重新填充了整個過濾器表可能會變得很長,這對於流量整形來說並不完全好。我的程序可以輕鬆地只刪除需要刪除的規則(從而將整個問題減少到幾個命令和幾毫秒),但我根本不知道只刪除一個散列規則的命令。

我的 tc 過濾器顯示:

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 …’ 命令只刪除一個特定的過濾器(例如 0a0a0a0a IP 匹配(IP 地址 10.10.10.10))。刪除一些小的子組也很好——例如我仍然可以很快地重新創建一個桶(bkt a)。

我的嘗試:我嘗試使用 prio 對所有過濾器進行編號,但沒有任何幫助——它們只是在下面創建了一些無法使用(但可刪除)的東西,但在刪除之後,分桶過濾器仍然存在。

有任何想法嗎?


編輯 - 我正在添加一個簡化的 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,replacedelete單詞後的選項一起使用filter

引用自:https://serverfault.com/questions/330581