我先详细描述下我的情况以及遇到的问题:
我修改了AODV-UU-0.9.6协议,使其可以移植到linux3.0.1的内核上,但移植了之后测试多跳的时候出现了问题。
三个节点都是ARM板(OK6410)+Linux3.0.1系统(以下称为节点A,B,C)。
我将kaodv.ko编译进了内核,然后放入了ARM中,网络的配置也都是按照网上所说,模式为ad-hoc,网络都配置在了一个网段192.168.1。然后将三个节点分别执行./aodvd应用程序,每个节点都能搜到剩余的两个相邻节点,查看路由表也能看到邻节点的路由,A,B,C都能相互ping通。
起初我用iptables的方式在节点A屏蔽了C的mac地址,其实说屏蔽也不对,就是用这个命令过滤掉C发来的包,让A只接受又B转发过来的包。
iptables –A INPUT –p ALL –m mac –mac-source 74:e5:0b:ef:66:f2 –j DROP
此时A的路由列表中没有C了,只剩下了B,然后节点A和节点C就不能ping通了(也就是没有通过B进行转发),后来我看大家的帖子说iptables有可能与AODV内的hooc函数有冲突,所以我进行了拉开测试: 
将A与C放的足够远,使之搜索不到对方的路由,再加入B,使之既能搜索到A也能搜索到C,此时A的路由列表中只有B,C的路由列表中也只有B,但这时用A去pingC,仍然不能ping通,也就证明中间节点B没有实现转发。
我看了大家之前讨论的帖子我打开内核里的IP:advanced router选项,ip_forward也设置的是1。
这个问题已经卡了我半个月了,我所能尝试的各种方法全都试过了,真的不知道错在哪里,恳请大神拯救!!!版本相关:
内核        Linux3.0.1
交叉编译器        arm-linux-gcc-4.3.2
路由协议        aodv-uu-0.9.6.tar
网卡 rt3070命令:
#insmod rt3070sta.ko
#ifconfig ra0 up
#iwconfig ra0 mode ad-hoc essid aodv-test
#ifconfig ra0 192.168.1.2 up
# insmod kaodv.ko
#./ aodvd恳请大神拯救!!!!!!!

解决方案 »

  1.   

    我只做过在虚拟机ubuntu10.04上aodv-uu-0.9.6的安装,并且实现了多跳实验。没有在arm平台上做过,在此说说在虚拟机上的过程,希望对你有帮助。
    在安装好aodv-uu-0.9.6之后,
    1、首先需要停用net-manager。执行命令:
    /etc/init.d /network -manager  stop
    如果之后想要重新启动network-manager ,执行以下命令:
    /etc/init.d /network -manager  restart
    2、需要开启路由转发功能
    执行命令:
    vi  /etc/sysctl.conf
    在文档的后面添加:
    net.ipv4.ip_forward = 1
    3、多跳实验
    3台电脑以L形放置
    B--------------C
    |
    |
    |
    A
    A 和C之间不能直接通讯,直接找一个建筑物拐角处,将3个节点按上面的位置安放。
    保持aodvd一直运行,使用ping -R IP 来实现路由路径查询
    你能不能将aodv-uu-0.9.6协议移植到linux3.0.1的教程发我一份,谢谢!