Warum sucht Netconsole nicht nach der Route zum Protokollierungsserver?

Warum sucht Netconsole nicht nach der Route zum Protokollierungsserver?

Um netconsole zu konfigurieren, müssen Sie die IP-Adresse und die MAC-Adresse des Zielhosts übergeben. Wenn Sie MAC nicht als Parameter übergeben, packt netconsole das IP-Paket in einen Ethernet-Frame mit der Broadcast-Adresse als Ziel. Warum sucht netconsole nicht in der Routing-Tabelle nach einer Route zum Host?

Handelt es sich um eine Netpoll-Beschränkung? Oder handelt es sich um eine Fehlertoleranzfunktion, wenn etwas mit dem Netzwerkstapel nicht stimmt? Oder dient es der schnelleren Arbeit? Oder ist es einfach schwer zu implementieren?

Was ist der Hauptgrund?

Antwort1

Netconsole wurde so konzipiert, dass es nach einem Neustart so schnell wie möglich funktioniert.die Kernel-Dokumentation:

Netconsole wurde so konzipiert, dass es so schnell wie möglich funktioniert, um die Protokollierung selbst der kritischsten Kernel-Fehler zu ermöglichen. Es funktioniert auch in IRQ-Kontexten und aktiviert keine Interrupts beim Senden von Paketen. Aufgrund dieser besonderen Anforderungen kann die Konfiguration nicht automatischer erfolgen und einige grundlegende Einschränkungen bleiben bestehen: Es werden nur IP-Netzwerke, UDP-Pakete und Ethernet-Geräte unterstützt.

Wie Sie sehen, ist netconsole als Debugging-Funktion gedacht und nicht für den täglichen Gebrauch. Aus diesem Grund wollten die Entwickler es so einfach und robust wie möglich gestalten, auch wenn die Konfiguration etwas grob ist.

Wenn die Funktion so konzipiert wäre, dass sie automatisch ermittelt, wohin das Paket gesendet werden soll, müsste der Code die Routing-Tabelle abfragen, um festzustellen, ob sich der Zielhost im selben Subnetz befindet. Das Routing ist jedoch wahrscheinlich nicht eingerichtet, wenn die ersten Nachrichten gesendet werden sollen. Selbst wenn wir davon ausgehen können, dass sich der Zielhost im selben Subnetz befindet, müsste die Implementierung ohne Kenntnis der Ziel-MAC-Adresse zunächst eine ARP-Abfrage durchführen. Während auf die Antwort gewartet wird, stürzt der Kernel ab und die Absturzmeldung geht verloren.

verwandte Informationen