如何解决以RPLContiki / Cooja的存储模式访问路由表
- 我能够成功运行示例代码(../examples/6tisch/simple-node),其中已实现rpl-lite,并且每隔60秒,网络根目录将打印其路由表。由于它使用rpl-lite,因此只有根节点才能存储路由表。
- 我正在寻找用于在此程序中实现(存储模式)的示例代码,并每60秒打印一次每个节点的路由表。
我在制作文件中添加了“ MAKE_ROUTING = MAKE_ROUTING_RPL_CLASSIC”以启用RPL-Classic
#include "contiki.h"
#include "sys/node-id.h"
#include "sys/log.h"
#include "net/ipv6/uip-ds6-route.h"
#include "net/ipv6/uip-sr.h"
#include "net/mac/tsch/tsch.h"
#include "net/routing/routing.h"
#define DEBUG DEBUG_PRINT
#include "net/ipv6/uip-debug.h"
/*---------------------------------------------------------------------------*/
PROCESS(node_process,"RPL Node");
AUTOSTART_PROCESSES(&node_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(node_process,ev,data)
{
int is_coordinator;
PROCESS_BEGIN();
is_coordinator = 0;
#if CONTIKI_TARGET_COOJA || CONTIKI_TARGET_Z1
is_coordinator = (node_id == 1);
#endif
if(is_coordinator) {
NETSTACK_ROUTING.root_start();
}
NETSTACK_MAC.on();
{
static struct etimer et;
/* Print out routing tables every minute */
etimer_set(&et,CLOCK_SECOND * 60);
while(1) {
PRINTF("Routing entries: %u\n",uip_ds6_route_num_routes());
PROCESS_YIELD_UNTIL(etimer_expired(&et));
etimer_reset(&et);
}
}
PROCESS_END();
}
解决方法
这些步骤对我有用:
- 将
MAKE_ROUTING=MAKE_ROUTING_RPL_CLASSIC
添加到Makefile中以确保使用RPL Classic;存储模式默认为开启。 - 为方便起见,添加允许使用Contiki-NG日志记录模块的包含和定义:
/* Log configuration */
#include "sys/log.h"
#define LOG_MODULE "App"
#define LOG_LEVEL LOG_LEVEL_DBG
- 将此代码添加到
while(1)
循环中:
LOG_INFO("Routing entries: %u\n",uip_ds6_route_num_routes());
uip_ds6_route_t *route = uip_ds6_route_head();
while(route) {
LOG_INFO("Route ");
LOG_INFO_6ADDR(&route->ipaddr);
LOG_INFO_("/128 via ");
LOG_INFO_6ADDR(uip_ds6_route_nexthop(route));
LOG_INFO_("\n");
route = uip_ds6_route_next(route);
}
在根节点上的输出:
01:00.382 ID:1 [INFO: App ] Routing entries: 7
01:00.382 ID:1 [INFO: App ] Route fd00::205:5:5:5/128 via fe80::205:5:5:5
01:00.382 ID:1 [INFO: App ] Route fd00::204:4:4:4/128 via fe80::204:4:4:4
01:00.382 ID:1 [INFO: App ] Route fd00::208:8:8:8/128 via fe80::203:3:3:3
01:00.382 ID:1 [INFO: App ] Route fd00::203:3:3:3/128 via fe80::203:3:3:3
01:00.382 ID:1 [INFO: App ] Route fd00::207:7:7:7/128 via fe80::203:3:3:3
01:00.382 ID:1 [INFO: App ] Route fd00::206:6:6:6/128 via fe80::203:3:3:3
01:00.382 ID:1 [INFO: App ] Route fd00::202:2:2:2/128 via fe80::203:3:3:3
转发器节点上的输出:
01:00.899 ID:3 [INFO: App ] Routing entries: 4
01:00.899 ID:3 [INFO: App ] Route fd00::208:8:8:8/128 via fe80::206:6:6:6
01:00.899 ID:3 [INFO: App ] Route fd00::207:7:7:7/128 via fe80::206:6:6:6
01:00.899 ID:3 [INFO: App ] Route fd00::206:6:6:6/128 via fe80::206:6:6:6
01:00.899 ID:3 [INFO: App ] Route fd00::202:2:2:2/128 via fe80::202:2:2:2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。