任意の OpenThread ノードでシグナル ジャミングの検出に構成可能なメカニズムを提供するには、ジャム検出機能を有効にします。
この機能は、特定のチャネルでシグナル ジャミングを検出する機能を必要とするデバイス認証に役立ちます。各認証タイプの要件を満たすように構成できます。
仕組み
ジャム検出は、指定された時間枠でノードの RSSI(受信信号強度インジケーター)をモニタリングし、チャンネルが妨害されているかどうかを判断します。
ジャム検出が有効になっている場合:
- ジャム検出状態が
false
に設定されている。 - ノードは、1 秒間隔で RSSI を複数回サンプリングします。
- 1 秒間全体の RSSI が、すべてのサンプルで構成された RSSI しきい値を上回る場合、その 1 秒間はジャミングと見なされます。
- 1 秒間隔で発生したジャムの合計数が、前回構成した検出ウィンドウ秒内の構成済みのビジー期間秒の合計数を超えている場合、その時点でのジャム検出状態は
true
に設定されます。 - 任意の時点で、ジャムが発生した 1 秒間隔の合計数が、前もって構成された検出ウィンドウ秒内の構成されたビジー期間秒の合計数より小さい場合、その時点でのジャム検出状態は
false
に設定されます。
履歴ビットマップ
OpenThread API と wpantund
プロパティでは、直近の 63 秒間のビットマップを取得できます。このビットマップは、過去 63 秒ごとに RSSI が構成された RSSI しきい値を上回ったかどうかを示します。
たとえば、次のビットマップを取得します。
0xC248068C416E7FF0
バイナリに変換すると、過去 63 秒間に RSSI が構成された 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
構成された RSSI しきい値が -45 dBm の場合、このビットマップは次のようなグラフで表されます。
有効にする方法
この機能はデフォルトでは無効になっています。
定義
ジャム検出を有効にするには、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
(ネットワーク コプロセッサ(NCP)管理用の wpantund
コマンドライン ツール)でのみ構成できます。その後の構成なしでこの機能が有効になっている場合は、デフォルト値が適用されます。
この機能は、次のパラメータを使用してカスタマイズできます。
パラメータ | |||||
---|---|---|---|---|---|
RSSI しきい値 |
|
||||
検出ウィンドウ |
|
||||
混雑期間 |
|
API
OpenThread
Jam Detection API を使用して、OpenThread アプリケーションで Jam Detection 機能を直接管理します。OpenThread API には次の機能があります。
- 機能を開始および停止する
- Jam の検出状態を確認する
- すべてのパラメータを管理する
- 現在のジャム検出履歴ビットマップを取得する
- ジャムが検出されたときのコールバック関数を登録する
スピネル
Spinel プロトコルを使用すると、ホストデバイスは NCP と直接通信できます。このプロトコルは、openthread/src/lib/spinel/spinel.h
で次の機能を提供する Jam 検出プロパティを公開します。
- 機能の開始と停止
- Jam の検出状態を確認する
- すべてのパラメータを管理する
- 現在のジャム検出履歴ビットマップを取得する
CLI
OpenThread
この機能に関連する OpenThread CLI コマンドはありません。
wpantund
wpanctl
CLI を使用して、OpenThread NCP 構成のジャム検出機能を管理します。wpantund
は、NCP のリセット時にすべてのジャム検出構成を保持します。
wpanctl
を使用すると、次の wpantund
プロパティにアクセスできます。
プロパティ | |||||
---|---|---|---|---|---|
JamDetection:Status |
|
||||
JamDetection:Enable |
|
||||
JamDetection:RssiThreshold |
|
||||
JamDetection:Window |
|
||||
JamDetection:BusyPeriod |
|
||||
JamDetection:Debug:HistoryBitmap |
|
たとえば、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 リポジトリをご覧ください。