Di mana tabel routing disimpan secara internal di kernel Linux?

11

Ketika saya mengeksekusi route -n, dari mana tepatnya (dari mana structs) informasi yang ditampilkan diambil?

Saya mencoba mengeksekusi strace route -ntetapi saya tidak membantu saya menemukan tempat yang tepat itu disimpan.

syntagma
sumber
Ini disimpan dalam memori. Apakah Anda mencari alamat memori itu?
Bandrami
@Bandrami Saya ingin melihat apa structyang bertanggung jawab untuk menyimpan informasi.
syntagma
Bagi siapa pun yang mencari file pada disk, itu dibangun dari apa pun yang diberikan server DHCP, atau dari apa yang dapat ditemukan dalam /etc/sysconfig/network-scripts/ifcfg-${DEV}kasus sederhana dan / atau dari apa yang dapat ditemukan dalam /etc/sysconfig/network-scripts/route-${DEV}kasus yang lebih berbelit-belit (kasus Red Hat / CentOS 7). File terakhir berisi output dari ip -r. Lihat Menambahkan Rute Statis pada CentOS .
David Tonhofer

Jawaban:

16

The routeatau iputilitas mendapatkan informasi dari filesystem semu yang disebut procfs. Biasanya dipasang di bawah /proc. Ada sebuah file bernama /proc/net/route, di mana Anda dapat melihat tabel routing IP kernel. Anda dapat mencetak tabel routing dengan catgantinya, tetapi utilitas rute memformat output yang dapat dibaca manusia, karena alamat IP disimpan dalam hex.

File itu bukan hanya file biasa. Itu selalu dihasilkan pada saat ketika membukanya dengan upaya untuk membaca, karena semua file dalam sistem file proc.

Jika Anda ditanya bagaimana file itu ditulis, maka Anda perlu melihat sumber kernel: Fungsi itu menampilkan tabel rute. Anda lihat di baris 2510 , header dari tabel routing dicetak. Tabel routing tampaknya sebagian besar di struct fib_infoyang didefinisikan dalam file header ip_fib.h, baris 98 .

kekacauan
sumber