3.1 无线模块驱动编译
所有的Atheros芯片无线网卡基本都可以使用madwifi驱动,驱动程序源码madwifi-0.9.4.tar.gz可以从http://madwifi.org/上下载。在进行无线模块驱动开发时,首先要配置并编译Linux内核,使其支持MiniPCI网卡,然后针对终端环境修改madwifi-0.9.4目录下的Makefile,再使用make命令进行编译,生成适用于MIPS的驱动程序模块,并使用insmod命令将模块在终端的Linux中进行加载。加载成功后,用Linux下的无线局域网工具命令iwconfig对无线网卡进行配置,注意配置时要将无线网卡的工作模式设定成为Ad Hoc模式。
./wlanconfig ath0 destroy
./wlanconfig ath0 create wlandev wifi0 wlanmode adhoc
3.2 AODV路由协议的实现
Linux操作系统的内核并不直接支持按需路由,因此要实现AODV路由协议需要对操作系统进行相应的扩充和修改。
Linux操作系统的路由体系结构按功能可分为转发功能模块和路由功能模块,可以在转发功能模块保持不变的情况下,通过修改路由功能模块,实现不同的路由协议。转发功能在Linux内核中实现,根据需要发送的数据分组目的地址;查找路由表,按照最长前缀匹配原则寻找与目的地址匹配的表项,如果找到匹配项,则将数据分组发送到相应的网络接口;否则就丢弃该分组。路由功能模块作为后台进程在用户空间运行,主要负责与其他网络节点进行信息交流,采用适当的路由算法建立路由,更新和维护内核路由表。
目前发布的针对AODV协议的实现方案中多数协议的实现都采用了NetfiLTEr功能框架。Netfilter是Linux核心中的一个通用架构,用于实现数据包过滤、状态保持、NAT以及安全等多种网络功能。Netfilter结构提供了一系列的“列表”(tables),每个列表由若干个“链”(chains)组成,而每条链中又可以有一条或数条规则(rules)进行规范,规则的定义采用“如果数据包头符合这样的条件,就这样处理该数据包”。当一个数据包到达一个链时,系统就会从第一条规则开始查看是否符合该规则所定义的条件。如果满足,系统将根据该条规则所定义的方法处理该数据包;否则,继续检查下一条规则。如果该数据包不符合该链中任何一条规则的定义,系统就会根据该链的缺省策略处理该报文。
Linux在内核2.4版本以上的系统中提供了五个hook注册点,这些hook点处在数据分组流经协议栈的几个关键位置,用户可以在这些位置注册自己定义的操作函数,流经hook点的数据分组将执行函数的操作。如图3所示,Netfilter便由处于Linux协议栈中的五个hook函数组成。
在AODV协议的实现过程中,Netfilter的配置是协议正常运行的前提,需要在内核中注册hook函数,但并不是所有的Linux系统都默认启用Netfilter,因此需要在内核配置选项中进行配置并编译进内核。进入Linux内核源代码安装目录,输入make manuconfig命令进入内核配置主菜单,通过空格键选择:
Networking options-->[*]Network PACket filtering(replaces ipchains)
IP:Netfilter Configuration--><*>Userspaee queueing via NETLINK
4 结语
结合IEEE 802.11无线技术和VoIP技术的优势,采用了高性能的微处理器ADM5120和功能稳定强大的嵌入式Linux操作系统作为软件平台,构建了一个基于IEEE 802.11b/g技术的无线VoIP便携式终端。通过在终端的系统上加载AODV路由协议实现了多跳的功能。经过三台终端的联合测试,多跳通话可以保证良好的语音效果。