Thread 中讨论的其他器件: Z-stack、 CC2530
我的客户正在测试 ZigBee 网络、将 CC2652P 用作终端设备、以便与 Silabs 协调器进行通信。 他们发现、发送更新 PANID REQ 时协调器不会增加 nwkUpdateId 字段、因此 CC2652将转储该请求、新的 PANID 将不被接受。
是否有权变措施使 CC2652P 访问 更新 PANID REQ 而不增加 nwkUpdateId?
此致、
水阳
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我的客户正在测试 ZigBee 网络、将 CC2652P 用作终端设备、以便与 Silabs 协调器进行通信。 他们发现、发送更新 PANID REQ 时协调器不会增加 nwkUpdateId 字段、因此 CC2652将转储该请求、新的 PANID 将不被接受。
是否有权变措施使 CC2652P 访问 更新 PANID REQ 而不增加 nwkUpdateId?
此致、
水阳
您好、Shuyang、
根据黄某的评估:
1.从2017/R22 Zigbee 规范的附录 E 中:"网络管理器可以从 NIB 中递增 nwkUpdateId 参数、并将其包含在 Mgmt_nwk_Update_req...每个节点还应增加 nwkUpdateId 参数、并重置总传输计数和发送故障计数器。" 这就是 Z-Stack 要求 nwkUpdateId 递增的原因。
2. 您可以修改 ZDNwkMgr_ProcessMgmtNWkUpdateReq 中的以下 if 语句作为变通办法:
if ( Req.nwkUpdateId > _NIB.nwkUpdateId || ( Req.nwkUpdateId == 0 && _NIB.nwkUpdateId == 0xFF ) )
请注意 、对于 RxOnWhenIdle 等于 false 的器件、将不会接收到任何网络通道变化。
此致、
Ryan
您好、Ryan、
客户尝试修改 ZDNwkMgr_ProcessMgmtNWkUpdateReq、但协调器发送的网络更新请求是 NWK 层消息、而不是 ZDP 层消息、因此堆栈会忽略该消息、 并且永远不会触发 ZDNwkMgr_ProcessMgmtNWkUpdateReq。
是否有办法在 CC2652中直接处理 NWK 层或 MAC 层消息? 在 CC2530的堆栈中、有一个称为 rxStartIsr 的 API 来处理 Mac 层、CC2652的堆栈是否具有类似的 API?
谢谢。
BR、
水阳
您好、Ryan、
请在 Silabs 设备之间查找监听器日志以进行 PAN ID 更新。 在此日志中、 PAN ID 已成功更新为0x4444。 但对于 CC2652、NWK 更新数据包将被忽略、PAN ID 将不会更新。

e2e.ti.com/.../test11_5F00_2channel_5F00_ok.cubx
BR、
水阳
您好、Ryan、
客户在定义了 NWK_Manager 的情况下进行了尝试,但 仍然没有调用 pZDNwkMgr_NetworkUpdateCB。
他们现在正尝试 直接截取 MAC 层消息、以实现需要一个 API 来解密 MAC 层消息。 他们在 SSP.h 中找到了一个 API、如下所示、但找不到任何相关文档。
/* * Secure/Unsecure a network PDU */ extern ZStatus_t SSP_NwkSecurity(uint8_t ed_flag, uint8_t *msg, uint8_t hdrLen, uint8_t nsduLen);
您能否确认这是否是用于解密 MAC 层消息的正确 API、并提供一些有关如何使用此 API 的说明和示例? 例如,参数 ed_FLAG 和*msg 代表什么?
谢谢。
BR、
水阳
在 ZD_NWK_mgr.c 中、pZDNwkMgr_NetworkUpdateCB 声明为 NULL、如果希望函数生效、则必须更改该函数(填充所需的操作)。
SSP_NWKSecurity 是用于保护(ed_flag=0)或不安全(ed_flag=1) NWK 层数据包的 API。 MSG 是 macMcpsDataInt_t -> sData_t ->*p 和 hdrLen/nsdualen 对应于 NLDE_FrameFormat_t 参数的指针。 由于数据包加密/解密由预构建的 Z-Stack 库处理、因此不会共享任何资源、也不会被开发人员直接使用。
此致、
Ryan
Q1:当 CC2652在 NWK 更新消息中收到 nwkUpdateId 字段累加时、ZStack 可以触发 pZDNwkMgr_NetworkUpdateCB。 否则,不会触发 pZDNwkMgr_NetworkUpdateCB。
ZStack 似乎丢弃了非法的 NWK 更新消息。
:μ A
我尝试使用 SSP_NWKSecurity()对监听器中的解密纯文本数据进行加密,以验证如何使用此 API。

