OpenThread-Protokolle

Quelle auf GitHub ansehen

OpenThread-Logs werden durch zahlreiche Konfigurationskonstanten gesteuert. Wenn nicht anders angegeben, sind diese Konstanten in der folgenden Datei definiert:

openthread/src/core/config/logging.h

Ausgabemethoden

OpenThread unterstützt verschiedene Ausgabe-Logging-Methoden, die als Konfigurationskonstante für OPENTHREAD_CONFIG_LOG_OUTPUT definiert sind. Die Optionen für die Logging-Methode sind in der folgenden Datei aufgeführt:

openthread/src/core/config/logging.h

Die Standardkonfiguration für die Logausgabe ist OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

Die Ausgabemethode ist ein Beispiel dafür, wo Sie möglicherweise die Konfigurationskonstante auf Plattformebene anstelle der Kernkonfiguration aktualisieren müssen. Wenn Sie beispielsweise die Ausgabemethode in der Beispielsimulation ändern möchten, bearbeiten Sie openthread/examples/platforms/simulation/openthread-core-simulation-config.h anstelle von openthread/src/core/config/logging.h.

Logebenen

Logs können unterschiedliche Informationsebenen ausgeben, die als Konfigurationskonstante für die Kompilierungszeit OPENTHREAD_CONFIG_LOG_LEVEL definiert sind. Die Optionen für die Ebene sind in der folgenden Datei aufgeführt:

openthread/include/openthread/platform/logging.h

Die Liste der Logebenen ist auch in der API-Referenz zu Platform Logging-Makros verfügbar.

Die Standard-Logebene ist OT_LOG_LEVEL_CRIT, wodurch nur die wichtigsten Logs ausgegeben werden. Ändern Sie die Ebene, damit mehr Logs angezeigt werden. Verwenden Sie OT_LOG_LEVEL_DEBG, um alle OpenThread-Logs aufzurufen.

Regionen protokollieren

Die Logregionen bestimmen, welche Bereiche des OpenThread-Codes für das Logging aktiviert sind. Die Aufzählung der Region ist in der folgenden Datei definiert:

openthread/include/openthread/platform/logging.h

Die Liste der Logregionen ist auch in der API-Referenz Platform Logging Enumerations verfügbar.

Logregionen werden häufig als Parameter in Logfunktionen verwendet. Alle Regionen sind standardmäßig aktiviert.

Standard-Logging-Funktion

Die Standardfunktion für das Logging in OpenThread ist otPlatLog, die als Compile-Zeitkonfigurationskonstante von OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION definiert ist.

Weitere Informationen zu dieser Funktion finden Sie in der API-Referenz zu Platform Logging.

Wenn Sie diese Funktion direkt in den OpenThread-Beispielanwendungen verwenden möchten, verwenden Sie die Option OT_REFERENCE_DEVICE. So verwenden Sie sie in der Befehlszeile für das CC2538-Beispiel:

./script/build -DOT_REFERENCE_DEVICE=ON

Alternativ können Sie die Datei openthread/etc/cmake/options.cmake aktualisieren, um sie standardmäßig beim Erstellen zu aktivieren.

Logs aktivieren

Prüfen Sie vor dem Aktivieren von Logs, ob Ihre Umgebung für das Erstellen von OpenThread konfiguriert ist. Weitere Informationen finden Sie unter OpenThread erstellen.

Alle Logs aktivieren

Mit der cmake-Option OT_FULL_LOGS können Sie schnell alle Logebenen und Regionen aktivieren:

./script/build -DOT_FULL_LOGS=ON

Mit diesem Schalter wird die Logebene auf OT_LOG_LEVEL_DEBG gesetzt und alle Flags der Region werden aktiviert.

Bestimmte Ebene von Logs aktivieren

Wenn Sie eine bestimmte Logebene aktivieren möchten, bearbeiten Sie openthread/src/core/config/logging.h, aktualisieren Sie OPENTHREAD_CONFIG_LOG_LEVEL auf die gewünschte Ebene und erstellen Sie dann OpenThread. So aktivieren Sie beispielsweise Logs bis OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

Logs in Syslog ansehen

Logs werden standardmäßig an syslog gesendet. Unter Linux ist das /var/log/syslog.

  1. Erstellen Sie das Simulationsbeispiel, bei dem alle Logs aktiviert sind:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. Starten Sie einen simulierten Knoten:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. Richten Sie in einem neuen Terminalfenster eine Echtzeitausgabe der OT-Logs ein:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. Rufen Sie auf dem simulierten Knoten „Thread“ auf:
dataset init new
Done
dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: d63e8e3e495ebbc3
Mesh Local Prefix: fd3d:b50b:f96d:722d/64
Network Key: dfd34f0f05cad978ec4e32b0413038ff
Network Name: OpenThread-8f28
PAN ID: 0x8f28
PSKc: c23a76e98f1a6483639b1ac1271e2e27
Security Policy: 0, onrcb
Done
dataset commit active
Done
ifconfig up
Done
thread start
Done

