Contiki边界路由

导语

边界路由器位于网络的边沿,可以通过使用其内建的网络接口与外界交流,这些网络接口如wifi,以太网,串口等。


Contiki边界路由_第1张图片
Image.png

  在contiki中现在最常用的边界路由应用实现了基于串口的接口,叫做SLIP,它允许使用脚本(脚本如tools/tunslip6文件夹中的tunslip6),通过串口连接一个给定的节点到主机(host),创建一个隧道网络接口,这样就能获得IPv6前缀来设置全局网络IPv6地址了。

  1. 代码设置
      边界路由应用位于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

  1. 上手实验
      使用avr-atmega128rfa1平台,打开终端,输入
make TARGET=avr-atmega128rfa1 savetarget
make border-router
make border-router.hex

使用atmel studio自带的Device Programming工具,利用JTAGICE mkii将hex文件烧写到节点中。

Contiki边界路由_第2张图片
烧写界面

然后将节点连接到ubuntu虚拟机,使用如下命令查看连接:

dmesg | grep ttyUSB

Contiki边界路由_第3张图片
观察节点是否连接上虚拟机

  运行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通了,因此这个命令应该就是给地址加一个前缀。
  可以看到:

Contiki边界路由_第4张图片

  此时可以输入如下命令:

ping6 aaaa::1

可以看到如下(按ctrl+c结束程序):

Contiki边界路由_第5张图片

至此,试验结束。

你可能感兴趣的:(Contiki边界路由)