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

How to forward data packets through an alternative path via an alternative parent?

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

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

我假设您已经具备设置此标志的逻辑。然后,在 RPL 中进行 parent 选择时(rpl-dag.c 中的 best_parent 函数),您可以查看标志并排除设置了它的 parent。

到现有代码中的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)

最后,每次 parent 的 is_suspicious 状态变化时,您都需要 re-trigger parent 选择算法。一种方法是调用函数 rpl_process_parent_event.