如何通过替代父路径通过备用路径转发数据包?

问题描述 投票:0回答:1

例如,我们有一个RPL树,以及几个数据发送器将数据包发送到接收器。一段时间后,其中一个发件人停止向父节点发送或转发数据,因为我们假设父节点是可疑的。它不是通过可疑节点发送或转发数据包,而是通过从父列表中选择的备选父节点通过备用路径转发数据包。在Contiki中实现此场景的有效且简单的方法是什么?

parent packet contiki cooja
1个回答
0
投票

您要做的是将特定父级(或多个父级)列入黑名单。为此,您可以向uint8_t is_suspicious添加一个新字段struct rpl_parent

我假设你已经有了设置这个标志的逻辑。然后,当在RPL(best_parent中的rpl-dag.c函数)中进行父选择时,您可以查看该标志并排除设置它的父项。

在现有代码中的if条件:

/* Exclude parents from other DAGs or announcing an infinite rank */
if(p->dag != dag || p->rank == INFINITE_RANK || p->rank < ROOT_RANK(dag->instance)) {
  if(p->rank < ROOT_RANK(dag->instance)) {
    PRINTF("RPL: Parent has invalid rank\n");
  }
  continue;
}

你会添加另一张支票:... || p->is_suspicious)

最后,每当父级的is_suspicious状态发生变化时,您需要重新触发父选择算法。一种方法是调用函数rpl_process_parent_event

© www.soinside.com 2019 - 2024. All rights reserved.