Jam 偵測

前往 GitHub 查看原始碼

如要為任何 OpenThread 節點提供可設定訊號幹擾的可設定的機制,請啟用 Jam 偵測功能。

如果裝置憑證需要偵測特定管道的訊號幹擾,這項功能就非常實用。您可以將其設定為符合各類型認證的規定。

運作方式

Jam Detection 會監控指定時間範圍內的節點 RSSI (接收訊號強度指標),藉此判斷頻道是否卡住了。

啟用 Jam 偵測時:

  1. Jam 偵測狀態已設為 false
  2. 節點每隔一秒鐘多次對 RSSI 進行取樣。
  3. 如果跨越一個秒的 RSSI 持續高於設定樣本的 RSSI 門檻設定,系統會將該一秒間隔視為卡住。
  4. 如果一秒鐘的間隔時間總和等於或「等於」在已設定的「偵測期間」秒數中,已設定的忙碌期間秒數總和,則該時間點的 Jam 偵測狀態會設為 true
  5. 如果一秒中間隔的卡住次數總和「小於」先前設定的「偵測期間」秒數中,已設定的忙碌時段秒數,則該時間點的 Jam 偵測狀態會設為 false

記錄點陣圖

OpenThread APIwpantund 屬性中,您可以擷取過去 63 秒的點陣圖以擷取。此點陣圖表示 RSSI 是否在各個 63 秒時間超過設定的 RSSI 門檻。

例如,您可以擷取下列點陣圖:

0xC248068C416E7FF0

如果轉換為二進位檔,則 RSS 會在前 63 秒內產生超過設定 RSSI 門檻的所有執行個體:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

如果偵測期間設為 16 秒,且將忙碌時段設為 8 秒,則 Jam 偵測狀態會在 51 秒時變成 true,也就是在前 16 秒內第一個 RSSI 門檻超過 8 秒的例項。在這個範例中,Jam 偵測狀態在接下來 13 秒內仍維持 true 狀態。

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

如果 -45 dBm 是已設定的 RSSI 閾值,則點陣圖可能會以下圖表示:

OT Jam 偵測

如何啟用

這項功能預設為停用。

定義

如要啟用 Jam Detection,請在建立 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

參數

Jam Detection 參數只能透過 OpenThread API、Spinel 通訊協定或 wpanctl (用於管理網路處理者 (NCP) 的 wpantund 指令列工具) 來設定。如果該功能在沒有後續設定的情況下啟用,系統就會套用預設值。

使用下列參數自訂這項功能:

參數
RSSI 門檻
預設值
0 dBm
說明
在 dBm 中指定門檻的 RSSI 等級,用來判定頻道是否卡住了。
偵測視窗
預設值
63 秒
說明
指定要檢查訊號幹擾的期間 (以秒為單位)。範圍:1-63。
忙碌期間
預設值
63 秒
說明
指定偵測期間內,RSSI 必須高於 RSSI 門檻才能觸發 Jam 偵測的匯總秒數。必須小於偵測視窗。範圍:1-63。

API

OpenThread

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

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

飛輪

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

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

CLI

OpenThread

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

Wpantund

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

wpanctl 提供下列 wpantund 屬性的存取權:

屬性
JamDetection:Status
格式
布林值
說明
(唯讀)。Jam 偵測狀態。指出目前是否偵測到訊號卡住。
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 的 Jam 偵測狀態:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

如何將 NCP 的 Jam 偵測 RSSI 閾值設為 -45 dBm:

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

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