使用 OT CLI 显示和管理网络数据

在 GitHub 上查看源代码

Thread Network Data 包含有关线程路由器和 Thread 网络中可用的其他服务器的信息。边界路由器和服务提供服务的设备向主要副本注册其信息。Leader 在 Thread Network 数据中收集和构建这些信息,并将信息分发给 Thread 网络中的所有设备。

边界路由器可能会注册分配给 Thread 网络的前缀以及它们为其提供路由的前缀。服务可能会注册与服务本身相关的所有信息。

边界路由器和服务信息可以稳定或临时。稳定的线程网络数据会分发到所有设备,包括睡觉设备 (SED)。 临时网络数据会分发到除 SED 以外的所有节点。

网络数据命令

如需查看 netdata 命令列表,请输入 help

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

full 命令

full 命令会报告标志状态或调整标志跟踪(无论是否调用了“净数据完整”回调)。

此命令需要 OPENTHREAD_CONFIG_BORDER_ROUTER_SIGNAL_NETWORK_DATA_FULL。

lengthmaxlength 命令

length 命令会获取当前线程网络数据的长度,以字节为单位进行报告。maxlength 命令可获取观察长度上限,或重置所跟踪的长度上限。

publish 命令

网络数据发布商提供监控网络数据并管理何时添加或移除条目的机制,以限制线程网络数据中类似服务和前缀( On-Mesh 前缀或外部路由)条目的数量。

发布商需要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. 将新数据集提交到非易失性存储空间中的活跃操作数据集。

    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. 显示线程网络数据。

    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 值。

    服务记录包括 otServiceConfig 值(包括 mEnterpriseNumbermServiceDataotServerConfig::mServerDatas 用于表示 otServerConfig::mStable)。RLOC 也会附加到记录的末尾。

  8. 显示 Partition 的线程网络数据的当前长度(以字节为单位)。

    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. 显示 Partition 的线程网络数据的当前长度(以字节为单位)。

    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 命令用于该标志用于跟踪是否调用了“净数据完整”回调。这些命令可以报告标志或重置标志状态。

对于 Thread 的典型使用场景,网络数据不太可能会完整使用,即使在存在许多边界路由器且它们全部添加路由前缀的情况下也是如此。

从技术层面来讲,网络数据可能会完全可用,但这通常是由于边界路由器配置错误或问题造成的。netdata lengthnetdata maxlength 命令可帮助调试网络数据完整错误。 length 可获取网络数据的当前长度(以字节为单位),maxlength 可获取观察到的最大长度,还可以重置所跟踪的最大长度。