透過 OT CLI 顯示及管理網路資料

前往 GitHub 查看原始碼

Thread Network Data 包含 Border 路由器和 Thread 網路可用的其他伺服器相關資訊。邊界為路由器的路由器和裝置,皆會登錄其資訊。領先者會在 Thread 網路資料中收集及建構這類資訊,並將資訊散佈至 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 指令

網路資料發布者會提供一項機制來監控網路資料,以及管理新增或移除項目的時機,藉此限制 Thread 網路資料中的類似 Service 和前置字串 (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. 顯示指派給執行緒介面的 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 值。

    服務記錄包含 otServiceConfig 值,包括 mEnterpriseNumbermServiceDataotServerConfig::mServerDatas,用來表示 otServerConfig::mStable。RLOC 也會附加到記錄的結尾。

  8. 顯示分區的 Thread 網路資料目前的長度 (以位元組為單位)。

    netdata length
    23
    Done
    
  9. 顯示指派給執行緒介面的 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. 顯示指派給執行緒介面的 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 位元組。如果 Border 路由器持續將項目 (例如前置字串、路徑或服務項目) 新增到網路資料,則可取得完整資料。發生這種情況時,主管拒絕新增項目的新要求會遭到領導者拒絕或忽略。主要情況下並不需要向邊界路由器發出拒絕要求,因此邊界路由器可能無法立即得知網路資料已用盡。不過,有幾種方法可偵測網路資料何時完整擷取。

在 Border 路由器和領先者實作的偵測方法會使用回呼 API 機制,讓使用者在網路資料已滿時收到通知。回呼可用於採取行動,例如移除過時的前置字串或服務項目。netdata full 指令的用途是追蹤是否已叫用「淨資料完整」回呼的旗標。這些指令可用來回報標記狀態或重設標記。

就 Thread 的常見用途而言,即使有多個邊界路由器,且所有新增路徑前置字串時,網路資料也不一定完整。

技術上來說,網路資料就能取得完整,但這通常是因為設定錯誤或邊界路由器發生問題。netdata lengthnetdata maxlength 指令有助於對網路資料完整錯誤進行偵錯。length 會取得目前網路資料的長度,回報為位元組,maxlength 則會取得最長可觀察長度,也可以重設追蹤的長度上限。