導(dǎo)語(yǔ)
邊界路由器位于網(wǎng)絡(luò)的邊沿顶猜,可以通過(guò)使用其內(nèi)建的網(wǎng)絡(luò)接口與外界交流,這些網(wǎng)絡(luò)接口如wifi邑蒋,以太網(wǎng),串口等按厘。
在contiki中現(xiàn)在最常用的邊界路由應(yīng)用實(shí)現(xiàn)了基于串口的接口医吊,叫做SLIP,它允許使用腳本(腳本如tools/tunslip6文件夾中的tunslip6)刻剥,通過(guò)串口連接一個(gè)給定的節(jié)點(diǎn)到主機(jī)(host),創(chuàng)建一個(gè)隧道網(wǎng)絡(luò)接口遮咖,這樣就能獲得IPv6前綴來(lái)設(shè)置全局網(wǎng)絡(luò)IPv6地址了滩字。
- 代碼設(shè)置
邊界路由應(yīng)用位于examples/ipv6/rpl-border-router造虏,關(guān)鍵代碼如下:
/* 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");
}
一旦前綴被分配好了,節(jié)點(diǎn)就會(huì)設(shè)置前綴并將自己轉(zhuǎn)換成根節(jié)點(diǎn)(DODAG)麦箍。
一般把邊界路由器配置成一個(gè)非睡眠設(shè)備漓藕,射頻接收器一直打開(kāi),可以通過(guò)project-conf.h配置邊界路由器挟裂。
#undef NETSTACK_CONF_RDC
#define NETSTACK_CONF_RDC nullrdc_driver
邊界路由器默認(rèn)包含一個(gè)內(nèi)建的web server享钞,顯示關(guān)于網(wǎng)絡(luò)的信息,如immediate neighbors(1-hop located)和已知的routes to nodes in their networks。
為了打開(kāi)web server栗竖,WITH_WEBSERVER標(biāo)志位要被打開(kāi)暑脆,這默認(rèn)添加到httpd-simple.c
- 上手實(shí)驗(yàn)
使用avr-atmega128rfa1平臺(tái),打開(kāi)終端狐肢,輸入
make TARGET=avr-atmega128rfa1 savetarget
make border-router
make border-router.hex
使用atmel studio自帶的Device Programming工具添吗,利用JTAGICE mkii將hex文件燒寫(xiě)到節(jié)點(diǎn)中。
然后將節(jié)點(diǎn)連接到ubuntu虛擬機(jī)份名,使用如下命令查看連接:
dmesg | grep ttyUSB
運(yùn)行contiki/tool文件夾下的tunslip6工具碟联,在這之前要先對(duì)它進(jìn)行編譯:
cd tools
cc tunslip6.c -o tunslip6
接著運(yùn)行:
sudo ./tunslip6 aaaa::1/64 -s /dev/ttyUSB0 -B 38400
注:其中38400是串口通信的波特率,我嘗試了一下將aaaa改為bbbb僵腺,在后面的試驗(yàn)中ping6 aaaa::1是ping不通的ping6 bbbb::1就可以ping通了鲤孵,因此這個(gè)命令應(yīng)該就是給地址加一個(gè)前綴。
可以看到:
此時(shí)可以輸入如下命令:
ping6 aaaa::1
可以看到如下(按ctrl+c結(jié)束程序):
至此辰如,試驗(yàn)結(jié)束普监。