Jam 検出

GitHub のソースを表示

任意の OpenThread ノードでシグナル ジャミングの検出に構成可能なメカニズムを提供するには、ジャム検出機能を有効にします。

この機能は、特定のチャネルでシグナル ジャミングを検出する機能を必要とするデバイス認証に役立ちます。各認証タイプの要件を満たすように構成できます。

仕組み

ジャム検出は、指定された時間枠でノードの RSSI(受信信号強度インジケーター)をモニタリングし、チャンネルが妨害されているかどうかを判断します。

ジャム検出が有効になっている場合:

  1. ジャム検出状態が false に設定されている。
  2. ノードは、1 秒間隔で RSSI を複数回サンプリングします。
  3. 1 秒間全体の RSSI が、すべてのサンプルで構成された RSSI しきい値を上回る場合、その 1 秒間はジャミングと見なされます。
  4. 1 秒間隔で発生したジャムの合計数が、前回構成した検出ウィンドウ秒内の構成済みのビジー期間秒の合計数を超えている場合、その時点でのジャム検出状態は true に設定されます。
  5. 任意の時点で、ジャムが発生した 1 秒間隔の合計数が、前もって構成された検出ウィンドウ秒内の構成されたビジー期間秒の合計数より小さい場合、その時点でのジャム検出状態は false に設定されます。

履歴ビットマップ

OpenThread APIwpantund プロパティでは、直近の 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 の場合、このビットマップは次のようなグラフで表されます。

OT ジャムの検出

有効にする方法

この機能はデフォルトでは無効になっています。

定義

ジャム検出を有効にするには、OpenThread をビルドする前に、openthread/src/core/config/openthread-core-default-config.h ファイルで OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE1 として定義します。

#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 しきい値
デフォルト値
0 dBm
説明
RSSI のしきい値を dBm 単位で指定します。この値を超えると、チャネルが妨害されたと判断されます。
検出ウィンドウ
デフォルト値
63 秒
説明
信号ジャミングをチェックする期間を秒単位で指定します。範囲: 1 ~ 63。
混雑期間
デフォルト値
63 秒
説明
ジャム検出をトリガーするために、検出ウィンドウ内で RSSI が RSSI しきい値を超えている必要がある秒数の合計を指定します。検出時間枠よりも小さくする必要があります。範囲: 1~63。

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
形式
dBm
説明
チャネルがブロックされていると見なす RSSI レベルのしきい値(dBm)を指定します。
JamDetection:Window
形式
説明
信号ジャミングをチェックする期間を秒単位で指定します。範囲: 1~63。
JamDetection:BusyPeriod
形式
説明
JamDetection:Window 内で、ジャム検出をトリガーするために RSSI が JamDetection:RssiThreshold を超える必要がある秒数の合計数を指定します。JamDetection:Window より小さい値にしてください。範囲: 1~63。
JamDetection:Debug:HistoryBitmap
形式
64 ビット値
説明
モニタリングとデバッグのために、ジャム検出状態の履歴に関する情報を提供します。

たとえば、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 リポジトリをご覧ください。