某些高级功能是可选的,具体取决于目标硬件平台是否支持这些功能。
自动添加帧正在等待处理
IEEE 802.15.4 定义了父级和子级之间的两种数据传输方法:直接传输和间接传输。后者主要用于大多数休眠状态的休眠设备 (SED),后者会定期唤醒设备以向父设备轮询队列中的数据。
直接传输 - 父级会将数据帧直接发送到最终用户设备
间接传输 - 父文件保留数据,直到其预期的最终设备发出请求
在间接情形中,子终端设备必须先轮询父设备,以确定是否有任何数据可用。为此,子级会发送父级请求确认的数据请求。然后,父设备会确定它是否具有子设备的任何数据;如果是,它会向子设备发送数据包,以确认接收数据。
如果无线装置支持在 SED 的传出确认中动态设置帧待处理位,则驱动程序必须实现源地址匹配 API 才能启用此功能。OpenThread 使用此 API 告知电台设置针对哪些帧设置帧待处理位。
如果无线装置不支持动态设置帧待处理位,无线装置可能会对来源地址匹配 API 进行存根以返回 OT_ERROR_NOT_IMPLEMENTED
。
通过无线电进行能源扫描/检测
能耗扫描/检测功能要求无线电芯片对选定通道上呈现的能量进行采样,并将检测到的能量值返回到上层。
如果未实现此功能,IEEE 802.15.4 MAC 层会发送/接收信标请求/响应数据包,以评估通道上的当前能量值。
如果无线电芯片支持能耗扫描/检测,请确保通过设置宏 OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0
停用软件能耗扫描逻辑。
mbedTLS 硬件加速
mbedTLS 在主配置头文件 mbedtls-config.h
中定义多个宏,以便用户启用 AES、SHA1、SHA2 和其他模块的替代实现以及基于 GF (p) 模块的椭圆曲线加密(ECC) 的各个函数。如需了解详情,请参阅 mbedTLS 硬件加速。
OpenThread 不启用这些宏,因此对称加密算法、哈希算法和 ECC 函数默认使用软件实现。这些实现需要大量的内存和计算资源。为了获得最佳性能和更好的用户体验,我们建议启用硬件加速功能,而不是软件来实现上述操作。
如需在 OpenThread 中启用硬件加速,应将以下 mbedTLS 配置头文件添加到平台的 CMake 文件中的 ot-config
编译定义中:
- 主配置,用于定义 OpenThread 中使用的所有宏:
/openthread/third-party/mbedtls/mbedtls-config.h
- 用户专属配置,定义模块和函数的替代实现:
src/platform-name-mbedtls-config.h
来自 nrf52811.cmake
的示例:
target_compile_definitions(ot-config INTERFACE "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\"" )
mbedtls-config.h
中注释的宏不是必需的,可以在用户特定的配置头文件中启用硬件加速。
如需查看特定于用户的完整示例配置,请参阅 ot-efr32
中的 mbedtls_config_autogen.h
文件。
AES 模块
OpenThread Security 采用 AES CCM(采用 CBC-MAC)计数器来加密/解密 IEEE 802.15.4 或 MLE 消息,并验证消息集成代码。对于 AES CCM 基本功能调用,硬件加速至少应支持基本 AES ECB(电子代码簿)模式。
如需使用备用 AES 模块实现,请执行以下操作:
- 在用户特定的 mbedTLS 配置头文件中定义
MBEDTLS_AES_ALT
宏 - 使用
MBEDTLS_CPPFLAGS
变量表示aes_alt.h
文件的路径
SHA256 模块
OpenThread Security 根据 Thread 规范应用 HMAC 和 SHA256 哈希算法来计算网络密钥管理和 PSKc 生成的哈希值。
如需使用替代的基本 SHA256 模块实现,请执行以下操作:
- 在用户特定的 mbedTLS 配置头文件中定义
MBEDTLS_SHA256_ALT
宏 - 使用
MBEDTLS_CPPFLAGS
变量表示sha256_alt.h
文件的路径
ECC 函数
由于 mbedTLS 目前仅支持对部分 ECC 函数(而非整个模块)进行硬件加速,因此您可以选择实现 path-to-mbedtls/library/ecp.c
中定义的一些函数,以加快 ECC 点乘法速度。
曲线 secp256r1 用于 ECJPAKE 草稿的密钥交换算法。因此,硬件加速至少应支持 secp256r1 短曲线操作。有关示例,请参阅 SiLabs CRYPTO 硬件加速 mbedTLS。