为什么 netconsole 不搜索到日志服务器的路由?

为什么 netconsole 不搜索到日志服务器的路由?

要配置 netconsole,您应该传递目标主机的 IP 地址和 MAC 地址。如果您不将 MAC 作为参数传递 - netconsole 将 IP 数据包打包到以广播地址作为目标的以太网帧。为什么 netconsole 不在路由表中搜索到主机的路由?

这是网络轮询的限制吗?或者如果网络堆栈出现问题,它是否具有容错功能?或者是为了更快的工作?或者只是很难实施?

主要原因是什么?

答案1

Netconsole 被设计为在重新启动后尽快工作。从内核文档

Netconsole 被设计为尽可能即时,甚至可以记录最关键的内核错误。它也可以在 IRQ 上下文中工作,并且在发送数据包时不会启用中断。由于这些独特的需求,配置无法更加自动化,并且一些基本限制仍然存在:仅支持 IP 网络、UDP 数据包和以太网设备。

正如您所看到的,netconsole 旨在作为调试功能,而不是日常使用。为此,设计人员希望它尽可能简单和强大,即使配置它很粗糙。

如果该功能被设计为自动找出将数据包发送到哪里,则代码将必须查询路由表以查看目标主机是否位于同一子网中,但在发送第一条消息时可能尚未设置路由。发送。即使我们可以假设目标主机位于同一子网中,但不知道目标 MAC 地址,该实现也必须首先进行 ARP 查询。在等待响应期间,内核崩溃并且崩溃消息丢失。

相关内容