1、引言
随着无线局域网WLAN(Wireless Local Area Network)、无线城域网和Ad Hoc网络(又称移动自组织网络)等无线网络技术的成熟,出现了无线Mesh网络。下一代无线因特网技术:无线Mesh网络(也称无线网状网、无线网格网等),是一种新型的宽带无线网络结构www.cechina.cn,即一种高容量、高速率的分布结构,它不同于传统的无线网络,可以看成是无线局域网和移动Ad hoc网络的融合,且发挥两者的优势,是因特网的无线版本[1]。目前无线Mesh网络逐渐进入民用商业化研发和应用阶段。业界有摩托罗拉、诺基亚、北电网络等多家公司开发了相应的WMN产品。
本文简要分析了Linux 下的网络设备驱动及miniPCI接口的射频卡驱动,重点研究了无线Mesh网络中MAP基于Linux系统的开发,采用模块化来实现MAP的功能。
2、Linux下网络设备
Linux下的网络设备不同于其它的设备,它在内核中被抽象为统一的接口,用一个数据结构net_device来表示。所有对网络设备的访问都是通过这个抽象接口进行的[2]。net_device对所有类型的硬件提供了一个一致化的操作集合来处理基本数据的发送和接收,主要有硬件传输函数hard_start_xmit、向上层协议发送数据函数netif_rx。此外,网络设备中接收和发送的数据包都用数据结构sk_buff表示。它是描述Linux网络各层协议套接字缓存的数据结构,它是各层协议处理对象,无论是底层接收到的数据,还是上层下发的数据都与之关联。
在Linux系统中,网络设备驱动的基本结构大致分成四层CONTROL ENGINEERING China版权所有,从上到下分别为协议接口层,网络设备接口层,提供实际功能的设备驱动功能层,以及网络物理设备媒介层。而MAP的开发过程中,主要有两个部分:
1) MAP射频卡驱动部分对应于网络设备接口层,其射频控制IC芯片能实现mesh协议处理功能,即硬件上完成mesh协议处理功能。
2) MAP的功能驱动部分,即实现mesh协议管理功能。它对应于协议的接口层,网络设备驱动功能层。
3、MAP中miniPCI接口射频卡驱动
本研究开发的MAP系统硬件平台是通过Atheros公司的3×3MIMIO的miniPCI射频卡,实现物理层300Mbps带宽传输速率。软件开发平台采用2.6版本内核,bootload为redboot。在Linux2.6内核中提供PCI驱动接口函数,所以本射频卡的网络驱动开发是基于miniPCI接口建立标准无线网络设备wifi0、wifi1。
4、WMN中MAP驱动的设计与实现
前面简要分析MAP空口设备的驱动,建立标准无线网络设备。在Mesh网络中, MAP通过虚拟接入点与网络邻居节点(无线终端、Mesh节点)进行关联,再通过虚拟接入点向具体射频卡的进行绑定,最后由数据包的接收和发送来实现Mesh网络的联通、路由的管理、自适应多跳等mesh协议管理功能。
4.1 MAP驱动体系结构
图1 Mesh Access Point驱动体系结构图
MAP整体功能驱动体系如图1所示,与Linux内核中网络设备驱动程序的基本结构相对应。Mesh网络射频卡硬件抽象层与miniPCI射频卡驱动对应,Mesh网络设备抽象实体层和mesh驱动接口与mesh功能驱动相对应(mesh协议管理功能驱动)。这里采用分层、分模块方法,来实现MAP的mesh协议管理功能。各模块之间的功能是相互关联的。协议管理模块有:mesh_xauth.ko认证模块完成无线终端与邻居Mesh节点的关联和鉴权等功能、mesh.ko是独立于硬件设备的802.11s/802.16协议模块处理协议部分、mesh_wep.ko加密安全模块、mesh_scan_sta.ko与mesh_scan_mp.ko实现邻居节点和无线终端扫描探测管理、pci_hal.ko硬件抽象层模块、mesh_cal.ko完成MAP的MAC 的ACL操作、mesh_router.ko完成路由管理功能模块等。而以下几个模块是与协议处理部分相关:ath_dev.ko是特殊atheros网络处理IC支持模块、miniPCI.ko射频卡接口驱动模块完成设备初始化、mesh_rate_atheros.ko完成空口传输速率控制模块。
4.2 Mesh节点和无线站点在MAP系统中的识别及绑定
在Mesh网中,有一个重要的概念是“邻居”。在网络中每个可以直接连接的节点称为“邻居”或“邻居节点”,一个节点的所有邻居组成“邻居关系”。一个节点到它邻居的距离称为“单跳”。每个节点都需要有其它节点合作才能完成数据的传输。
当在MAP下的站点要发送数据时www.cechina.cn,MAP以指定的RF和无线帧格式数据进行转发。同样,当一个邻居Mesh节点发送一个帧时,MAP通过所设定运行的RF来接收帧www.cechina.cn,然后把帧转发到有线局域网或转发到其他的邻居节点中。而在MAP系统中是如何识别这些邻居节点呢?又是如何将这些邻居节点的数据指定到特点的RF进行转发?
在Linux系统实现过程中,这里定义了几个重要的数据结构体来对Mesh网络节点和射频卡进行了类抽象。主要数据结构有以下三个,其中前两个对net_device进行了继承:
1) mesh80211_node它用来表示邻居节点(节点信息)。存储各邻居节点的状态信息,如哪些节点发送管理响应、鉴权、关联或去关联等状态信息。
2) ieee80211_vap它用来表示一个虚拟接入点。802.11s协议信息相关的一个结构体CONTROL ENGINEERING China版权所有,其成员包含有节点信息。
3) ieee80211_com它相当于包装了80211协议信息的抽象网络通信接口,是对射频卡的抽象,其成员包含节点信息。
点之间的关系是实现整个协议管理功能设计的核心。MAP系统中节点与虚拟接入点的关系图如图2所示。在射频卡驱动起始过程中已建立标准的网络设备:射频卡1对应wifi0、射频卡2对应wifi1、射频卡3对应wifi2。在系统中通过ieee80211_com数据结构抽象出虚拟网口:ath0、ath1、ath2等,与某个标准网络设备(wifi0、wifi1或wifi2)进行绑定,同时ieee80211_com 的成员包含或调用了硬件抽象层功能函数。而系统中的每个虚拟接入点的建立又是基于虚拟网口,且其包含有邻居节点信息。
如图2所示,Mesh网络中mesh节点或站点通过MAP进行数据传输或上网时,首先从系统虚拟节点链表中找出对应的虚拟节点。将系统中相应的虚拟接入点与其进行绑定。虚拟接入点又通过虚拟的网口进行数据传输。虚拟网口与具体的射频卡进行了绑定。最后通过射频卡空口完成数据的传输。这样就完成了Mesh节点与站点的数据传输。
图2 节点和虚拟接入点的关系图
5、结论
本文结合Linux系统,着重研究了Mesh接入点的实现,分析了MAP系统中射频卡驱动开发和MAP功能实现过程,给出了MAP的整个驱动结构设计图,对后续功能的完善和开发具有很好参考价值。