韓曉,趙昶宇
?
Intel 82580雙冗余網(wǎng)卡切換技術(shù)
韓曉1,趙昶宇2
(1.海軍駐天津八三五七所軍事代表室,天津 300308;2.天津津航計(jì)算技術(shù)研究所,天津 300308)
對(duì)VxWorks系統(tǒng)下Intel 82580雙冗余網(wǎng)卡的通訊和切換技術(shù)進(jìn)行了研究,給出了Intel 82580雙冗余網(wǎng)卡在VxWorks系統(tǒng)下實(shí)現(xiàn)雙網(wǎng)切換的方法。該方法在VxWorks系統(tǒng)底層驅(qū)動(dòng)中設(shè)計(jì)并實(shí)現(xiàn)冗余通道,設(shè)計(jì)完成后滿足了系統(tǒng)要求的誤碼率和切換時(shí)間,并把雙冗余網(wǎng)卡的切換時(shí)間提高到60 ms,達(dá)到了系統(tǒng)的設(shè)計(jì)指標(biāo)。
VxWorks;雙冗余網(wǎng)卡;以太網(wǎng);艦艇控制系統(tǒng)
隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和艦艇現(xiàn)代化程度的不斷提高,傳統(tǒng)的10 M/100 M以太網(wǎng)已遠(yuǎn)遠(yuǎn)不能滿足作戰(zhàn)系統(tǒng)高速大寬帶的通信網(wǎng)絡(luò)需求。在艦艇的特殊環(huán)境下,不但要求網(wǎng)絡(luò)信息傳輸速度快、抗干擾能力強(qiáng),還要求在網(wǎng)絡(luò)局部故障時(shí),作戰(zhàn)系統(tǒng)不出現(xiàn)癱瘓和失效狀態(tài)。本文結(jié)合某艦艇控制系統(tǒng)網(wǎng)絡(luò)通信的實(shí)際應(yīng)用,考慮到艦艇控制系統(tǒng)對(duì)實(shí)時(shí)性的要求,對(duì)VxWorks系統(tǒng)下高可靠性網(wǎng)絡(luò)通訊技術(shù)進(jìn)行了深入研究,實(shí)現(xiàn)了VxWorks下Intel 82580千兆雙冗余網(wǎng)卡的配置以及雙網(wǎng)卡切換。
本文以2塊Intel 82580網(wǎng)絡(luò)適配芯片為例說明在VxWorks實(shí)時(shí)操作系統(tǒng)下,如何配置多網(wǎng)卡進(jìn)行通信。
首先在WorkBench的安裝目錄WindRivervxworks-6.8 argetconfigpcPentium4config.h文件中增加以下定義:
#define INCLUDE_GEI825XX_VXB_END
#define INCLUDE_END
#define INCLUDE_GEI8254X_END
如果希望通過Intel 82580千兆雙冗余網(wǎng)卡來引導(dǎo)VxWorks系統(tǒng),則需要將DEFAULT_BOOT_LINE宏定義修改為:
#define DEFAULT_BOOT_LINE
"ata=0,0(0,0) host:/ata1a/vxWorks.fk1 h=191.8.200.69 e=191.8.200.11 u=target pw=target o=gei"
通過上述配置方法,雙通道冗余網(wǎng)卡的驅(qū)動(dòng)就訂制在BSP中,然后重新編譯生成Bootrom和VxWorks鏡像,加載到系統(tǒng)中運(yùn)行調(diào)試。為了確保網(wǎng)卡自動(dòng)切換精確到毫秒級(jí),將SYS_CLK_RATE設(shè)置為100.
在作戰(zhàn)系統(tǒng)中,為了保證網(wǎng)絡(luò)通信的實(shí)時(shí)可靠性,對(duì)上網(wǎng)的設(shè)備和系統(tǒng)提出了雙網(wǎng)卡冗余備份、故障時(shí)自動(dòng)切換的要求。采用兩個(gè)網(wǎng)絡(luò)適配器互為備份,當(dāng)其中一個(gè)出現(xiàn)故障時(shí),系統(tǒng)檢測(cè)到錯(cuò)誤,并迅速切換到另一塊網(wǎng)絡(luò)適配器上。系統(tǒng)連接圖如圖1所示。
圖1 雙網(wǎng)卡系統(tǒng)連接圖
為了使2塊Intel 82580千兆網(wǎng)卡實(shí)現(xiàn)高效雙冗余備份,必須保證這2塊網(wǎng)卡具有相同的物理地址和IP地址。這樣對(duì)于上層應(yīng)用系統(tǒng)而言,系統(tǒng)中呈現(xiàn)“單網(wǎng)卡”的特征;反之,當(dāng)系統(tǒng)中一塊網(wǎng)卡切換到另一塊網(wǎng)卡工作時(shí),如果IP地址發(fā)生變化,則系統(tǒng)無法正常接收和發(fā)送數(shù)據(jù)。如果IP地址不改變,而物理地址改變,則會(huì)引起協(xié)議棧中ARP綁定表的變化,而重新對(duì)應(yīng)ARP綁定表中IP地址與網(wǎng)卡物理地址的關(guān)系會(huì)延長兩個(gè)網(wǎng)卡之間的切換時(shí)間。
然而,每塊網(wǎng)卡的物理地址在全世界范圍內(nèi)是唯一的,它保存在網(wǎng)卡的PROM中。為了使2塊Intel 82580千兆網(wǎng)卡具有相同的物理地址,在網(wǎng)卡初始化時(shí),從PROM中讀出其中一塊網(wǎng)卡的物理地址,將該物理地址的內(nèi)容寫入另一塊網(wǎng)卡物理地址寄存器和數(shù)據(jù)結(jié)構(gòu)變量中,在此情況下,這2塊Intel 82580千兆網(wǎng)卡就具有完全相同的物理地址了。
從理論上看,以太網(wǎng)絡(luò)的冗余可以在OSI的各層中實(shí)現(xiàn),越是在底層實(shí)現(xiàn),檢測(cè)和切換的時(shí)間就越短,冗余的效果越好。因此,VxWorks系統(tǒng)下的雙網(wǎng)切換工作是在網(wǎng)卡驅(qū)動(dòng)層實(shí)現(xiàn)的。在END型網(wǎng)絡(luò)驅(qū)動(dòng)中實(shí)現(xiàn)網(wǎng)卡設(shè)備的裝載、網(wǎng)絡(luò)芯片的初始化、網(wǎng)絡(luò)報(bào)文的接收和發(fā)送、網(wǎng)絡(luò)的切換等功能。在系統(tǒng)啟動(dòng)后,VxWorks系統(tǒng)通過網(wǎng)卡加載函數(shù),調(diào)用END型網(wǎng)絡(luò)驅(qū)動(dòng),在加載過程中完成網(wǎng)絡(luò)芯片的初始化、內(nèi)存池的分配、網(wǎng)卡設(shè)備控制結(jié)構(gòu)的配置等,最后將網(wǎng)卡設(shè)備控制結(jié)構(gòu)提交給MUX層,供上層系統(tǒng)操作網(wǎng)卡時(shí)使用。雙冗余網(wǎng)卡驅(qū)動(dòng)的實(shí)現(xiàn)原理如圖2所示。
圖2 雙冗余網(wǎng)卡驅(qū)動(dòng)的實(shí)現(xiàn)原理圖
圖2中的網(wǎng)絡(luò)通道通訊監(jiān)控任務(wù)是對(duì)當(dāng)前使用的網(wǎng)絡(luò)適配器進(jìn)行不間斷的定時(shí)查詢,當(dāng)發(fā)現(xiàn)該網(wǎng)絡(luò)適配器連接狀態(tài)異常時(shí),就切換到另一個(gè)網(wǎng)絡(luò)適配器上。如果切換成功,該網(wǎng)絡(luò)適配器就成為當(dāng)前使用的網(wǎng)絡(luò)適配器,該監(jiān)控任務(wù)繼續(xù)對(duì)當(dāng)前的網(wǎng)絡(luò)適配器進(jìn)行監(jiān)控。
監(jiān)控任務(wù)主要完成以下工作:當(dāng)監(jiān)控任務(wù)檢測(cè)到Intel 82580千兆網(wǎng)卡的狀態(tài)寄存器的Link位為0,表明該網(wǎng)絡(luò)適配器工作正常,不進(jìn)行網(wǎng)卡切換;當(dāng)監(jiān)控任務(wù)檢測(cè)到Intel 82580千兆網(wǎng)卡的狀態(tài)寄存器的Link位為1,表明該網(wǎng)絡(luò)適配器連接異常,需要進(jìn)行網(wǎng)卡切換。
如果當(dāng)前使用的網(wǎng)卡為Gei0,則需要切換到Gei1上,反之亦然。Gei0切換到Gei1的代碼為:
ipDetach(0,“gei”);
ipAttach(1,“gei”);
ifconfig(“gei1 192.168.0.100 up”);
為了驗(yàn)證上述網(wǎng)卡切換方法,搭建硬件環(huán)境,將2塊Intel 82580千兆網(wǎng)卡所在的加固機(jī)作為Client端,開發(fā)平臺(tái)的主機(jī)PC作為Server端,使用2根網(wǎng)線將網(wǎng)卡的雙端口同時(shí)連接到交換機(jī)上,主機(jī)端網(wǎng)絡(luò)也通過網(wǎng)線連接到交換機(jī)上。
在Client端編寫測(cè)試程序,向Server端發(fā)送數(shù)據(jù)報(bào)文,并統(tǒng)計(jì)發(fā)送的報(bào)文計(jì)數(shù),Server端收到網(wǎng)絡(luò)報(bào)文數(shù)據(jù)后,統(tǒng)計(jì)接收的報(bào)文計(jì)數(shù),并將收到的報(bào)文內(nèi)容發(fā)送給Client端;在Server端編寫測(cè)試程序,向Client端發(fā)送數(shù)據(jù)報(bào)文,并統(tǒng)計(jì)發(fā)送的報(bào)文計(jì)數(shù),Client端收到網(wǎng)絡(luò)報(bào)文數(shù)據(jù)后,統(tǒng)計(jì)接收的報(bào)文計(jì)數(shù),并將收到的報(bào)文內(nèi)容發(fā)送給Server端。同時(shí),Server端使用ping命令檢測(cè)和Client端的網(wǎng)絡(luò)是否連接成功。在整個(gè)過程中,通過交錯(cuò)切斷雙通道冗余網(wǎng)卡中的任意一個(gè)端口連接的方法檢測(cè)切換功能,發(fā)現(xiàn)ping命令始終未中斷,收發(fā)數(shù)據(jù)穩(wěn)定、可靠,滿足要求。
為了測(cè)試切換時(shí)間是否滿足要求,設(shè)置數(shù)據(jù)的發(fā)送速率為350幀/秒,相當(dāng)于每3 ms左右完成1幀數(shù)據(jù)的發(fā)送。當(dāng)發(fā)生1次切換,平均增加丟幀數(shù)為20,最大不超過30幀。通過計(jì)算可以得知切換導(dǎo)致的網(wǎng)絡(luò)中斷時(shí)間平均為60 ms,滿足系統(tǒng)對(duì)切換時(shí)間不超過90 ms的指標(biāo)要求。
通過以上功能和性能測(cè)試驗(yàn)證表明,本文設(shè)計(jì)的雙冗余網(wǎng)卡切換技術(shù)的實(shí)現(xiàn)方法有效,所開發(fā)的代碼穩(wěn)定、可靠,能夠滿足作戰(zhàn)系統(tǒng)的需求。
本文對(duì)Intel 82580千兆雙冗余以太網(wǎng)在VxWorks下的驅(qū)動(dòng)開發(fā)及切換技術(shù)進(jìn)行了深入研究,并提出了雙冗余網(wǎng)卡切換的切實(shí)、可行的解決方案。通過試驗(yàn)驗(yàn)證,本設(shè)計(jì)很好地解決了在某作戰(zhàn)控制系統(tǒng)上實(shí)現(xiàn)雙冗余網(wǎng)絡(luò)實(shí)時(shí)、可靠、高速進(jìn)行信息傳遞這一技術(shù)難題,雙冗余網(wǎng)卡的切換時(shí)間、誤碼率都在指標(biāo)范圍內(nèi),經(jīng)過各項(xiàng)嚴(yán)格測(cè)試,Intel 82580雙冗余網(wǎng)卡系統(tǒng)滿足功能和性能要求,已經(jīng)成功交付使用。
[1]孔詳營,柏桂枝.嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks及其開發(fā)系統(tǒng)Tornado[M].北京:中國電力出版社,2002.
[2]劉利強(qiáng),戴運(yùn)桃.基于VxWorks的雙端口網(wǎng)卡智能雙冗余驅(qū)動(dòng)[J].電子技術(shù)應(yīng)用,2006,32(07):64-66.
[3]田煒,劉利強(qiáng).VxWorks環(huán)境下雙網(wǎng)卡冗余備份技術(shù)的實(shí)現(xiàn)[J].自動(dòng)化技術(shù)與應(yīng)用,2003,20(07):32-34.
2095-6835(2018)20-0081-02
TP393.05
A
10.15913/j.cnki.kjycx.2018.20.081
韓曉(1987—),男,碩士,工程師,從事裝備質(zhì)量監(jiān)督和質(zhì)量管理體系方面的研究。趙昶宇(1982—),男,陜西漢中人,工學(xué)碩士,高級(jí)工程師,主要從事嵌入式系統(tǒng)軟件測(cè)試方面的研究。
〔編輯:張思楠〕