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.

[参考译文] CC1312R7:使用 wftl 时树不正确

Guru**** 2482105 points
Other Parts Discussed in Thread: CC1312R7

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1269384/cc1312r7-incorrect-tree-using-wfanctl

器件型号:CC1312R7

我使用 CC1312R7作为边界路由器、 该路由器位于定制设计的 PCB 上、 程序为 ns_br_CC1312R7_tirtos7_tclang SDK 7.10.00.98、可构成具有70个节点的网络、所有这些节点都具有 ns_CoAP_nations_src_LP_CC1312R7_tirtos7_tclang SDK 7.10.98。 边界路由器位于其自己的 PCB 上、连接到运行 Linux 的 Toradex CPU、该 CPU 使用 wfantund 启动接口和 Wi-SUN 层、并查询网络树、它使用 wdexttl 和"Set dodagroutedest + get dodagroute"命令。 在测试过程中,我们发现一些由 wdextl 生成的树由于无效的 IPv6地址和大于网络中节点数的路径成本而不正确,如下所示。

路径成本:126
2020:abcd:0000:0000:0212:4b00:2964:5dd8
2020:abcd:0000:0000:0212:4b00:29c6:df59
2020:abcd:0000:0000:0212:4b00:29c6:df5c
0ddf:037d:915d:609c:15b9:636f:6e6e:6563
7465:6410:ff44:4d50:4139:3939:3933:3030
3837:457b:59ac:0cdf:f7dd:8186:0e00:59c2
3015:398d:fbde:5652:e5d3:963E:1167:35b4
835c:ac69:98ab:66b2:23b7:8928:7bbb:66fe
0233:3520:5324:d935:3b23:abfc:08eb:66dc
52c1:8c92:28bb:b583:839e:c754:d9d5:6aa2
9253:3ad6:5d3b:4cd9:351e:0020:ddb6:e01a
30c1:dd1a:7971:391a:98cd:331a:da2b:9d7f
8185:856d:c2dc:286d:6531:56ae:a997:043E
8c83:668e:35e1:3f5c:20cd:ffdd:78f1:266e
aedb:5fc8:55db:6b50:ae40:8e15:1109:39f0
3f00:7673:e475:0b91:f1e9:2290:b588:9823
d12a:13a7:10c3:ab50:dd57:d14b:0489:1244
3dc1:D525:ad79:4ee9:e303:17b7:8d4c:4b18
3d80:9a8d:3997:38ba:f72b:01c8:5fad:0a08
f98f:5dbd:1e65:8037:9bdd:1f02:c489:c664
e2dd:dac9:4e5e:9a35:3d84:f89e:52ba:9ab6
7930:22cd:c99e:20a3:9506:3624:0f27:a9b6
0274:efe1:6ada:062A:9a62:aa66:16d1:0feb
1b3a:84dd:fc64:e692:af71:739d:b50c:d397
c069:cf5f:8812:3bc0:ca2c:e320:6bb9:0521
00e5:a6ec:79e7:c347:d18c:82c4:dd80:eb1e
6c58:fe23:e99a:268c:67f1:537e:b7b9:2717
95cb:a26f:85e8:0a6d:c4ed:65cb:9585:09f6
1828:d89b:22b3:aa1b:bffc:6ab7:5aea:bb30
fc9e:a137:4b6e:8982:c276:d5cf:e12d:A170
c53f:c027:85b6:64ea:a921:3a05:f3f5:8336
39de:3fa4:5f54:71b8:9c3d:8f8c:13bb:1386
3653:dabb:c6f7:b5d2:d80d:616b:DDC1:56e2
DEE4:13a2:8d82:d72a:ea41:f3f7:0394:8e8f
2bf4:3d3a:CC24:6867:8fef:a38b:C8D5:5ef8
e436:8d49:4529:acc0:041A:95da:1609:620e
ee82:8980:2423:100d:5ee2:D125:2573:df80
e3eb:5cd0:522d:06fa:7591:9354:e77c:20b7
07b9:c9cd:fabc:3095:0147:2649:7255:fb07
ac68:71dB:8fe1:9eec:ffdd:db30:d23b:a08c
1e1b:cf8a:5ab2:64db:c7ef:EFEC:8e02:c8d0
69e8:b860:34be:8a60:80d5:884b:9db3:d35c
f31c:e184:5b84:4743:cec5:ffed:dd22:f467
a637:b3dd:b791:749c:1676:8c09:3b58:80eb
6518:2d75:fbf0:2031:58b0:9394:ae60:e894
22e5:b2a3:ca6c:558a:1a0c:f623:db11:b97d
14bd:00a6:a056:1b7e:0ca8:5901:Babb:17d6
c085:511d:7b53:750c:c0a4:abef:9c3b:8075
4aa1:b9b9:33f1:efa5:5f3b:57d0:0cda:bf97
c494:e8f4:dd95:c843:f69c:0945:c496:aec0
fb3c:7023:99df:3246:eb1c:2b8b:1dde:1d08
6906:fec:f35a:6c8e:a8e3:bb0c:0bF1:8763
deea:010d:7de2:45b1:a95e:2a0d:e676:15c7
9c36:969c:a302:688c:d960:e29d:53eb:f0CF
6b59:4136:f4c7:0ed0:9961:a4a3:c9b4:8e65
d5db:2cef:041F:b8a5:e8be:90cb:cf5d:844c
3f8a:11a8:ed2b:17c4:409f:a414:5100:4d06
CB16:6e64:4118:2ec0:14a9:8a6a:64aa:55ea
60a9:9d47:7d98:7f60:6d6b:3d70:4865:cd81
6790:7b8b:b0f6:31c0:79ce:be97:1fa0:7a0d
4e97:473a:c88e:fdc8:534f:396d:a5cc:2196
a579:cec6:a186:6b07:389d:318e:55d5:d77e
70c5:4f1c:6c2b:ebde:bd60:d87c:c4e5:a5a5
2771:DA70:c03a:805e:ca60:4cc9:99f3:17bd
3210:314c:3514:0300:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
8700:3400:0000:0000:0000:0000:0000:0000:0000
0000:0ddf:0000:0087:0260:2020:abcd:0000
0000:0212:4b00:29c6:df5c:0000:0212:4b00
2964:5dd8:2020:abcd:0000:0000:0212:4b00
29c6:df65:1633:1633:0010:45b4:5444:7d91
5d60:9c15:61ff:4449:4d45:4333:0212:4b00
29c6:df2d:2020:abcd:0000:0000:0212:4b00
2964:5dd8:1633:98da:0021:dfee:6045:5599
c0ff:0149:6e67:7265:736f:2073:6f6c:6363
6974:7564:0a00:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
0000:0000:0000:0000:0000:0000:0000:0000:0000
前三行似乎对应于有效的 IPv6地址、但其余行似乎是随机值、就好像它正在访问超出应有范围的内存空间。

