web-dev-qa-db-ja.com

Linuxカーネルの内部にルーティングテーブルはどこに保存されていますか?

route -nを実行すると、どこから(どのstructsから)表示された情報が取得されますか?

strace route -nを実行してみましたが、保存されている適切な場所を見つけられませんでした。

11
syntagma

routeまたはipユーティリティは、procfsと呼ばれる疑似ファイルシステムから情報を取得します。通常は/procの下にマウントされます。カーネルのIPルーティングテーブルを確認できる/proc/net/routeというファイルがあります。代わりにcatを使用してルーティングテーブルを印刷できますが、IPアドレスは16進数で格納されるため、ルートユーティリティは出力を人間が読める形式にします。

そのファイルは通常のファイルではありません。これは常に、procファイルシステム内のすべてのファイルとして、開こうとしたときに読み取ろうとしたときに生成されます。

私はあなたがそのファイルがどのように書かれるか興味があるなら、あなたはカーネルソースを見る必要があります:それは function がルーティングテーブルを出力します。 行251 を見ると、ルーティングテーブルのヘッダーが出力されています。ルーティングテーブルは、ヘッダーファイル ip_fib.h、line 98 で定義されているstruct fib_infoにほとんどあるようです。

16
chaos