例如,我们有一个RPL树,以及几个数据发送者向sink发送数据包。过了一会儿,其中一个发送者停止向父节点发送或转发数据,因为我们假设父节点可疑。它不是通过可疑节点发送或转发数据包,而是通过从父列表中选择的替代父节点通过替代路径转发数据包。在 Contiki 中实现此场景的有效且简单的方法是什么?
问问题
231 次
1 回答
1
您要做的是将特定父母(或多个父母)列入黑名单。为此,您可以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
。
于 2018-09-13T13:39:56.960 回答