netconsole がログ サーバへのルートを検索しないのはなぜですか?

netconsole がログ サーバへのルートを検索しないのはなぜですか?

netconsole を設定するには、宛先ホストの IP アドレスと MAC アドレスを渡す必要があります。MAC をパラメータとして渡さない場合、netconsole は IP パケットを宛先としてブロードキャスト アドレスを持つイーサネット フレームにパックします。netconsole がルーティング テーブルでホストへのルートを検索しないのはなぜですか?

これはネットポールの制限ですか? それとも、ネットワーク スタックに問題がある場合のフォールト トレランス機能ですか? それとも、作業を高速化するために行われているのですか? それとも、実装が難しいだけですか?

主な理由は何ですか?

答え1

Netconsoleは再起動後すぐに動作するように設計されており、カーネルドキュメント:

Netconsole は、可能な限り瞬時に動作し、最も重大なカーネル バグのログも記録できるように設計されています。IRQ コンテキストからも動作し、パケットの送信中に割り込みは有効になりません。これらの独自のニーズにより、構成はこれ以上自動化できず、いくつかの基本的な制限が残ります。IP ネットワーク、UDP パケット、およびイーサネット デバイスのみがサポートされます。

ご覧のとおり、netconsole はデバッグ機能として設計されており、日常的な使用を目的としたものではありません。この目的のため、設計者は、設定が多少粗雑であっても、netconsole をできるだけシンプルで堅牢なものにしたいと考えました。

パケットの送信先を自動的に検出するように機能が設計されていた場合、コードはルーティング テーブルを照会して宛先ホストが同じサブネット内にあるかどうかを確認する必要がありますが、最初のメッセージを送信するときにはルーティングが設定されていない可能性があります。宛先ホストが同じサブネット内にあると想定できる場合でも、宛先 MAC アドレスがわからないため、実装では最初に ARP クエリを実行する必要があります。応答を待っている間にカーネルがクラッシュし、クラッシュ メッセージが失われます。

関連情報