Linux清空filter表,正确的删除tc的filter过滤器

直接用过滤器的生成规则去删除TC的filter会导致所有过滤器都被清空

正确的方法在邮件列表面有提到

不像class,添加后 想要删除很简单 直接把TC命令中的add换成del就可以了,如果class重复,就会像添加路由出错时候一样有提示。

但是filter不一样,相同规则的filter可以不断持续的添加,规则添加后,内核会用不同的句柄号(handle)来区分,

删除一个filter,不能简单的把规则的add换成del,那会删除所有的filter规则,因为你没有提供最重要的句柄号(handle) 没有提供就是0 是0就会删除所有规则。

You must at least provide the following:

dev

parent (qdisc or class)

prio

kind (filter type)

handle

如果一个filter已经和一个class关联了,那么你如果删除这个class就会得到这样的提示:RTNETLINK answers: Device or resource busy

所以,删除一条class规则前,要先把和这个class关联的filter删除掉。下面是我的一个实现($id 代表class规则ID号码)

[bash]handles=tc filter list dev ${dev} |grep "flowid 1:${id}"|awk '{print $10}'

for handle in $handles

do

tc filter delete dev ${dev} parent 1: protocol ip prio 1 handle ${handle} u32

done[/bash]

之所以要用循环,因为filter可能有多条关联一个class

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值