Jam の検出

GitHub でソースを見る

OpenThread ノードで信号妨害検出の構成可能なメカニズムを提供するには、Jam 検出機能を有効にします。

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

仕組み

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

Jam 検出が有効になっている場合:

  1. Jam の検出状態が false に設定されています。
  2. ノードは RSSI を 1 秒ごとに複数回サンプリングします。
  3. 1 秒間隔ごとの RSSI がすべてのサンプルで設定された RSSI しきい値を上回っている場合、1 秒間隔が詰まっているとみなされます。
  4. 1 秒間隔の妨害の合計回数が、その時点の構成済み検出ウィンドウ内の構成済みのビジー期間の秒数以上の場合、その時点の Jam 検出状態は true に設定されます。
  5. 1 秒間の詰まりの集合数が事前構成済みの検出ウィンドウ内にある構成済みのビジー期間の秒数よりも少ない場合、その時点での Jam 検出状態は false に設定されます。

履歴のビットマップ

OpenThread APIwpantund プロパティでは、過去 63 秒のビットマップを取得できます。このビットマップは、RSSI が過去 63 秒ごとに構成済みの RSSI しきい値を超えたかどうかを示します。

たとえば、次のビットマップを取得できます。

0xC248068C416E7FF0

バイナリに変換すると、過去 63 秒間に RSSI が構成された RSSI しきい値を超えたすべてのインスタンスが生成されます。

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

検出期間を 16 秒に設定し、ビジー期間を 8 秒に設定すると、過去 16 秒で RSSI のしきい値が 8 秒以上になった最初のインスタンスとなるため、Jam の検出状態は 51 秒で true になります。この例では、Jam 検出状態は次の 13 秒間 true のままになります。

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

設定された RSSI しきい値が -45 dBm の場合、このビットマップは次のグラフで表されることがあります。

OT ジャム検出

有効にする方法

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

定義

Jam 検出を有効にするには、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

パラメータ

Jam Detection パラメータは、OpenThread API、Spinel プロトコル、または wpanctlwpantundコマンドライン ツールとしてネットワーク コプロセッサ(NCP)管理用としてのみ設定できます。この機能を有効にすると、後続の構成なしでデフォルト値が適用されます。

この機能をカスタマイズするには、次のパラメータを使用します。

パラメータ
RSSI しきい値
デフォルト値
0 dBm 未満
説明
チャンネルが詰まっていると判断するための、しきい値としての RSSI レベルを dBm 単位で指定します。
検出期間
デフォルト値
63 秒
説明
電波妨害の有無をチェックするウィンドウを秒単位で指定します。範囲: 1 ~ 63。
繁忙期
デフォルト値
63 秒
説明
Jam 検出をトリガーするには、検出ウィンドウ内の RSSI が RSSI しきい値を上回っている必要がある集計秒数を指定します。検出ウィンドウより小さくする必要があります。範囲: 1 ~ 63。

API

OpenThread

Jam Detection API を使用して、OpenThread アプリケーション内で Jam 検出機能を直接管理できます。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
説明
チャンネルがブロックされるとみなされるしきい値の RSSI レベルを dBm 単位で指定します。
JamDetection:Window
形式
説明
電波妨害の有無をチェックするウィンドウを秒単位で指定します。範囲: 1 ~ 63。
JamDetection:BusyPeriod
形式
説明
Jam 検出をトリガーする RSSI を JamDetection:RssiThreshold より大きくする必要がある、JamDetection:Window 内の集計秒数を指定します。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 リポジトリをご覧ください。