一款USB接口的WLAN网络适配器设计
2009-01-12黄博王小平王万刚
黄 博 王小平 王万刚
【摘要】实现了基于威盛VT6656 基带MAC和射频收发器LA2230的WLAN网络适配器的软硬件设计,用于捕获WLAN管理帧、控制帧及数据帧,满足无线局域网的实时监测及安全防范对数据采集的要求。
【关键词】WLAN;网络适配器;软硬件设计
前言
近年来,无线局域网获得了很大的发展,我国也制定了以保护国家信息安全和机密为目的的WAPI认证体系标准。但是,WLAN的安全性一直是制约WLAN发展的一个重要因素,对于WLAN网络的监测迫在眉睫。为了对网络进行监测,不外乎捕获数据进行分析,由于硬件厂商在开发无线网络适配器时进行了无线数据以太网格式的转换,利用市面上购买的网卡只能捕获经过以太转换之后的数据链路层的数据,对于WLAN特有的管理帧和控制帧无能为力。只有把网卡设置成为射频监听模式才能捕获管理帧和控制帧,但网卡制造商往往没有提供这个接口,鉴于此,我们自己开发了无线网卡,对网卡进行完全控制,便于捕获控制帧和管理帧,实现对无线网络的分析和监测。
1.硬件设计
硬件采用威盛单芯片WIFI解决方案VT6656。威盛 VT6656 无线网络控制芯片是一种单晶片解决方案,采用了一个IEEE802.11a/b/g媒体存取控制器(MAC),并集成了一枚基带处理器。该控制器可提供54M高速的无线连接。基于威盛 VT6656的WLAN模块提供了宽裕的带宽,从而实现高清晰数字媒体内容的传输,以及移动办公环境或公共热点地区所需的高速网络访问。VT6656支持USB2.0且向后兼容 灵活的威盛VT6656兼容于USB 2.0,后向兼容 USB1.1 接口,并且兼容于目前流行的所有RF 芯片,确保了模块制造者更多的选择RF来降低成本。
硬件框图如下:
如图所示,硬件电路包括基带MAC芯片VT6656,射频收发部分,接口部分,存储部分,天线及滤波部分组成。其中,基带MAC芯片VT6656支持可变的数据传输速率:6,9,12,18,24,36,48,54Mbps 的 OFDM(正交多载波频分复用 5.5,11Mbps for CCK,1,2Mbps for BPSK);支持天线多样性;接收包为 RSII status;支持接口 Airoha:AL2230, VIA:VT6635(b/g RFIC),VT6636(a/b/g RFIC)。MAC特性支持形组/独立模式;支持多播包过滤;两个32位计数器;硬件支持威盛本机环回测试(内/外);支持BSS PCF;支持 IBSS ATIM;支持硬件的简单测试(连续传输/接收包);支持4个MIB计数器,发送请求成功计数,发送请求失败计数,响应失败计数,FCS错误计数。射频部分采用台湾洛达科技公司的Airoha的AL2230芯片。接口部分支持基于I2C总线的EEPROM,用于保存设置信息,同时,支持USB1.1和USB2.0标准的USB接口。
2.系统软件设计
无线网卡的软件部分分为固件,驱动程序和配置管理程序三个部分,软件体系结构如图2所示。
其中,网卡固件程序由芯片厂商威盛公司提供,烧录在芯片内部,通常在固件中完成MAC层和PHY层的功能,并提供对上层(驱动层)和下层(物理层)的接口。驱动程序要根据芯片手册和工作环境自己编写,而配置管理程序通过调用驱动程序完成网卡的配置和管理,配置参数存储在EEPROM存储器中。下面简要介绍一下基于Linux的驱动程序开发。
驱动程序主要完成在系统上电之后对网卡寄存器和固件的初始化,并进行相关设置,使网卡处于收发就绪状态。在驱动程序中,必须要完成的功能包括初始化无线网卡和固件;分配收发缓冲器;使用标识符接口管理无线网卡的操作;接收事件;发送事件;异常处理等等。驱动程序工作流程如图3所示。
在驱动程序中,主要数据结构类型及函数声明如下:
// 初始化卡类型及操作模式
typedef enum _CARD_PHY_TYPE {
PHY_TYPE_AUTO=0,
PHY_TYPE_11B,
PHY_TYPE_11G,
PHY_TYPE_11A
} CARD_PHY_TYPE, DEF* PCARD_PHY_TYPE;
typedef enum _CARD_OP_MODE {
OP_MODE_INFRASTRUCTURE=0,
OP_MODE_ADHOC,
OP_MODE_AP,
OP_MODE_UNKNOWN
} CARD_OP_MODE, *PCARD_OP_MODE;
// 802.11 帧类型定义
#define WLAN_TYPE_MGR 0x00
#define WLAN_TYPE_CTL0x01
#define WLAN_TYPE_DATA 0x02
#define WLAN_FTYPE_MGMT 0x00
#define WLAN_FTYPE_CTL0x01
#define WLAN_FTYPE_DATA 0x02
//信道切换函数声明
BOOL CARDbChannelSwitch (
IN PVOID pDeviceHandler,
IN BYTEbyMode,
IN BYTEbyNewChannel,
IN BYTEbyCount
);
//基本服务集搜索函数声明
PKnownBSS BSSpSearchBSSList(
IN HANDLE hDeviceContext,
IN PBYTE pbyDesireBSSID,
IN PBYTE pbyDesireSSID,
IN CARD_PHY_TYPE ePhyType
);
//网卡控制函数声明
int private_ioctl(PSDevice pDevice, struct ifreq *rq);
//写入数据函数声明
void ControlvWriteByte(IN PSDevice pDevice,IN BYTE byRegType,
IN BYTE byRegOfs,IN BYTE byData );
//读取数据函数声明
void ControlvReadByte(IN PSDevice pDevice,IN BYTE byRegType,IN BYTE byRegOfs, IN PBYTE pbyData );
3.结论
利用TP-LINK W640G无线路由器做AP(MAC地址为00-0A-EB-D0-D2-A4),和本网卡进行数据通信,捕获数据如图4,从图中可以看出,这是网卡接收到的信标帧,源MAC地址为00-0A-EB-D0-D2-A4,网卡MAC地址为01-00-5E-7F-FF-FA,与实际测试环境相符合。说明了网卡是成功的。
参考文献
[1]陈祖爵,黄学霜等.嵌入式无线局域网适配器的设计与实现[J].计算机工程,2007,8(15):235-240.
[2]VT6656 datasheet[M].威盛公司,2006.
[3]LA2230 datasheet[M].日本三洋公司,2002.
[4]汪涛,蔡皖东.无线网卡驱动程序设计与实现技术研究[D].西安:西北工业大学,2004.
[5](美)Jonathan Corbet,Alessandro Rubini. Linux Device Drivers,3rd Edition[M].魏永明译.北京:电子工业出版社2006:130-243.
作者简介:
黄博(1980—),男,四川通江人,重庆城市管理职业学院助理实验师,研究方向:嵌入式系统应用。
王万刚(1977—),男,重庆人,硕士,重庆城市管理职业学院讲师,研究方向:电子组装工艺。
王小平(1973—),男,四川阆中人,硕士,重庆城市管理职业学院讲师,重庆大学机械传动国家重点实验室访问学者,主要从事无线通信与嵌入式系统应用研究。