feisky

云计算、虚拟化与Linux技术笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转]正确的删除tc的filter过滤器

Posted on 2011-12-08 22:02  feisky  阅读(2992)  评论(0编辑  收藏  举报

直接用过滤器的生成规则去删除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号码)

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

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

Author Info :
  • From:正确的删除tc的filter过滤器
  • URL:http://ihipop.info/2011/06/2471.html
  • Please Reserve This Link,Thanks!
  •  

    无觅相关文章插件,快速提升流量