web-dev-qa-db-ja.com

「iprouteadd」は重複エントリを許可していませんが、それに依存できますか?

でルートを追加した場合

ip route add 172.10.1.0/24 via 10.0.0.100 dev eth0

次に同じコマンドをもう一度実行すると、ルートがすでに存在するため失敗します。

私はその行動がどこにも文書化されていないのを見ません。この動作に依存するのは安全ですか、それともLinuxの異なる/将来のバージョンで重複ルートが許可される可能性がありますか?

ユースケース

ルーティングテーブルを構成するbashスクリプトを書いています。スクリプトを安全に複数回実行できるようにしたい。

2つのオプションがあります。

  • ip route addコマンドをip route listを実行し正規表現を使用してルートがすでに配置されているかどうかを確認するifステートメント内に配置します。

  • ip route addを実行し、ルートがすでに存在するために失敗した場合は無視します。

最初のものは、ip route listの出力形式に依存する必要があるため、あまり堅牢ではないようです。 2つ目は、文書化されていない動作に依存しているようです。

1
Stefan

addの代わりにip route replaceを使用できます。

これはaddと同じパラメーターを取りますが、ルートが現在存在する場合は失敗しません。

man ip-routeが教えてくれるように

ip route replace
新しいものを変更または追加する

ルートがまだ設定されていない場合はサイレントに追加し、指定したものに「変更」(置換)します。

3
guntbert