VxWorks環境下雙冗余以太網卡技術在底層驅動中的實現
發送和接收處理
在上層驅動程序通過MUX調用NIC驅動程序的發送函數時,會傳入網卡的句柄,指定要使用的網卡。通常情況下,驅動程序會根據該句柄向相應網卡發出指令,把報文發出去。在雙網卡冗余備份驅動程序中,根據需要來指定發送數據要使用的網卡,而不一定使用MUX指定的網卡。如先讀2塊網卡的Link信號寄存器,判斷網絡連線的通斷,再決定使用哪一塊網卡來發送數據。
在接收報文的時候,通常是在中斷中進行處理。因為以太網在物理層上的特點,2塊網卡都能收到報文,不同的是只有與高層協議綁定的網卡收到的數據才能向上傳遞。在雙網卡冗余備份驅動程序中,不是由MUX指定的網卡句柄來向上傳送數據,而是根據當前網卡的工作狀態向上層傳送數據,即使數據是從另一塊網卡上接收來的或另一塊網卡沒有和高層協議綁定。
單物理地址的處理
通常每塊網卡有1個全世界范圍內唯一的物理地址,它保存在網卡的PROM中。網卡初始化時,要從PROM中讀出物理地址,把它存放在適當的寄存器和數據結構中。
要使2塊網卡能相互備份,它們必須有相同的物理地址和IP地址。在雙網卡冗余備份驅動程序中,可以用其中1塊網卡的物理地址。方法有2種:在驅動程序初始化時只讀1塊網卡的PROM中的物理地址;或者在網卡驅動程序中的ne2000EnetAddrGet()函數中作修改,完全可以給網卡設定任意的物理地址 (只要避免了同一網絡中的沖突)。
單IP地址處理
至于 2塊網卡采用相同的IP地址,可以這樣實現:在安裝2塊網卡時,只讓1塊網卡有IP地址,另1塊網卡沒有IP地址。因為給網卡綁定IP地址是在IP協議所在的網絡層實現的,所以在網絡層以下切換網卡對上層來說是完全透明的。應用程序自始自終只看見1塊網卡在工作。圖3是從應用程序的角度看雙網卡備份的示意圖。
效果分析
通過對比實驗,在應用層實現雙網卡冗余備份的平均網卡切換時間是120ms,在驅動層實現雙網卡冗余備份的平均網卡切換時間是5ms,相對于在應用層或其他高層中實現,效率較高,大大縮短雙網卡的切換時間,從而降低切換時網絡通信丟包的機率。
結束語
分析了VxWorks系統的網絡結構模型,提出了在系統底層驅動中實現雙網卡冗余備份功能的設想,并進行了設計實現,同時對在驅動程序中實現與在應用層中實現2種方法進行了對比,證明了在驅動程序中不但能夠很好地實現雙網卡冗余備份功能,而且提高了以太網的實時性和可靠性,在工業以太網蓬勃發展的今天,具有一定的實用意義。
評論