导语
边界路由器位于网络的边沿,可以通过使用其内建的网络接口与外界交流,这些网络接口如wifi,以太网,串口等。
在contiki中现在最常用的边界路由应用实现了基于串口的接口,叫做SLIP,它允许使用脚本(脚本如tools/tunslip6文件夹中的tunslip6),通过串口连接一个给定的节点到主机(host),创建一个隧道网络接口,这样就能获得IPv6前缀来设置全局网络IPv6地址了。
- 代码设置
边界路由应用位于examples/ipv6/rpl-border-router,关键代码如下:
/* Request prefix until it has been received */
while(!prefix_set) {
etimer_set(&et, CLOCK_SECOND);
request_prefix();
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
}
dag = rpl_set_root(RPL_DEFAULT_INSTANCE, &ipaddr);
if(dag != NULL) {
rpl_set_prefix(dag, &prefix, 64);
PRINTF("created a new RPL dag\n");
}
一旦前缀被分配好了,节点就会设置前缀并将自己转换成根节点(DODAG)。
一般把边界路由器配置成一个非睡眠设备,射频接收器一直打开,可以通过project-conf.h配置边界路由器。
#undef NETSTACK_CONF_RDC
#define NETSTACK_CONF_RDC nullrdc_driver
边界路由器默认包含一个内建的web server,显示关于网络的信息,如immediate neighbors(1-hop located)和已知的routes to nodes in their networks。
为了打开web server,WITH_WEBSERVER标志位要被打开,这默认添加到httpd-simple.c
- 上手实验
使用avr-atmega128rfa1平台,打开终端,输入
make TARGET=avr-atmega128rfa1 savetarget
make border-router
make border-router.hex
使用atmel studio自带的Device Programming工具,利用JTAGICE mkii将hex文件烧写到节点中。
然后将节点连接到ubuntu虚拟机,使用如下命令查看连接:
dmesg | grep ttyUSB
运行contiki/tool文件夹下的tunslip6工具,在这之前要先对它进行编译:
cd tools
cc tunslip6.c -o tunslip6
接着运行:
sudo ./tunslip6 aaaa::1/64 -s /dev/ttyUSB0 -B 38400
注:其中38400是串口通信的波特率,我尝试了一下将aaaa改为bbbb,在后面的试验中ping6 aaaa::1是ping不通的ping6 bbbb::1就可以ping通了,因此这个命令应该就是给地址加一个前缀。
可以看到:
此时可以输入如下命令:
ping6 aaaa::1
可以看到如下(按ctrl+c结束程序):
至此,试验结束。