RTNETLINK answers: No such file or directory と言われます。

TC帯域を設定して、レイテンシーを設定した後、パケロスや遅延を設定する場合、だいたい、こうやるのですが、

sudo tc qdisc add dev eth0 root handle 1: tbf rate 10mbit burst 10kb latency 500ms
sudo tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 10000ms loss 1%

RTNETLINK answers: No such file or directory と言われます。

Webで調べてみたところ、山のように、同じ"悲鳴"が飛んでいました。

で、解決方ですが、ChatGPTが、逆転の発想のやりかたを教えてくれました。

# 既存の設定を削除
sudo tc qdisc del dev eth0 root (何か表示されるが無視する)

# `netem` を root にして、まずパケットロスを設定
sudo tc qdisc add dev eth0 root handle 1: netem loss 1% delay 10000ms

# その上に `tbf` を適用
sudo tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 10mbit burst 10kb latency 500ms

つまるところ、ルールの親と子を引っくり返す、という手法です。

まあ、理由は不明ですが、これで動いているようです。

2025,江端さんの技術メモ

Posted by ebata