TC 哈希过滤器 - 单一规则删除

TC 哈希过滤器 - 单一规则删除

对于流量整形,我当前使用的设置与 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 

愿望:'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),其余规则保持不变并继续运行。

答案1

我知道这是一篇旧帖子,但我正在使用它,而且它似乎效果很好:

添加过滤器:

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”

答案2

我尝试了以下命令并且它似乎有效:

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

相同的命令可以与单词 后面的addreplace和选项一起使用。deletefilter

答案3

我知道这是一个老问题,但我只想在这里发布,供任何寻求详细答案的人参考。接受的答案有效,但没有解释它是如何工作的。


过滤器句柄(例如2:a:800)由 3 个部分组成:

  • 哈希表2
  • 存储桶a(哈希表内部2
  • 过滤索引800(存储桶内a

这 3 个都是十六进制的。一个哈希表可以有多个 bucket。一个 bucket 可以有多个 filter。

如果创建时未定义,TC 将为您创建默认句柄,即800:0:800800:0:8001依此类推。

要删除哈希表800桶内的过滤器,您可以执行以下操作:a2

tc filter del dev eth1 handle 2:a:800 prio 1 u32

相关内容