我有一个看似简单但非常具体的问题。我的网络中有三种不同的节点类型:客户端,聚合器和边界路由器(rpl-border-router)。一个(或多个)客户端与聚合器之间应该存在单播连接。当聚合器获取某些特定类型的消息或达到某个阈值时,聚合器会将其他一些消息转发给边界路由器。 simple-udp-rpl文件夹中unicast-recevier(aggregator)的示例代码通过以下方式创建RPL DAG:
static void create_rpl_dag(uip_ipaddr_t *ipaddr) {
struct uip_ds6_addr *root_if;
root_if = uip_ds6_addr_lookup(ipaddr);
if(root_if != NULL) {
rpl_dag_t *dag;
uip_ipaddr_t prefix;
rpl_set_root(RPL_DEFAULT_INSTANCE, ipaddr);
dag = rpl_get_any_dag();
uip_ip6addr(&prefix, UIP_DS6_DEFAULT_PREFIX, 0, 0, 0, 0, 0, 0, 0);
rpl_set_prefix(dag, &prefix, 64);
PRINTF("created a new RPL dag\n");
} else {
PRINTF("failed to create a new RPL DAG\n");
}
}
但是,由于边界路由器自己创建RPL DAG,因此接收方(聚合器)无法向边界路由器发送消息。但是从接收器中删除此RPL代码会导致无法接收来自发送方(客户端)的消息。所以问题可能与RPL有某种联系。 ContikiRPL代码并没有很好的记录,我正在努力取得进展。非常感谢任何帮助。