web-dev-qa-db-ja.com

tcフィルターの交換、tcフィルターの変更が機能しない

私は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

'replace'は新しいルールを追加しますが、古いルールを削除しないでください。

replace/changeコマンドの構文は正しいですか?

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 parent 1:classid 1:1 htb rate 1000Mbps 
 
 tc class add dev eth0 parent 1:1 classid 1:11 htb rate 100Mbps 
 tc class add dev eth0 parent 1:1 classid 1:12 htb rate 100Mbps 
 tc class add dev eth0 parent 1: 1 classid 1:13 htb rate 100Mbps 
 tc class add dev eth0 parent 1:1 classid 1:14 htb rate 100Mbps 
 
 tc qdisc add dev eth0 parent 1:11 handle 10 :netem delay 0ms 
 tc qdisc add dev eth0 parent 1:12 handle 20:netem delay 500ms 
 tc qdisc add dev eth0 parent 1:13 handle 30:netem delay 1000ms 
 tc qdisc add dev eth0 parent 1:14 handle 40:netem delay 1500ms 
 
 tc filter add dev eth0 protocol ip prio 1 u32 match ip dst 10.0.0.3 flowid 1:11 
 tc filter add dev eth0 protocol ip prio 1 u32 match ip dst 10.0.0.8 flowid 1:12 
 tc filter add dev eth0 protocol ip prio 1 u32 match ip dst 10.0.0.9 flowid 1:13 
 tc filter add dev eth0 protocol ip prio 1 u32 match ip dst 10.0.0.7 flowid 1:14 
2
user174704

私はあなたがこのようにそのためにハンドルを使わなければならないと思います:

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で発行でき、正常に適用されます。

P.S.ハンドルはtc showで示されています。または、初めてルールを追加するときに指定できると思います。

2
poige