测试代码如下:
#if 1.
// NWK 密钥为2C:AC:D1:99:CE:A5:6E:00:94:0E:10:59:E6:AF:1B:1A
uint8_t tmpSta = 0xFC;
uint8_t tmpHdrLen = 36;
uint8_t tmpNsduLen = 6;
uint8_t tmpPlainTextData[36]={0x09、0x12、0xFC、0xFF、0x00、 0x00、0x01、0x64、0x46、0x12、 0x6E、0xFE、0xFF、0xE2、0x0A、 0x68、
0x28、0xE1、0x3B、0x07、0x00、 0x46、0x12、0x6E、0xFE、0xFF、 0xE2、0x0A、0x68、0x00、
0x08、0x60、0xAB、0xAF、0xEA、 0x13};
uint8_t tmpCipherTextData[36]={0x09、0x12、0xFC、0xFF、0x00、 0x00、0x01、0x64、0x46、0x12、 0x6E、0xFE、0xFF、0xE2、0x0A、 0x68、
0x28、0xE1、0x3B、0x07、0x00、 0x46、0x12、0x6E、0xFE、0xFF、 0xE2、0x0A、0x68、0x00、
0xF7、0xCE、0xC2、0xB7、0xCA、 0xB5};
uint8_t isEncrypt = 0;//0 -加密;1 -解密
// SSP_NWKSecurity (uint8_t ed_flag、uint8_t *msg、uint8_t hdrLen、uint8_t nsduLen);
tmpSta = SSP_NWKSecurity (isEncrypt、tmpPlainTextData、tmpHdrLen、tmpNsdualLen);
_debug_printf_sub ("加密:STA = 0x%x、0x%02x%02x%02x%02x %02x%02x %02x %02x %02x %02x%02x %02x %02x %02x%02x%02x 0x%02x 0x%02x %02x %02x %02x %02x 02x %02x 02x %02x 02x %02x 02x %02x %02x 02x 02x %02x
TmpSta、
tmpPlainTextData[0]、tmpPlainTextData[1]、tmpPlainTextData[2]、tmpPlainTextData[3]、
tmpPlainTextData[4]、tmpPlainTextData[5]、tmpPlainTextData[6]、tmpPlainTextData[7]、
tmpPlainTextData[8]、tmpPlainTextData[9]、tmpPlainTextData[10]、tmpPlainTextData[11]、
tmpPlainTextData[26]、tmpPlainTextData[27]、tmpPlainTextData[28]、tmpPlainTextData[29]、
tmpPlainTextData[30]、tmpPlainTextData[31]、tmpPlainTextData[32]、tmpPlainTextData[33]、tmpPlainTextData[34]、tmpPlainTextData[35]);
#endif
打印结果如下:
>>> zclSampleLight_processKey[2991]:加密:STA = 0x0、0X0912fcff 00000164 46126efe e20a6800 0x0860 ABAFE13
>>> zclSampleLight_processKey[2991]:加密:STA = 0x0、0X0912fcff 00000164 46126efe e20a6800 0x0860 ABAFE13
打印的结果显示 SSP_NWKSecurity()已成功执行。 我可以从何处获取加密的结果数据?
如果您可以提供解密示例以帮助我们理解、那将非常好。
抱歉、测试代码中出错:uint8_t tmpHdrLen = 36是错误;
我将 tmpHdrLen 的值更改为30,运行后的打印结果如下:
>>> zclSampleLight_processKey[2991]:加密:STA = 0x0、0X0912fcff 00000164 46126efe。 e20a6800 0x280E 00000011
NWK 有效载荷看起来是新的、但看起来不正确。
我的测试过程如下:
步骤1:我通过监听器获取协调器广播的链路状态数据;
步骤2:将这些数据添加到测试代码中、生成固件并将其烧写到 CC2652中;
步骤3:CC2652加入协调器所在的网络;
步骤4:按键触发 CC2652执行测试代码以解密操作;
此过程是否有问题?
你好,Howjie,
pZDNwkMgr_NetworkUpdateCB 仅在 nwkUpdateId 递增时触发。 这 符合前面提到的 Zigbee 规范部分。 您可以联系 Silicon Labs 来确定其器件不能相应运行的原因。
Z-Stack 使用 nwkApplyNwkSec 来应用网络级安全性(对传出进行加密)。 在使用 SSP_NWKSecurity (解密)验证安全性之前、NLDE_ParseMsg 用于解析传入的 NWK 消息。
此致、
Ryan