新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于VxWorks的双端口网卡智能双冗余驱动

基于VxWorks的双端口网卡智能双冗余驱动

作者:时间:2013-10-26来源:网络收藏


智能双冗余网卡驱动中定义了一个控制单网卡设备的控制结构,如下所示:
typedef struct ne2000_device
{
……
int    unit;       /*网卡单元号*/
int    ilevel;      /*中断优先级*/
int    byteAccess;    /*字节存储模式*/
ULONG   base;       /*基地址*/
int    offset;      /*内存对齐偏移量*/
volatile ULONG  imask;   /*中断屏蔽码*/
UCHAR   enetAddr[6];   /*网卡物理地址*/
……
} DETHEND_DEVICE;

驱动中创建了两个网卡设备控制结构分别控制两块网卡。上层应用通过操作网卡控制结构从而实现对网卡的各种操作。

2.3 网络通信故障诊断方法

要实现网络端口的智能切换,实现网卡间冗余备份的功能,首要前提就是需要诊断出当前工作的网卡是否网络通信故障。任何一种网络芯片都提供连接状态自动诊断功能,通过在网络芯片的某个寄存器的相应位置0或置1来表示该网卡连接正常还是连接错误。它所检测的依据是网卡是否连通,也就是从本机网络端口到网线另一端的网络端口整个通路是否连通,它能检测出网线断开、网络接口松动及故障等错误。

本文使用的SEM/DETH采用两块RTL8019AS网络芯片,该网络芯片的寄存器组采用分页存储方式,共分为4页,都映射到16个I/O地址空间上。其中,第3页CONFIG0寄存器的B2位表示网卡连接状态自动诊断结果,当该位为1时表示连接错误,为0时表示连接正常。智能双冗余驱动的网络故障诊断任务判断网卡连接状态的代码如下:

setting=sysInByte(pDrvCtrl->base); /*读取命令寄存器状态*/
sysOutByte(pDrvCtrl->base,(0xc0|setting));/*选择第3页寄存器组*/
if(sysInByte(pDrvCtrl->base+CONFIG0_REG) 0x04)/*网络连接错误*/
{ …… }

2.4 单物理地址实现

要使两块网卡实现智能双冗余备份,它们必须有相同的物理地址和IP地址。否则,当由其中一个网卡切换到另一个网卡上时,如果IP地址发生变化,系统将无法正常接收、发送数据;如果IP地址不发生变化而仅仅物理地址发生变化,虽然网卡切换后,系统仍可以正常接收、发送数据,但由于物理地址发生变化,将引起协议栈中ARP绑定表的变化,重新对应ARP绑定表中IP地址与网卡物理地址的关系,则延长了两个网卡之间的切换时间。

系统的IP地址存在于系统的网络协议栈中,在系统启动后与网卡进行绑定。由于本文设计实现的智能双冗余驱动对于应用系统和协议栈来说呈现单网卡的特征,网卡之间的切换只在驱动程序中完成,所以,当发生网卡切换时,系统的IP地址并不发生变化。

对于网卡的物理地址来说,通常每块网卡有一个全世界范围内惟一的物理地址,它保存在网卡的PROM中。网卡初始化时,要从PROM中读出物理地址,把它存放在适当的寄存器和数据结构中,对外来说,寄存器和数据结构中的数值就是这块网卡的物理地址。在智能双冗余驱动程序中,当驱动程序初始化时只读取一块网卡PROM中的物理地址,然后把这个地址写入两块网卡的对应物理地址寄存器和数据结构变量pDrvCtrl中,这样,两块网卡对外就具有统一的物理地址了。因为驱动程序自始至终只有一块网卡处于激活状态,另一块作为备份,因此不会发生同一个网络上两个物理地址相同出现冲突这种现象。

3 性能测试

3.1 测试方法

针对本文设计、实现的双端口网卡智能双冗余驱动进行性能测试。将智能双冗余驱动编译到操作系统中,使用带有SEM/DETH的计算机做目标机,使用两根网线把目标机连接到交换机上。目标机应用程序以40次/秒的速率向外发送UDP广播报文。采用普通PC机作为主机系统,运行Windows2000操作系统,使用sniffer Pro工具进行网络监控。

3.2 测试结果及分析

测试结果如图2所示,横坐标代表报文数,纵坐标代表主机接收到的目标机UDP广播报文中两个连续UDP报文之间的间隔时间(单位为秒)。由图2可以看到,由于目标机正常工作状态下是以40次/秒的速率广播发送UDP网络报文的,所以每两个报文之间的时间间隔大部分为25ms左右。在图2中出现了8次主机接收到的广播报文时间间隔为100ms左右的情况,这是由于在目标机端进行了8次网卡切换,在网卡切换过程中出现了报文丢失现象。

由测试结果看,本文设计实现的智能双冗余驱动能够很好地实现双端口网卡冗余备份的功能,在检测到主通道网卡设备连接错误时可以切换到备用通道继续进行网络通信,并且可以在两块网卡之间循环切换;同时,该驱动对上层用户透明,呈现单网卡的特性,完全在驱动中实现网卡间的冗余备份。

本文设计实现了一个基于的双端口网卡智能双冗余驱动,在驱动中实现了网络通信故障诊断和网卡间智能切换功能,对上层应用呈现单网卡特性。通过对设计实现的智能双冗余驱动进行性能测试,验证了设计的正确性和有效性,但通过测试结果也可以看到,在网卡切换过程中还存在切换时间较长的问题,有待进一步研究。

c++相关文章:c++教程



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