Google 致力于为黑人社区推动种族平等。查看具体行动

Jam 检测

在 GitHub 上查看源代码

要在任何 OpenThread 节点上提供可配置的信号干扰检测机制,请启用 Jam 检测功能。

此功能适用于需要检测特定频道信号干扰的设备认证。您可以将其配置为满足每种类型的认证的要求。

运作方式

Jam Detection 会在指定时间段内监控节点的 RSSI(接收信号强度指示器)以确定相应频道是否已被干扰。

启用 Jam 检测后:

  1. Jam 检测状态已设为 false
  2. 该节点会在每一秒的时间间隔内多次对 RSSI 进行采样。
  3. 如果整个 1 秒间隔的 RSSI 仍高于每个样本配置的 RSSI 阈值,则该 1 秒间隔会被视为卡顿。
  4. 如果汇总的卡住时间间隔为一秒超过或 等于配置的总数旺季秒(在上述配置值内)检测窗口该时间点的 Jam 检测状态设置为true中披露政府所要求信息的数量和类型。
  5. 如果汇总的卡住时间间隔为一秒小于配置的旺季秒(在上述配置值内)检测窗口该时间点的 Jam 检测状态设置为false中披露政府所要求信息的数量和类型。

历史记录位图

OpenThread APIwpantund 属性中,前 63 秒的位图可用于检索。此位图指示 RSSI 是否在之前的 63 秒内超过了配置的 RSSI 阈值。

例如,您可以检索以下位图:

0xC248068C416E7FF0

转换为二进制文件会生成 RSSI 超过过去 63 秒配置的 RSSI 阈值的每个实例:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

如果检测窗口设置为 16 秒,而繁忙期设置为 8 秒,则 Jam 检测状态会在 51 秒时变为 true,因为这是第一个符合 RSSI 阈值的实例都超出了前 16 秒中至少 8 秒的时间 在此示例中,Jam 检测状态将在接下来的 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(用于网络协处理器 (NCP) 管理的 wpantund 命令行工具)配置 Jam 检测参数。如果在未启用后续配置的情况下启用此功能,则系统会应用默认值。

使用以下参数自定义此功能:

参数
RSSI 阈值
默认值
0 dBm
说明
指定满足上述阈值的 RSSI 级别(以 dBm 为单位),超过此阈值时,就会认为频道发生了干扰。
检测窗口
默认值
63 秒
说明
指定要在其中检查信号干扰的窗口(以秒为单位)。范围:1-63。
繁忙时段
默认值
63 秒
说明
指定检测时段内的聚合秒数(此时,RSSI 必须超过 RSSI 阈值才能触发 Jam 检测)。必须小于检测时段。范围: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 命令。

Wantantund

使用 wpanctl CLI 管理 OpenThread NCP 配置的 Jam 检测功能。wpantund 会在 NCP 重置后保留所有 Jam 检测配置。

通过 wpanctl,您可以访问以下 wpantund 属性:

属性
JamDetection:Status
格式
布尔值
说明
只读。Jam 检测状态。指明当前是否检测到信号干扰。
JamDetection:Enable
格式
布尔值
说明
启用或停用 Jam 检测功能。
JamDetection:RssiThreshold
格式
dBm
说明
指定阈值,以 dBm 为单位,超过该阈值即视为通道被屏蔽。
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

如需将 Jam 检测的 RSSI 阈值设置为针对 NCP -45 dBm,请执行以下操作:

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

如需详细了解 wpantund 属性,请参阅 wpantund GitHub 代码库