我有一个 tc 过滤规则:
tc filter add dev eth0 protocol ip prio 1 u32 match ip dst 10.0.0.3 flowid 1:14
如果我尝试“更改”此过滤规则,则会收到错误:
# tc filter change dev eth0 protocol ip prio 1 u32 match ip dst 10.0.0.2 flowid 1:14
# RTNETLINK answers: No such file or directory
# We have an error talking to the kernel
“替换”会添加新规则,但不会删除旧规则。
替换/更改命令的语法是否正确?
CentOS 6.4 iptables-1.4.7-9.el6.x86_64 iproute-2.6.32-23.el6.x86_64
完整脚本:
tc qdisc add dev eth0 root handle 1: htb tc class add dev eth0 父级1:classid 1:1 htb速率1000Mbps tc class add dev eth0 父级 1:1 classid 1:11 htb 速率 100Mbps tc class add dev eth0 父级 1:1 classid 1:12 htb 速率 100Mbps tc class add dev eth0 父级 1:1 classid 1:13 htb 速率 100Mbps tc class add dev eth0 父级 1:1 classid 1:14 htb 速率 100Mbps tc qdisc add dev eth0 parent 1:11 handle 10: netem 延迟 0ms tc qdisc add dev eth0 parent 1:12 handle 20: netem 延迟 500ms tc qdisc add dev eth0 parent 1:13 handle 30: netem 延迟 1000ms tc qdisc add dev eth0 parent 1:14 handle 40: netem 延迟 1500ms tc 过滤器添加 dev eth0 协议 ip prio 1 u32 匹配 ip dst 10.0.0.3 flowid 1:11 tc 过滤器添加 dev eth0 协议 ip prio 1 u32 匹配 ip dst 10.0.0.8 flowid 1:12 tc 过滤器添加 dev eth0 协议 ip prio 1 u32 匹配 ip dst 10.0.0.9 flowid 1:13 tc 过滤器添加 dev eth0 协议 ip prio 1 u32 匹配 ip dst 10.0.0.7 flowid 1:14
答案1
我认为你必须使用句柄来实现这一点,就像这样:
sudo tc filter change dev eth0 pref 1 protocol ip handle 800::800 u32 match ip dst 10.0.0.5 flowid 1:15
— 这样,我就可以用不同的方式发出相同的命令ip dst
,并且可以成功应用。
PS 句柄显示为tc show
,或者,我相信您可以在第一次添加规则时指定它们。