查找生成树的函数( github.com/.../SpinelNCPInstance.cpp行724)、可以观察到在 for 循环中、用于迭代的条件 条目 PTR 是" x < DODAG_ROUT_SIZE *(PATH_COSUITE + 1) "而不是使用的值 长度

静态 int
UNPACK_DODAG_ROUTE (const uint8_t * data_in、spinel_size_t data_len、boost::any& value)
{
uint8_t * entry_ptr = NULL;
spinel_size_t entry_len = 0;
spinel_size_t len = 0;
len = spinel_datatype_packed (data_in、data_len、"D"、&entry_ptr、&entry_len);

int path_cost = entry_ptr[0];
std::string ret_str ="\n 路径成本:"+ ANY_TO_STRING (path_cost)+"\n";

int count = 0;
std::string last_ip_str ="";
for (int x = 1;x < DODAG_route_size*(path_cost + 1);x+=2){

字符 str_to_add[4];
sprintf (str_to_add、"%02x"、entry_ptr[x]);
//我们想获取列表中的最后一个 IP 地址,17到32
if (((16*(path_cost))< x)&&(x <((16*(path_cost + 1))))
{
last_ip_str += str_to_add;

RET_str.append (str_to_add);

sprintf (str_to_add、"%02x:"、entry_ptr[x + 1]);

if (((16*(path_cost))< x)&&(x <((16*(path_cost + 1))))
{
last_ip_str += str_to_add;

RET_str.append (str_to_add);
计数+= 2;
if ((count % 16 == 0)&&(count!= 0)){
RET_str.pop_back ();
RET_str.append ("\n");

值= ret_str;
int ret = kWPANT45g Status_Ok;

if (webserver_app ==1)
{
//删除最后一个字符:从 last_ip_str
if (!last_ip_str.empty ())
{
last_ip_str.erase (std::prev (last_ip_str.end ()));

//将:替换为_
//:在 Linux 中的文件名在技术上是有效的,但在 Windows 中不是有效的
for (int i = 0;i < last_ip_str.length ();++i)
{
if (last_ip_str[i]==':')
last_ip_str[i]='_';

//将第一个 IP 地址转换为文件的名称
std::string dodpg_route_file_name = app_path + last_ip_str +'-'+ dodpg_route_beg_str;
std::ofstream myfile (dodarg_route_file_name);
myfile <<(ret_str)<< std:endl;
myfile.close();


返回支架;

我更改了此条件、现在可以正确打印了。 此外、我使用了 len 变量来重新计算 path_cost =((len -1)/16)- 1 ,获得正确的结果,从而解决不正确的网络树生成问题。 但是、我想知道为什么边界路由器为 路径成本

您以前是否曾观察过此行为?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Franco:

    感谢您发布有关该问题的详细说明以及可能的解决方法。 我们还没有看到这个问题。 是在特定的网络规模后还是在小型网络(工作台上有2 - 3个节点的网络)测试中观察到?

    此致、
    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sid 您好!

    感谢您发送编修。 对于最多包含20个节点的网络、我们还没有遇到此问题。 但是、当我们将网络规模增加到70个节点时、就开始发现这个问题。 在我们有70个节点的最新测试中、每个节点每15分钟传输1KB 的数据、每1小时生成一次树。 我们发现,25%的树在 dodagroute 中至少有一个错误。

    此致、Franco

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Franco:

    它是否总是返回相同的路径成本? 此外,你的修复到位它是修复路径成本还是它仍然提供错误的忏悔?

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sid:  

    不、路径成本会发生变化。 有时、路径开销值很常见、但不正确、例如3、4或6、 在其他时候、这个值非常高、在100或200以上。 我将通过比较 NCP 发送的路径成本与测试期间生成的一个设备上的日志分享给您。 条目_ptr[0] 计算出的比较器 长度 链接。 我们每小时都生成树。

    在日志中、您可以看到日期、设备地址、NCP 的路径成本、计算出的路径成本和 NCP 发送的字节数。

    2023年09月07日18:37:37 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 35、  pathCost calc.:3、len:65
    2023年09月07日20:38:33 [error] 212:4b00:29c6:df64, pathCost Incorrect: 6,  pathCost calc.: 2, len: 49
    2023年09月07日21:39:05 [error] 212:4b00:29c6:df64, pathCost Incorrect: 46,  pathCost calc.: 2, len: 49
    2023年09月08日03:40:15[错误] 212:4b00:29c6:df64, pathCost Incorrect: 91,  pathCost calc.: 3, len: 65
    2023年09月08日06:42:09 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 24、  pathCost calc.:3、len:65
    2023年09月08日07:42:57 [错误] 212:4b00:29c6:df64, pathCost Incorrect: 51,  pathCost calc.: 2, len: 49
    2023年09月08日08:43:13 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 51、  pathCost calc.:2、len:49
    2023年09月08日10:44:23 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 107、 pathCost calc.:3、len:65
    2023年09月08日14:46:32[ERROR] 212:4b00:29c6:df64, pathCost incorrect: 3,  pathCost calc.: 2, len: 49
    2023年09月08日17:47:50 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 232、 pathCost calc.:3、len:65
    2023年09月08日20:50:19 [error] 212:4b00:29c6:df64, pathCost Incorrect: 50,  pathCost calc.: 2, len: 49
    2023年09月09日03:57:20 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 179、 pathCost calc.:3、len:65
    2023年09月09日10:03:01 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 7、  pathCost calc.:3、len:65
    2023年09月09日15:06:36 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 235、pathCost calc.:3、len:65
    2023年09月09日17:08:52 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 3、  pathCost calc.:2、len:49
    2023年09月09日20:10:26 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 54、  pathCost calc.:2、len:49
    2023年09月09日22:12:12[ERROR] 212:4b00:29c6:df64, pathCost incorrect: 147, pathCost calc.: 3, len: 65
    2023年09月10日00:14:02 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 138、 pathCost calc.:2、len:49
    2023年09月10日01:15:19 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 18、  pathCost calc.:2、len:49
    2023年09月10日05:17:57 [error] 212:4b00:29c6:df64, pathCost Incorrect: 6,  pathCost calc.: 2, len: 49
    2023年09月10日08:20:18[ERROR] 212:4b00:29c6:df64, pathCost correct: 134, pathCost calc.: 2, len: 49
    2023年09月10日09:21:15[错误] 212:4b00:29c6:df64, pathCost Incorrect: 35,  pathCost calc.: 3, len: 65
    2023年09月10日10:22:39 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 211、 pathCost calc.:3、len:65
    2023年09月10日16:26:39 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 74、  pathCost calc.:2、len:49
    2023年09月10日17:28:27 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 143、 pathCost calc.:3、len:65
    2023年09月10日20:31:43 [error] 212:4b00:29c6:df64, pathCost Incorrect: 134, pathCost calc.: 2, len: 49
    2023年09月10日21:32:59 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 155、 pathCost calc.:3、len:65
    2023年09月11日02:36:27 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 75、  pathCost calc.:3、len:65
    2023年09月11日03:37:51 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 4、  pathCost calc.:3、len:65
    2023年09月11日05:40:28 [ERROR] 212:4b00:29c6:df64、pathCost Incorrect: 210、 pathCost calc.:2、len:49

    可以观察到、NCP 发送的字节数正确、但是此问题出现在 for 循环 来自 UNPACKE_DODAG_ROUY()  当使用 条目_ptr[0] 显示为控制变量。

    安装此修复程序后、NCP 会继续发送不正确的值、但 UNPACKE_DODAG_ROUY() 功能生成一个正确的树,我们知道这是 NCP 的错误行为。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Franco:

    我将检查实际应该返回什么值。 如果它适用于不到20个节点的网络、我很好奇控制变量是否有一些逻辑问题。

    此致、
    SID