删除 tc 中的过滤器

删除 tc 中的过滤器

我在 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;
}

相关内容