Jam 检测

在 GitHub 上查看源代码

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

对于需要检测特定频道上信号干扰的设备认证,此功能非常有用。它可配置为满足每种类型认证的要求。

工作原理

干扰检测会在指定的时间段内监控节点的 RSSI(接收信号强度指示器),以确定信道是否已遭到干扰。

启用干扰检测后:

  1. 干扰检测状态设置为 false
  2. 节点会在每隔一秒的时间间隔内多次采样 RSSI。
  3. 如果整个一秒钟间隔内的 RSSI 始终高于每个样本的配置 RSSI 阈值,则该一秒钟间隔会被视为受到干扰。
  4. 如果在任意时间点,被干扰的一秒间隔的总数大于等于在之前配置的检测窗口秒数内的配置的繁忙时段秒数的总数,则在该时间点的干扰检测状态设置为 true
  5. 如果在任何时间点,被干扰的一秒间隔时间的总数小于上一个配置的检测窗口秒数内配置的繁忙时段秒数的总数,则在该时间点的干扰检测状态设为 false

历史记录位图

OpenThread APIwpantund 属性中,可以检索过去 63 秒内的位图。此位图表示在过去 63 秒中的每一秒,RSSI 是否超出了配置的 RSSI 阈值。

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

0xC248068C416E7FF0

转换为二进制后,系统会生成过去 63 秒内 RSSI 高于配置的 RSSI 阈值的每个实例:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

如果将检测窗口设置为 16 秒,并将繁忙时段设置为 8 秒,则在 51 秒时,干扰检测状态变为 true,因为这是在前 16 秒内至少有 8 秒的时间 RSSI 阈值被超出的第一种情况。在此示例中,干扰检测状态在接下来的 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_ENABLE 定义为 1

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

按选项

或者,在构建 OpenThread 时使用 -DOT_JAM_DETECTION=ON build 选项:

./script/build -DOT_JAM_DETECTION=ON

参数

干扰检测参数只能通过 OpenThread API、Spinel 协议或 wpanctl(用于网络协处理器 [NCP] 管理的 wpantund 命令行工具)进行配置。如果启用此功能但未进行后续配置,系统会应用默认值。

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

参数
RSSI 阈值
默认值
0 dBm
说明
指定 RSSI 阈值(以 dBm 为单位),如果 RSSI 高于此阈值,则视为信道被干扰。
检测期
默认值
63 秒
说明
指定用于检查信号干扰的时间范围(以秒为单位)。范围:1-63。
繁忙期
默认值
63 秒
说明
指定检测窗口内的总秒数,在此时间段内,RSSI 必须高于 RSSI 阈值才能触发干扰检测。必须小于检测期。范围:1-63。

API

OpenThread

您可以使用 Jam Detection API 直接在 OpenThread 应用中管理 Jam Detection 功能。OpenThread API 提供以下功能:

  • 启动和停止该功能
  • 查看卡顿检测状态
  • 管理所有参数
  • 检索当前的干扰检测历史记录位图
  • 注册在检测到卡顿时调用的回调函数

Spinel

Spinel 协议可让主机设备直接与 NCP 通信。此协议在 openthread/src/lib/spinel/spinel.h 中公开了提供以下功能的卡顿检测属性:

  • 启动和停止该功能
  • 查看卡顿检测状态
  • 管理所有参数
  • 检索当前的干扰检测历史记录位图

CLI

OpenThread

没有与此功能相关的 OpenThread CLI 命令。

wpantund

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

wpanctl 提供对以下 wpantund 属性的访问权限:

属性
JamDetection:Status
格式
布尔值
说明
只读。卡纸检测状态。指示当前是否检测到信号干扰。
JamDetection:Enable
格式
布尔值
说明
启用或停用干扰检测功能。
JamDetection:RssiThreshold
格式
dBm
说明
指定 RSSI 阈值(以 dBm 为单位),如果 RSSI 高于此阈值,则视为信道被屏蔽。
JamDetection:Window
格式
说明
指定用于检查信号干扰的时间范围(以秒为单位)。范围:1-63。
JamDetection:BusyPeriod
格式
说明
指定 JamDetection:Window 中的总秒数,在此时间段内 RSSI 必须高于 JamDetection:RssiThreshold 才能触发干扰检测。必须小于 JamDetection:Window。范围:1-63。
JamDetection:Debug:HistoryBitmap
格式
64 位值
说明
提供有关塞车检测状态历史记录的信息,以便进行监控和调试。

例如,如需获取 NCP 的卡顿检测状态,请执行以下操作:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

如需在 NCP 上将干扰检测 RSSI 阈值设置为 -45 dBm,请执行以下操作:

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

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