我在 tc 中添加了一个过滤器,如下所示:
tc filter add dev eth0 parent 1: protocol ip handle 6 fw flowid 1:6
这应该是将 iptables 用“--set-mark 6”标记的数据包发送到类 1:6。问题是,我不知道以后如何删除此过滤器。用“delete”替换“add”不起作用,我收到“RTNETLINK 答案:没有这样的文件或目录”错误消息。我尝试了许多其他组合来删除它,但似乎都没有用。
谢谢你的帮助。
答案1
问题是,当你发布过滤器添加 w/o 精确偏好/优先号码,它会自动分配,你可以使用以下命令查看它:
tc filter show dev eth0
并且它会被轻易删除
tc filter del dev eth0 prio nUmErIc
如果您需要更多控制,则必须准确指定“prio”:
tc filter add dev eth0 parent 1: protocol ip prio 1 handle 6 fw flowid 1:6
这样,您要么重复所有详细的细节来删除过滤器,要么只使用前一种方法。
答案2
从源头上/net/sched/cls_api.c因此,一个解决方法是使用prio != 0
if (prio == 0 && (protocol || t->tcm_handle || tca[TCA_KIND])) {
NL_SET_ERR_MSG(extack, "Cannot flush filters with protocol, handle or kind set");
return -ENOENT;
}