Kehren Sie zum Terminalfenster zurück, in dem der Befehl tail ausgeführt wird. Die Logs sollten für den simulierten Knoten in Echtzeit angezeigt werden. Notieren Sie sich die Log-Tags in der Ausgabe: [INFO], [DEBG], [NOTE]. Alle Optionen entsprechen den Logebenen. Wenn Sie beispielsweise die Logebene in OT_LOG_LEVEL_INFO ändern, werden die DEBG-Logs nicht mehr in der Ausgabe angezeigt.

ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: SrcAddrMatch - Cleared all entries
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x7f133b) [Ip6+ Ip6- LLAddr MLAddr Rloc+ KeySeqCntr NetData Ip6Mult+ Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset panid
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset commit active
ot-cli-ftd[30055]: [1] [INFO]-MESH-CP-: Active dataset set
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio sleeping
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: RadioPanId: 0x8f28
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x007f0100) [KeySeqCntr Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: ifconfig up
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio receiving on channel 11
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: thread start
ot-cli-ftd[30055]: [1] [NOTE]-MLE-----: Role Disabled -> Detached
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Attempt to become router
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Saved NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x7d4, maccntr:0x7d0, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [DEBG]-MLE-----: Store Network Information
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Send Link Request (ff02:0:0:0:0:0:0:2)

Logs in der CLI-App ansehen

Logs können direkt in der Beispiel-App der OpenThread CLI aufgerufen werden.

  1. Bearbeiten Sie die Konfigurationsdatei für die Beispielplattform und ändern Sie die Logausgabe in die Anwendung. Für das Simulationsbeispiel ist dies openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Erstellen Sie das Simulationsbeispiel mit der gewünschten Logebene. So aktivieren Sie alle Logs:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. Starten Sie einen simulierten Knoten:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. Die Logausgabe sollte im selben Fenster wie die OpenThread-Befehlszeile angezeigt werden, während die Befehle verarbeitet werden.

Wenn Sie benutzerdefiniertes Logging hinzugefügt und alle Logs aktiviert haben, ist der Puffer der Befehlszeile oder der UART-Übertragungspuffer möglicherweise nicht groß genug, um die zusätzlichen benutzerdefinierten Logs zu verarbeiten. Wenn einige Logs nicht zum richtigen Zeitpunkt angezeigt werden, erhöhen Sie die Größe des Befehlszeilen-Zwischenspeichers der Befehlszeile (definiert als OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH in /openthread/src/cli/cli_config.h oder der Größe des UART-Übertragungspuffers, definiert als OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE in der Konfigurationsdatei der Plattform, z. B. /src/nrf52840/openthread-core-nrf52840-config.h.

Logs für einen NCP ansehen

Logs für einen NCP können über wpantund an die syslog eines Hosts gesendet werden. Für einen Linux-Host ist das /var/log/syslog.

Verwenden Sie den OPENTHREAD_CONFIG_LOG_OUTPUT-Wert OPENTHREAD_CONFIG_LOG_OUTPUT_APP, um das NCP-Logging zu aktivieren. Ändern Sie dies in der Konfigurationsdatei der Plattform.

So aktivieren Sie die Funktion beispielsweise für einen nrf52840, der mit einem Linux-Host verbunden ist:

  1. Bearbeiten Sie die Konfigurationsdatei für die Plattform und ändern Sie die Logausgabe in die Anwendung. Für nrf52840 ist dies ./src/nrf52840/openthread-core-nrf52840-config.h im Repository ot-nrf528xx:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. Erstellen Sie das Beispiel „nrf52840“ mit der gewünschten Log-Ebene und anderen NCP-spezifischen Flags. So erstellen Sie einen Joiner mit allen aktivierten Logs:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. Flashen Sie den NCP, verbinden Sie ihn mit dem Linux-Host und starten Sie wpantund wie im Wpantund-Repository beschrieben.

  4. Sobald der NCP ausgeführt wird, prüfen Sie syslog auf dem Linux-Computer:

    tail -F /var/log/syslog | grep "wpantund"
    

  5. OpenThread-Logs sollten für den NCP in Echtzeit angezeigt werden. Möglicherweise sehen Sie sie auch in der Ausgabe von wpantund.

Protokollebene zur Laufzeit ändern

Protokollebenen können zur Laufzeit geändert werden, wenn die dynamische Steuerung der Protokollebene aktiviert ist.

  1. Erstellen Sie die App mit der Option -DOT_LOG_LEVEL_DYNAMIC=ON. Beispiel:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. Ändern Sie die Logebene je nach Implementierung:
    1. Verwenden Sie für einen System-on-Chip (SoC) die Logging API in Ihrer OpenThread-Anwendung.
    2. Verwenden Sie für einen NCP wpanctl in der Befehlszeile. Im wpantund-Repository finden Sie alle Attribute, die für wpanctl verfügbar sind, sowie die Spinel API mit Definitionen auf Logebene.
      wpanctl set OpenThread:LogLevel 5