
要設定 netconsole,您應該傳遞目標主機的 IP 位址和 MAC 位址。如果您不將 MAC 作為參數傳遞 - netconsole 將 IP 封包打包到以廣播位址作為目標的乙太網路封包。為什麼 netconsole 不在路由表中搜尋到主機的路由?
這是網路輪詢的限制嗎?或者如果網路堆疊出現問題,它是否具有容錯功能?還是為了更快的工作?還是只是很難實施?
主要原因是什麼?
答案1
Netconsole 被設計為在重新啟動後儘快工作。從內核文件:
Netconsole 被設計為盡可能即時,甚至可以記錄最關鍵的核心錯誤。它也可以在 IRQ 上下文中工作,並且在發送資料包時不會啟用中斷。由於這些獨特的需求,配置無法更加自動化,並且一些基本限制仍然存在:僅支援 IP 網路、UDP 封包和乙太網路設備。
正如您所看到的,netconsole 旨在作為調試功能,而不是日常使用。為此,設計人員希望它盡可能簡單和強大,即使配置它很粗糙。
如果該功能被設計為自動找出將封包傳送到哪裡,則程式碼將必須查詢路由表以查看目標主機是否位於同一子網路中,但是當發送第一則訊息時,可能尚未設定路由。即使我們可以假設目標主機位於同一子網路中,但不知道目標 MAC 位址,實作也必須先進行 ARP 查詢。在等待回應期間,內核崩潰並且崩潰訊息遺失。