Jam 偵測

在 GitHub 上查看來源

如要在任何 OpenThread 節點上提供可設定的訊號干擾偵測機制,請啟用「干擾偵測」功能。

這項功能適用於需要偵測特定頻道訊號干擾的裝置認證。可設定為符合各類型認證的要求。

運作方式

干擾偵測會在指定的時間範圍內監控節點的 RSSI (接收訊號強度指標),判斷管道是否遭到干擾。

啟用干擾偵測功能後:

  1. Jam 偵測狀態已設為「false」。
  2. 節點會在每個 1 秒的間隔內多次取樣 RSSI。
  3. 如果整個 1 秒間隔的 RSSI 值仍高於每個樣本的設定 RSSI 門檻,則系統會將該 1 秒間隔視為雜訊。
  4. 如果在任何時間點,每秒遭到干擾的間隔總數的總和超過或等於等於在先前設定的偵測時間窗格秒內,所設定忙碌期間秒的總和,則該時間點的干擾偵測狀態會設為 true
  5. 如果在任何時間點,經過設定的 偵測時間窗口秒內,經過設定的繁忙期間秒的總數,小於經過經過設定的 1 秒間隔的總數,則該時間點的雜訊偵測狀態會設為 false

歷史記錄點陣圖

OpenThread APIwpantund 屬性中,您可以擷取前 63 秒的位圖。這個位元資料會指出 RSSI 是否在前 63 秒的每個時間點超過設定的 RSSI 閾值。

舉例來說,您可以擷取下列點陣圖:

0xC248068C416E7FF0

轉換為二進位檔會產生在過去 63 秒內,超過設定的 RSSI 門檻值:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

如果偵測時間窗格設為 16 秒,而忙碌期間設為 8 秒,則在 51 秒時,干擾偵測狀態會變成 true,因為這是在前 16 秒內,RSSI 門檻至少超過 8 秒的第一次例子。在本範例中,干擾偵測狀態會在接下來的 13 秒內維持 true

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

如果 -45 dBm 是設定的 RSSI 門檻,則此點陣圖可能以下圖表示:

OT Jam 偵測

如何啟用

這項功能預設為停用。

依定義

如要啟用 Jam 偵測功能,請在建構 OpenThread 之前,在 openthread/src/core/config/openthread-core-default-config.h 檔案中將 OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 定義為 1

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

依選項

或者,您也可以在建構 OpenThread 時使用 -DOT_JAM_DETECTION=ON 建構選項:

./script/build -DOT_JAM_DETECTION=ON

參數

您只能透過 OpenThread API、Spinel 通訊協定或 wpanctl 設定塞車偵測參數,wpanctl 是用於管理網路協同處理器 (NCP) 的 wpantund 指令列工具。如果您啟用這項功能,但未進行後續設定,系統會套用預設值。

使用下列參數自訂此功能:

參數
RSSI 門檻
預設值
0 dBm
說明
以 dBm 為單位指定 RSSI 門檻值,超過該值就會視為頻道遭到干擾。
偵測視窗
預設值
63 秒
說明
以秒為單位指定檢查訊號干擾的時間範圍。範圍:1 到 63。
繁忙期間
預設值
63 秒
說明
指定偵測視窗內的累積秒數,其中 RSSI 必須高於 RSSI 門檻,才能觸發干擾偵測。必須小於偵測期。範圍:1 到 63。

API

OpenThread

使用 Jam Detection API,即可直接在 OpenThread 應用程式中管理 Jam Detection 功能。OpenThread API 提供下列功能:

  • 啟動及停止功能
  • 查看 Jam 偵測狀態
  • 管理所有參數
  • 擷取目前的 Jam Detection 記錄點陣圖
  • 註冊回呼函式,用於偵測壅塞

尖晶

Spinel 通訊協定可讓主機裝置直接與 NCP 通訊。這個通訊協定會在 openthread/src/lib/spinel/spinel.h 中公開干擾偵測屬性,提供下列功能:

  • 開始及停止功能
  • 查看 Jam 偵測狀態
  • 管理所有參數
  • 擷取目前的 Jam Detection 記錄點陣圖

CLI

OpenThread

沒有與這項功能相關的 OpenThread CLI 指令。

Wpantund

使用 wpanctl CLI 管理 OpenThread NCP 設定的壅塞偵測功能。wpantund 會在 NCP 重設時保留所有干擾偵測設定。

wpanctl 可存取下列 wpantund 屬性:

屬性
JamDetection:Status
格式
布林值
說明
唯讀。干擾偵測狀態。指出目前是否偵測到訊號干擾。
JamDetection:Enable
格式
布林值
說明
啟用或停用 Jam 偵測功能。
JamDetection:RssiThreshold
格式
dBm
說明
指定 dBm 中要視為已封鎖頻道的 RSSI 等級門檻。
JamDetection:Window
格式
說明
以秒為單位指定檢查訊號干擾的時間範圍。範圍:1 到 63。
JamDetection:BusyPeriod
格式
說明
指定 JamDetection:Window 的匯總秒數。在這個期間內,RSSI 必須高於 JamDetection:RssiThreshold 才能觸發 Jam 偵測功能。必須小於 JamDetection:Window。範圍:1 到 63。
JamDetection:Debug:HistoryBitmap
格式
64 位元值
說明
提供 Jam 偵測狀態記錄的相關資訊,用於監控和偵錯。

舉例來說,如要取得 NCP 的干擾偵測狀態,請按照下列步驟操作:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

如要在 NCP 上將干擾偵測 RSSI 門檻設為 -45 dBm,請按照下列步驟操作:

sudo wpanctl setprop JamDetection:RssiThreshold -45
sudo wpanctl getprop JamDetection:RssiThreshold
JamDetection:RssiThreshold = -45

如要進一步瞭解 wpantund 屬性,請參閱 wpantund GitHub 存放區