OT CLI によるネットワーク データの表示と管理

GitHub のソースを表示

Thread ネットワーク データには、Thread ネットワークで利用可能なボーダー ルーターやその他のサーバーに関する情報が含まれています。ボーダー ルーターとサービスを提供するデバイスは、情報をリーダーに登録します。リーダーは、この情報を Thread ネットワーク データ内で収集して構造化し、その情報を Thread ネットワーク内のすべてのデバイスに配信します。

ボーダー ルーターは、Thread ネットワークに割り当てられたプレフィックスとルートを提供するプレフィックスを登録できます。サービスは、サービス自体に関連するすべての情報を登録できます。

ボーダー ルーターとサービス情報は、安定または一時的です。Stable Thread ネットワーク データは、Sleepy End デバイス(SED)を含むすべてのデバイスに配布されます。 一時的なネットワーク データは、SED を除くすべてのノードに分散されます。

ネットワーク データコマンド

netdata コマンドのリストを表示するには、「help」と入力します。

netdata help
help
full
length
maxlength
publish
register
show
steeringdata
unpublish
Done

full コマンド

full コマンドは、フラグ ステータスを報告するか、または「net data full」コールバックが呼び出されているかどうかを示すフラグ追跡を解除します。

このコマンドには、OPENTHREAD_CONFIG_BORDER_ROUTER_SIGNAL_NETWORK_DATA_FULL が必要です。

length コマンドおよび maxlength コマンド

length コマンドは、スレッド ネットワーク データの現在の長さ(バイト数)を取得します。maxlength コマンドは、観測された最大長を取得するか、追跡された最大長をリセットします。

publish コマンド

ネットワーク データ パブリッシャーは、ネットワーク データをモニタリングし、エントリを追加または削除するタイミングを管理することで、Thread ネットワーク データ内の同様の Service と Prefix(オンメッシュ プレフィックスまたは外部ルート)のエントリの数を制限するメカニズムを備えています。

ニュース メディアには OPENTHREAD_CONFIG_NETDATA_PUBLISHER_ENABLE が必要です。

ネットワークの形成と接頭辞の構成

  1. 新しいネットワーク構成を生成します。

    dataset init new
    Done
    
  2. ネットワーク構成を表示します。

    dataset
    Active Timestamp: 1
    Channel: 13
    Channel Mask: 0x07fff800
    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
    
  3. 新しいデータセットを、不揮発性ストレージのアクティブ オペレーション データセットに commit します。

    dataset commit active
    Done
    
  4. Thread インターフェースを有効にする

    ifconfig up
    Done
    thread start
    Done
    
  5. Thread インターフェースに割り当てられた IPv6 アドレスを表示します。

    ipaddr
    fd3d:b50b:f96d:722d:0:ff:fe00:fc00
    fd3d:b50b:f96d:722d:0:ff:fe00:dc00
    fd3d:b50b:f96d:722d:393c:462d:e8d2:db32
    fe80:0:0:0:a40b:197f:593d:ca61
    Done
    
  6. Thread ネットワークに割り当てられた IPv6 プレフィックスを登録します。

    prefix add fd00:dead:beef:cafe::/64 paros med
    Done
    netdata register
    Done
    
  7. Thread ネットワーク データの表示。

    netdata show
    Prefixes:
    fd00:dead:beef:cafe::/64 paros med dc00
    Routes:
    fd49:7770:7fc5:0::/64 s med 4000
    Services:
    44970 5d c000 s 4000
    44970 01 9a04b000000e10 s 4000
    Done
    

    接頭辞とルートには、引数マッピングと RLOC 値が含まれています。

    サービス レコードには、otServerConfig::mStable を示す mEnterpriseNumbermServiceDataotServerConfig::mServerDatas などの otServiceConfig 値が含まれます。RLOC はレコードの末尾にも追加されます。

  8. パーティションの Thread ネットワーク データの現在の長さ(バイト数)を表示します。

    netdata length
    23
    Done
    
  9. Thread インターフェースに割り当てられた IPv6 アドレス(追加されたプレフィックスを含む)を表示します。

    ipaddr
    fd00:dead:beef:cafe:4da8:5234:4aa2:4cfa
    fd3d:b50b:f96d:722d:0:ff:fe00:fc00
    fd3d:b50b:f96d:722d:0:ff:fe00:dc00
    fd3d:b50b:f96d:722d:393c:462d:e8d2:db32
    fe80:0:0:0:a40b:197f:593d:ca61
    Done
    

既存のネットワークに接続

デバイスが Thread ネットワークに接続するには、ネットワーク キーのみが必要です。

必須ではありませんが、チャネルを指定することで、複数のチャネルにわたって検索する必要がなくなり、接続プロセスのレイテンシと効率の両方が向上します。

デバイスが Thread ネットワークに正常に接続されると、デバイスは完全なアクティブ運用データセットを取得します。

  1. 部分的なアクティブ運用データセットを作成する。

    dataset networkkey dfd34f0f05cad978ec4e32b0413038ff
    Done
    dataset commit active
    Done
    
  2. Thread インターフェースを有効にします。

    ifconfig up
    Done
    thread start
    Done
    
  3. 既存のネットワークに接続した後、Thread ネットワーク データを表示します。

    netdata show
    Prefixes:
    fd00:dead:beef:cafe::/64 paros med dc00
    Routes:
    Services:
    Done
    
  4. パーティションの Thread ネットワーク データの現在の長さ(バイト数)を表示します。

    netdata length
    23
    Done
    
  5. Thread インターフェースに割り当てられた IPv6 アドレスを表示します。

    ipaddr
    fd00:dead:beef:cafe:4da8:5234:4aa2:4cfa
    fd3d:b50b:f96d:722d:0:ff:fe00:fc00
    fd3d:b50b:f96d:722d:0:ff:fe00:dc00
    fd3d:b50b:f96d:722d:393c:462d:e8d2:db32
    fe80:0:0:0:a40b:197f:593d:ca61
    Done
    

デバッグと診断

ネットワーク データの上限は 254 バイトです。ボーダー ルーターがネットワーク データへのエントリ(プレフィックス、ルート、サービス エントリなど)を追加し続けると、フルステータスになる可能性があります。この場合、ボーダー ルーターからの新しいアイテムの追加リクエストは、リーダーによって拒否または無視されます。リーダーは、必ずしも拒否をボーダー ルーターに通知しないため、ボーダー ルーターはネットワーク データが満杯であるとすぐには認識しない可能性があります。ただし、ネットワーク データが満杯になったことを検出するメソッドもあります。

ボーダー ルーターとリーダーの両方に実装される検出メソッドは、コールバック API メカニズムを使用してネットワーク データがいっぱいになったときにユーザーに通知できるようにします。コールバックを使用すると、古いプレフィックスやサービスエントリを削除するなど、アクションを実行できます。netdata full コマンドは、「net data full」コールバックが呼び出されたかどうかを追跡するフラグに使用されます。これらのコマンドでは、フラグのステータスを報告したり、フラグをリセットしたりできます。

Thread の典型的なユースケースでは、多数のボーダー ルーターがあり、すべてにルート プレフィックスが追加されている場合でも、ネットワーク データが満杯になる可能性は低くなります。

技術的にネットワーク データを取得することは可能ですが、多くの場合、構成ミスやボーダー ルーターの問題が原因として考えられます。netdata length コマンドと netdata maxlength コマンドを使用すると、ネットワーク データのエラーをすべてデバッグできます。length はネットワーク データの現在の長さ(バイトとして取得)を、maxlength は観測された最大長を取得し、追跡された最大長をリセットすることもできます。