組建ad-hoc網絡,經過aodv協議實現互通

這幾天一直在作aodv協議的實現與組建ad-hoc網絡。php

根據不少前輩的經驗與本身實際操做的結果。作一個本身備份用的小的總結出來。linux

【此教程爲第一部分,是在已經配置好開發板aodv的狀況下,配置PC端AODV,配置開發板aodv在第二部分教程。編程

測試目標:ubuntu

Linux下的pc端與開發板端組建ad-hoc網絡,並實現aodv路由協議,相互ping通網絡

測試環境:socket

1.物理主機ubuntu10.04(kernel: 2.6.25.7)ide

a) 【虛擬機下ubuntu10.04平臺:kernel 2.6.38.7也已測試經過】工具

2.開發板:FriendlyARM tiny210 V2 (開發板平臺:linux 2.6.35.7)測試

3.Aodv-uu版本:aodv-uu-0.9.6ui

4.交叉編譯工具:arm-linux-gcc 4.5.1

測試過程:

1.首先應編譯一個新的內核。

配置內核

在編譯內核以前首先要配置內核,也就是決定哪些功能編入內核,哪些功能編入模塊。編入內核的功能能夠直接被內核調用,編成模塊的功能使用前需將模塊掛載入內核。未編入內核和模塊的功能將不能使用。

爲保證編譯過程的順利進行,首先需安裝編譯的基本環境。使用命令apt-get install build-essential kernel-package libncurses5-dev libqt3-headers。其中build-essential  爲基本的編程庫gcc, makekernel-package  Debian 系統裏生成 kernel-image 的一些配置文件和工具。libncurses5-dev meke menuconfig要調用的。

-------------------

Make menuconfig

手工定製內核,從新編譯內核將netfilter模塊加進去。

Networking support --->
   Networking options --->
      Networking packet filtering framework (Netfilter) --->
         IP: Netfilter configuration --->
            <*> IP Userspace queueing via NETLINK (OBSOLETE)

而後編譯,編譯內核過程請參考本人博客教程。

2.編譯好內核以後開始編譯aodv-uu-0.9.6

a) 解壓源代碼包

編譯前須要改動的信息:

lnx/kaodv-debug.h程序中添加頭文件 #include 

lnx/kaodv-netlink.c中將 static DECLARE_MUTEX(kaodvnl_sem); 

改成 static DEFINE_SEMAPHORE(kaodvnl_sem);

b) Make

c) Make install

這以後會把生成的kaodv.ko模塊放到/lib/modules/linux-2.6.35.7/aodv下。再之後要啓動aodv用戶態時,要先加載此目錄下的模塊到內核中。

3.組建ad-hoc網絡

【後來作的時候發現,把wifi模塊放到了PC機上,用iwconfig命令可以看到設備,ifconfig wlan1 up也可以起來,可是就是不可以iwlist wlan1 scan搜索到任何網絡,或者是ifconfig wlan1 up總提示不正常,資源暫時不能用之類的,這些都是沒有裝對應無線網卡驅動的問題。裝好驅動就沒事了。至於說的裝驅動,咱們測試平臺用的無線網卡爲rt3070,這個無線網卡用命令lsmod |grep rt* 已經能夠看到有rt2870sta的驅動和rt2800usb,因此咱們能夠用命令加載這個模塊,至於爲何會出現這種狀況,我暫時尚未研究,可參見文章http://ubuntuforums.org/showthread.php?t=2154070 便可解決此種問題。】

【一樣的,以前一直不是很清楚,若是隻有兩個終端,那麼還要aodv協議幹嗎用,因此只有兩臺設備的話,編譯aodv確實沒什麼用處。不用編譯aodv,直接組建上ad-hoc網絡也能夠。】

【這裏有一步很是重要,弄了好長時間,一直連不上ad-hoc,緣由在於pc端所採用的系統爲desktop系統,這裏就有了圖形用戶的界面,而在這個系統下會有兩種配置網絡的方式,一種爲network-manager,一種爲/etc/network/interfaces/etc/init.d/networking,這兩種方式不可以同時進行,也就是說再用下邊的這種方法設置ip的狀況下,要把network-manager禁用掉,否則會衝突。

停用network-manager便可。具體方法以下:

root@ubuntu :# /etc/init.d/network-manager stop

 

如以後想繼續使用network-manager,則 /etc/init.d/network-manager restart便可。

參考:http://www.linuxidc.com/Linux/2010-10/29031.htm

http://hi.baidu.com/tawnde/item/103a150d1e9abce6f45ba685

 

 

1.發起發:

    iwconfig wlan0 mode ad-hoc

    iwconfig wlan0 essid "aodv-adhoc"

    ifconfig wlan0 up

    ifconfig wlan0 192.168.1.1

    

2.接入方:

    iwconfig wlan0 mode ad-hoc

    ifconfig wlan0 up

    ifconfig wlan0 192.168.1.3

    iwlist wlan0 scan (確保能搜到aodv-adhoc網絡)

    iwconfig wlan0 essid aodv-adhoc

    iwconfig wlan0 查看cell是否爲iwlist搜出aodv-adhoc對應的cell,若是一致,則接入成功。

    

3.加載aodv模塊【兩端都須要加載】

    insmod kaodv.ko

    

4.運行aodv協議【兩端都須要運行】

    ./aodvd

 

    20:02:17.416 host_init: Attaching to rausb0, override with -i .

    20:02:17.548 aodv_socket_init: RAW send socket buffer size set to 221184

    20:02:17.548 aodv_socket_init: Receive buffer size set to 221184

    20:02:17.548 main: In wait on reboot for 15000 milliseconds. Disable with "-D".

    20:02:17.548 hello_start: Starting to send HELLOs!

    20:02:20.217 neighbor_add: 192.168.1.1 new NEIGHBOR!

    20:02:20.217 rt_table_insert: Inserting 192.168.1.1 (bucket 0) next hop 192.168.1.1

    20:02:20.217 nl_send_add_route_msg: ADD/UPDATE: 192.168.1.1:192.168.1.1 ifindex=3

    顯示發現鄰居192.168.1.1並將其添加到路由表中,協議運轉正常。

相關文章
相關標籤/搜索