我正在尝试测试文件rpl-icmp6.c中的DIO消息是否来自接收DIO的节点的子代。谁能帮我?

我已经看到contiki并没有列出孩子的清单,只有父母。因此,我不确定该怎么做?

伪代码:

if(senderOfDIO is child) {

   check the rank of the packet

}


谁能帮我?

最佳答案

如果您在存储模式下运行RPL,则可以通过查看指向它们的路由并检查路由的下一跳是否与端点addess相同来判断直接连接的节点。

这是循环直接子代的代码示例:

#include "ipv6/uip-ds6-route.h"

static void
iterate_children(void)
{
  uip_ds6_route_t *route;

  /* Loop over routing entries */
  route = uip_ds6_route_head();
  while(route != NULL) {
    const uip_ipaddr_t *address = &route->ipaddr;
    const uip_ipaddr_t *nexthop = uip_ds6_route_nexthop(route);
    if(uip_ipaddr_cmp(&address, &nexthop)) {
       /* direct child: do somehting */
    }

    route = uip_ds6_route_next(route);
  }
}


要专门解决您的问题,请使用类似以下的内容:

static uint8_t
is_direct_child(uip_ipaddr_t *address)
{
  uip_ds6_route_t *route;

  route = uip_ds6_route_lookup(address);
  if(route != NULL) {
    const uip_ipaddr_t *nexthop = uip_ds6_route_nexthop(route);
    if(uip_ipaddr_cmp(&address, &nexthop)) {
       /* nexthop and the address are the same */
       return 1;
    }
  }
  return 0;
}

关于c - RPL child 名单Contiki,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43745521/

10-12 05:42