$ sudo tc qdisc add dev enp3s0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
$ sudo tc qdisc add dev enp3s0 parent 1:1 handle 10: netem loss 0%
$ sudo tc filter add dev enp3s0 protocol ip parent 1:0 prio 1 u32 match ip dport 50001 0xffff flowid 1:1
PRIO qdisc はデフォルトで三つのクラスのクラスを持つ。 priomap の設定により、三つのクラスを均等に設定すると、すべてのトラフィックは 1:3 に向かう。 1:1 に netem を設定する。loss 0% はパケットロスを起こさない設定。 filter を追加して、50001ポートに向かうトラフィックだけは 1:1 に向かうよう設定。
$ sudo tc class show dev enp3s0
class prio 1:1 parent 1: leaf 10:
class prio 1:2 parent 1:
class prio 1:3 parent 1:
netem のパケットロス率を操作して、遮断状態と通過状態を切り替える。
$ sudo tc qdisc change dev enp3s0 parent 1:1 handle 10: netem loss 100%
$ sudo tc qdisc change dev enp3s0 parent 1:1 handle 10: netem loss 0%
切り替え前は 1:1 から送り出されたデータ数は 0 バイト。
$ sudo tc -s qdisc ls dev enp3s0
qdisc prio 1: root refcnt 2 bands 3 priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Sent 1148 bytes 10 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc netem 10: parent 1:1 limit 1000
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
PRIO qdisc を消せば、関連するすべてが消えてデフォルトに戻る。
$ sudo tc qdisc del dev enp3s0 root