要配置netconsole,您应该传递目标主机的IP地址和MAC地址.如果您不将MAC作为参数传递 – netconsole将IP数据包打包到以广播地址作为目标的以太网帧.
为什么netconsole不在路由表中搜索到主机的路由?
这是网络限制吗?
或者是容错功能,如果网络堆栈有问题?
或者是为了加快工作而完成的?或者它很难实现?
主要原因是什么?
解决方法:
Netconsole被设计为在重新启动后尽快工作.从the kernel documentation开始:
Netconsole was designed to be as instantaneous as possible, to
enable the logging of even the most critical kernel bugs. It works
from IRQ contexts as well, and does not enable interrupts while
sending packets. Due to these unique needs, configuration cannot
be more automatic, and some fundamental limitations will remain:
only IP networks, UDP packets and ethernet devices are supported.
如您所见,netconsole旨在成为调试功能,而不是日常使用.为此,设计人员希望它尽可能简单和强大,即使配置它是粗糙的.
如果该功能是自动设计的,可以找到发送数据包的位置,则代码必须查询路由表以查看目标主机是否在同一子网中,但是当第一个消息要进行时,可能不会设置路由发送.即使我们可以假设目标主机位于同一子网中,而不知道目标MAC地址,实现首先必须进行ARP查询.在等待响应时,内核崩溃并且崩溃消息丢失.