專(zhuān)利名稱(chēng)::以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及通信
技術(shù)領(lǐng)域:
,尤其涉及一種以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法。
背景技術(shù):
:在通信領(lǐng)域,通信設(shè)備的監(jiān)控單元用來(lái)對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行初始化設(shè)置,監(jiān)控網(wǎng)絡(luò)設(shè)備的運(yùn)行狀態(tài)。監(jiān)控單元在工作過(guò)程中所處理的數(shù)據(jù)往往不是來(lái)自網(wǎng)口,而是通過(guò)光纖或其它電纜傳輸過(guò)來(lái)的具有特殊協(xié)議格式的數(shù)據(jù),這樣就要求使用一種方法來(lái)將從光纖傳輸過(guò)來(lái)的數(shù)據(jù)取出并發(fā)送給應(yīng)用程序。傳統(tǒng)的采用物理網(wǎng)口和專(zhuān)用網(wǎng)口芯片來(lái)實(shí)現(xiàn)的方案由于對(duì)傳輸介質(zhì)、傳輸協(xié)議和所傳輸?shù)臄?shù)據(jù)格式有特殊要求,顯然己滿足不了這種需求。
發(fā)明內(nèi)容本發(fā)明的發(fā)明目的是提供一種以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,可以從傳輸介質(zhì)取出數(shù)據(jù)進(jìn)行處理,并提高網(wǎng)絡(luò)處理的靈活性和兼容性。為達(dá)到上述發(fā)明目的,本發(fā)明提出以下的技術(shù)方案一種以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,包括以下步驟A、CPU加載虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序并進(jìn)行初始化;B、CPU從底層物理設(shè)備讀取數(shù)據(jù)并緩存到緩沖區(qū)中;將所述數(shù)據(jù)和虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)一起發(fā)送到網(wǎng)絡(luò)任務(wù)隊(duì)列,所述網(wǎng)絡(luò)任務(wù)隊(duì)列調(diào)用驅(qū)動(dòng)接收函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理并提交到協(xié)議棧;所述協(xié)議棧將數(shù)據(jù)發(fā)送到上層應(yīng)用程序;C、所述上層應(yīng)用程序?qū)?shù)據(jù)發(fā)送到協(xié)議棧,將所述數(shù)據(jù)從協(xié)議棧取出存入虛擬網(wǎng)絡(luò)設(shè)備;所述虛擬網(wǎng)絡(luò)設(shè)備將數(shù)據(jù)打包并發(fā)往底層物理設(shè)備;所述底層物理設(shè)備將數(shù)據(jù)進(jìn)行發(fā)送。其中,所述步驟A包括以下步驟A1、CPU創(chuàng)建虛擬網(wǎng)絡(luò)設(shè)備描述符,調(diào)用字符串解析函數(shù)和網(wǎng)絡(luò)內(nèi)存申請(qǐng)函數(shù),注冊(cè)設(shè)備驅(qū)動(dòng)函數(shù),對(duì)虛擬網(wǎng)絡(luò)設(shè)備進(jìn)行操作配置;其中,所述字符串解析函數(shù)用于對(duì)傳入的字符串進(jìn)行解析,所述網(wǎng)絡(luò)內(nèi)存池申請(qǐng)函數(shù)用于向物理內(nèi)存申請(qǐng)內(nèi)存,并設(shè)定最大傳輸單元的大小;A2、對(duì)變量、中斷和回調(diào)函數(shù)進(jìn)行初始化;A3、將所述虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)與IP協(xié)議棧進(jìn)行掛接;A4、設(shè)置虛擬網(wǎng)絡(luò)設(shè)備的初始化參數(shù);其中,所述初始化參數(shù)包括IP地址、子網(wǎng)掩碼、路由設(shè)置參數(shù)。其中,所述步驟B具體包括以下步驟B1、當(dāng)檢測(cè)到底層物理設(shè)備有數(shù)據(jù)到達(dá)時(shí),觸發(fā)CPU中斷,將所述數(shù)據(jù)讀出存入緩沖區(qū);B2、向網(wǎng)絡(luò)任務(wù)隊(duì)列發(fā)送所述數(shù)據(jù)在緩沖區(qū)的首尾指針和虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù);B3、網(wǎng)絡(luò)任務(wù)隊(duì)列依次從隊(duì)列中取出接收到的數(shù)據(jù)并調(diào)用虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理并提交到協(xié)議桟;B4、所述協(xié)議棧將數(shù)據(jù)發(fā)送到上層應(yīng)用程序。其中,所述步驟B3具體包括以下步驟B311、從網(wǎng)絡(luò)內(nèi)存池中申請(qǐng)一塊空間,將所述首尾指針之間的MAC數(shù)據(jù)幀復(fù)制到申請(qǐng)到的所述空間;B312、對(duì)MAC數(shù)據(jù)幀的MAC地址進(jìn)行判斷,如果所述MAC數(shù)據(jù)幀是組播包,則將組播包內(nèi)容保存到本地存儲(chǔ)系統(tǒng),將組播包計(jì)數(shù)器變量加一,并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);B313、如果所述MAC數(shù)據(jù)幀是單播包或廣播包,則退出回調(diào)函數(shù),由驅(qū)動(dòng)接收函數(shù)將所述MAC數(shù)據(jù)幀提交到協(xié)議棧,并將單播包或廣播包計(jì)數(shù)器加一。其中,所述步驟B3具體包括以下步驟B321、從網(wǎng)絡(luò)內(nèi)存池中申請(qǐng)一塊空間,并將頭尾指針之間的HDLC數(shù)據(jù)幀復(fù)制到申請(qǐng)到的所述空間;B322、對(duì)HDLC數(shù)據(jù)幀類(lèi)型進(jìn)行判斷,如果所述HDLC數(shù)據(jù)幀為請(qǐng)求測(cè)試包,則CPU將打包一個(gè)類(lèi)型為請(qǐng)求回復(fù)包的HDLC數(shù)據(jù)幀,由FPGA發(fā)送到設(shè)備一并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);如果所述HDLC數(shù)據(jù)幀為請(qǐng)求回復(fù)包,則將該HDLC數(shù)據(jù)幀丟棄并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);如果所述HDLC數(shù)據(jù)幀為IP數(shù)據(jù)包,則回調(diào)函數(shù)退出;B323、對(duì)HDLC數(shù)據(jù)幀承載的IP數(shù)據(jù)包加上一個(gè)MAC幀頭,將其提交到協(xié)議棧,同時(shí)將數(shù)據(jù)包接收計(jì)數(shù)變量加一。其中,所述步驟C具體包括以下步驟-C1、應(yīng)用程序通過(guò)協(xié)議棧發(fā)送數(shù)據(jù);C2、協(xié)議棧通過(guò)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)發(fā)送函數(shù)將所述數(shù)據(jù)發(fā)送到虛擬網(wǎng)絡(luò)設(shè)備;C3、虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)發(fā)送函數(shù)從協(xié)議棧取得獲取數(shù)據(jù)并進(jìn)行處理,打包成所需要的數(shù)據(jù)格式并發(fā)送到底層物理設(shè)備。其中,所述步驟C3具體包括以下步驟C31、將所述數(shù)據(jù)從協(xié)議棧取出放到緩沖區(qū);C32、將取出的數(shù)據(jù)包偏移MAC幀頭個(gè)長(zhǎng)度,給IP數(shù)據(jù)包加上HDLC幀頭,將源地址設(shè)置為源設(shè)備地址,目的地址設(shè)置為目的設(shè)備地址,將包類(lèi)型設(shè)置為IP數(shù)據(jù)包類(lèi)型;C33、將設(shè)置好的HDLC幀寫(xiě)到所述底層物理設(shè)備FPGA的FIFO中,由FPGA通過(guò)光口將數(shù)據(jù)進(jìn)行發(fā)送。其中,所述步驟C3之后還包括步驟C4、所述虛擬網(wǎng)絡(luò)設(shè)備判斷數(shù)據(jù)包是否發(fā)送成功,如果是則接收成功計(jì)數(shù)器加一;否則接收失敗計(jì)數(shù)器加一。優(yōu)選地,所述步驟C之后還包括步驟-D、對(duì)虛擬網(wǎng)絡(luò)設(shè)備的IP地址、子網(wǎng)掩碼進(jìn)行動(dòng)態(tài)修改;對(duì)虛擬網(wǎng)絡(luò)設(shè)備進(jìn)行路由的添加和刪除;卸載虛擬網(wǎng)絡(luò)設(shè)備。其中,所述協(xié)議棧均采用VxWorks或Linux操作系統(tǒng)中的組件,所述協(xié)議棧為T(mén)CP/IP協(xié)議棧和IPX/SPX/NetBIOS協(xié)議棧。。從以上技術(shù)方案可以看出,本發(fā)明的技術(shù)方案采用計(jì)算機(jī)程序?qū)σ蕴W(wǎng)中的傳輸數(shù)據(jù)進(jìn)行處理,可以在不使用網(wǎng)口芯片的情況下實(shí)現(xiàn)類(lèi)似網(wǎng)卡的功能,很好的解決了底層物理設(shè)備同上層應(yīng)用程序的網(wǎng)絡(luò)通信問(wèn)題,還可直接和底層物理設(shè)備相交互,接口易擴(kuò)展,大大提高了網(wǎng)絡(luò)處理的靈活性和兼容性。另外,本發(fā)明可和CPU共用物理內(nèi)存,成本低,操作簡(jiǎn)單。圖1是本發(fā)明中數(shù)據(jù)傳輸?shù)幕玖鞒虉D;圖2是本發(fā)明方法初始化過(guò)程的流程圖;圖3是本發(fā)明方法接收數(shù)據(jù)過(guò)程的流程圖;圖4是本發(fā)明方法發(fā)送數(shù)據(jù)過(guò)程的流程圖。具體實(shí)施方式下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)描述。本發(fā)明提供一種通過(guò)虛擬以太網(wǎng)網(wǎng)絡(luò)設(shè)備進(jìn)行數(shù)據(jù)處理的方法,如圖1所示,可通過(guò)虛擬網(wǎng)絡(luò)設(shè)備將數(shù)據(jù)在設(shè)備間進(jìn)行傳輸,主要包括加載虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)并進(jìn)行初始化、通過(guò)虛擬網(wǎng)絡(luò)設(shè)備接收數(shù)據(jù)、通過(guò)虛擬網(wǎng)絡(luò)設(shè)備發(fā)送數(shù)據(jù)三個(gè)步驟(一)初始化過(guò)程、CPU加載虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序并進(jìn)行初始化;(二)數(shù)據(jù)接收過(guò)程、CPU從底層物理設(shè)備讀取數(shù)據(jù)并緩存到緩沖區(qū)中;將所述數(shù)據(jù)和虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)一起發(fā)送到網(wǎng)絡(luò)任務(wù)隊(duì)列,所述網(wǎng)絡(luò)任務(wù)隊(duì)列調(diào)用驅(qū)動(dòng)接收函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理并提交到協(xié)議棧;所述協(xié)議棧將數(shù)據(jù)發(fā)送到上層應(yīng)用程序;(三)數(shù)據(jù)發(fā)送過(guò)程、所述上層應(yīng)用程序?qū)?shù)據(jù)發(fā)送到協(xié)議棧,將所述數(shù)據(jù)從協(xié)議棧取出存入虛擬網(wǎng)絡(luò)設(shè)備;所述虛擬網(wǎng)絡(luò)設(shè)備將數(shù)據(jù)打包并發(fā)往底層物理設(shè)備;所述底層物理設(shè)備將數(shù)據(jù)進(jìn)行發(fā)送。在本發(fā)明較優(yōu)的實(shí)施例中,本發(fā)明方法還包括對(duì)虛擬網(wǎng)絡(luò)設(shè)備進(jìn)行設(shè)置的過(guò)程對(duì)虛擬網(wǎng)絡(luò)設(shè)備的IP地址、子網(wǎng)掩碼進(jìn)行動(dòng)態(tài)修改;對(duì)虛擬網(wǎng)絡(luò)設(shè)備進(jìn)行路由的添加和刪除;卸載虛擬網(wǎng)絡(luò)設(shè)備。本發(fā)明通過(guò)基于VxWorks或Linux的虛擬網(wǎng)絡(luò)設(shè)備,很好的解決了底層物理設(shè)備同上層應(yīng)用程序的網(wǎng)絡(luò)通信問(wèn)題,且本發(fā)明的虛擬網(wǎng)絡(luò)設(shè)備與底層物理設(shè)備之間的數(shù)據(jù)交互接口靈活,具有很好的擴(kuò)展性和兼容性。(一)、如圖2所示,CPU加載虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)并進(jìn)行初始化的過(guò)程,包括以下步驟5101、CPU創(chuàng)建虛擬網(wǎng)絡(luò)設(shè)備描述符,調(diào)用字符串解析函數(shù)和網(wǎng)絡(luò)內(nèi)存申請(qǐng)函數(shù),注冊(cè)設(shè)備驅(qū)動(dòng)函數(shù),對(duì)虛擬網(wǎng)絡(luò)設(shè)備進(jìn)行操作配置通過(guò)調(diào)用vxworks操作系統(tǒng)函數(shù),來(lái)調(diào)用虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的加載程序;加載程序創(chuàng)建一虛擬網(wǎng)絡(luò)設(shè)備描述符,依次調(diào)用字符串解析函數(shù)和網(wǎng)絡(luò)內(nèi)存申請(qǐng)函數(shù),將虛擬設(shè)備驅(qū)動(dòng)函數(shù)注冊(cè)到操作系統(tǒng)。其中,字符串解析函數(shù)用來(lái)解析傳入的字符串,如網(wǎng)絡(luò)設(shè)備在系統(tǒng)中的編號(hào)等;網(wǎng)絡(luò)內(nèi)存池申請(qǐng)函數(shù)用來(lái)以VxWorks特定的格式向CPU申請(qǐng)網(wǎng)絡(luò)內(nèi)存池、設(shè)定MTU等參數(shù),具體申請(qǐng)內(nèi)存的大小和MTU(最大傳輸單元)的大小根據(jù)具體需要來(lái)確定;注冊(cè)設(shè)備驅(qū)動(dòng)函數(shù)用來(lái)將虛擬網(wǎng)絡(luò)設(shè)備的各驅(qū)動(dòng)函數(shù)向操作系統(tǒng)注冊(cè);最后對(duì)虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)進(jìn)行操作配置,如是否對(duì)廣播或組播地址進(jìn)行過(guò)濾等,驅(qū)動(dòng)加載完成后返回這個(gè)網(wǎng)絡(luò)設(shè)備的描述符。5102、對(duì)變量、中斷和回調(diào)函數(shù)進(jìn)行初始化所述初始化操作主要包括初始化全局變量,如數(shù)據(jù)包的統(tǒng)計(jì)變量等;中斷初始化操作向系統(tǒng)注冊(cè)中斷并使能中斷;回調(diào)函數(shù)注冊(cè)主要完成對(duì)函數(shù)指針的賦值操作,這些函數(shù)指針用來(lái)對(duì)接收到的數(shù)據(jù)進(jìn)行處理。5103、將所述虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)與IP協(xié)議棧進(jìn)行掛接CPU通過(guò)操作系統(tǒng)函數(shù)將虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)同系統(tǒng)IP協(xié)議棧進(jìn)行掛接。在進(jìn)行所述掛接操作時(shí),可以通過(guò)將虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)描述符的接口類(lèi)型參數(shù)值設(shè)置為0或保留默認(rèn)值來(lái)決定IP協(xié)議棧對(duì)所提交的數(shù)據(jù)是否進(jìn)行MAC幀幀頭的檢驗(yàn),若值為0則協(xié)議棧不會(huì)對(duì)驅(qū)動(dòng)所提交的MAC幀進(jìn)行MAC幀幀頭檢測(cè),MAC地址可以為任意值;若使用默認(rèn)值則會(huì)進(jìn)行檢測(cè),MAC地址需根據(jù)需求進(jìn)行設(shè)置。S104、設(shè)置虛擬網(wǎng)絡(luò)設(shè)備的初始化參數(shù);其中,所述初始化參數(shù)包括IP地址、子網(wǎng)掩碼、路由設(shè)置等參數(shù)CPU通過(guò)操作系統(tǒng)函數(shù)來(lái)完成所述參數(shù)的設(shè)置。(二)、如圖3所示,通過(guò)虛擬網(wǎng)絡(luò)設(shè)備接收數(shù)據(jù)的過(guò)程包括如下步驟5201、當(dāng)檢測(cè)到底層物理設(shè)備有數(shù)據(jù)到達(dá)時(shí),觸發(fā)CPU中斷,將所述數(shù)據(jù)讀出存入緩沖區(qū)當(dāng)物理設(shè)備有數(shù)據(jù)到來(lái)時(shí)觸發(fā)CPU產(chǎn)生中斷,中斷處理函數(shù)從物理設(shè)備取出數(shù)據(jù),這些數(shù)據(jù)中承載著網(wǎng)絡(luò)數(shù)據(jù)包。5202、將所述數(shù)據(jù)在緩沖區(qū)的首尾指針和虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)一起發(fā)送到網(wǎng)絡(luò)任務(wù)隊(duì)列CPU將取出的數(shù)據(jù)連同虛擬網(wǎng)絡(luò)設(shè)備接收函數(shù)一同發(fā)送到網(wǎng)絡(luò)任務(wù)處理隊(duì)列,由網(wǎng)絡(luò)任務(wù)處理隊(duì)列調(diào)用虛擬網(wǎng)絡(luò)設(shè)備接收函數(shù)來(lái)對(duì)接收到的數(shù)據(jù)進(jìn)行處理。使用網(wǎng)絡(luò)任務(wù)處理隊(duì)列可以對(duì)收到的數(shù)據(jù)進(jìn)行緩沖,防止由于底層接收數(shù)據(jù)過(guò)快而網(wǎng)絡(luò)驅(qū)動(dòng)來(lái)不及處理的現(xiàn)象出現(xiàn),同時(shí)也降低了底層物理設(shè)備和虛擬網(wǎng)絡(luò)設(shè)備之間耦合性。5203、網(wǎng)絡(luò)任務(wù)隊(duì)列依次從隊(duì)列中取出接收到的數(shù)據(jù)并調(diào)用虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理并提交到協(xié)議棧:從已分配的網(wǎng)絡(luò)內(nèi)存池獲取空間用來(lái)存放處理后的網(wǎng)絡(luò)數(shù)據(jù)包;在虛擬網(wǎng)絡(luò)設(shè)備接收函數(shù)中通過(guò)回調(diào)函數(shù)對(duì)接收到的數(shù)據(jù)進(jìn)行處理,得到符合協(xié)議棧數(shù)據(jù)格式要求的數(shù)據(jù)包;將數(shù)據(jù)復(fù)制到上述申請(qǐng)的空間并提交到協(xié)議棧。在虛擬網(wǎng)絡(luò)驅(qū)動(dòng)的接收函數(shù)中,對(duì)接收數(shù)據(jù)的處理可以根據(jù)需要進(jìn)行擴(kuò)展。如果接收到的數(shù)據(jù)包格式已經(jīng)是標(biāo)準(zhǔn)的網(wǎng)絡(luò)數(shù)據(jù)包格式,則可以不進(jìn)行處理,直接提交協(xié)議棧。5204、所述協(xié)議棧將數(shù)據(jù)發(fā)送到上層應(yīng)用程序:操作完成后不需要對(duì)所申的內(nèi)存空間進(jìn)行釋放,協(xié)議棧對(duì)該塊內(nèi)存的數(shù)據(jù)處理完后會(huì)進(jìn)行內(nèi)存釋放操作。在對(duì)接收到的數(shù)據(jù)包進(jìn)行處理時(shí),可以使用全局的計(jì)數(shù)變量對(duì)接收到的數(shù)據(jù)包進(jìn)行計(jì)數(shù),計(jì)數(shù)策略可自行制定,一般可以根據(jù)處理結(jié)果來(lái)對(duì)接收到的數(shù)據(jù)包進(jìn)行計(jì)數(shù)如果數(shù)據(jù)包處理成功則接收成功計(jì)數(shù)器加一;否則接收失敗計(jì)數(shù)器加一。(三)、如圖4所示,通過(guò)虛擬網(wǎng)絡(luò)設(shè)備發(fā)送數(shù)據(jù),包括如下步驟5301、應(yīng)用程序通過(guò)協(xié)議棧發(fā)送數(shù)據(jù)應(yīng)用層通過(guò)協(xié)議棧發(fā)送數(shù)據(jù),當(dāng)協(xié)議棧有數(shù)據(jù)需要發(fā)送時(shí)會(huì)自動(dòng)調(diào)用注冊(cè)到操作系統(tǒng)的虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)發(fā)送函數(shù)。5302、協(xié)議棧通過(guò)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)發(fā)送函數(shù)將所述數(shù)據(jù)發(fā)送到虛擬網(wǎng)絡(luò)設(shè)備。5303、虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)發(fā)送函數(shù)從協(xié)議棧獲取數(shù)據(jù)并進(jìn)行處理,打包成所需要的數(shù)據(jù)格式并發(fā)送到底層物理設(shè)備。如果底層物理設(shè)備所傳輸?shù)臄?shù)據(jù)格式為標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)數(shù)據(jù)包格式,在驅(qū)動(dòng)發(fā)送函數(shù)中可以不對(duì)從網(wǎng)絡(luò)協(xié)議棧接收到的數(shù)據(jù)進(jìn)行處理,直接發(fā)送到底層物理設(shè)備。根據(jù)發(fā)送結(jié)果,利用全局計(jì)數(shù)變量對(duì)所發(fā)送的數(shù)據(jù)包進(jìn)行計(jì)數(shù),計(jì)數(shù)策略可自行制定,一般可以根據(jù)發(fā)送結(jié)果來(lái)判斷數(shù)據(jù)包是否發(fā)送成功,如果是則接收成功計(jì)數(shù)器加一;否則接收失敗計(jì)數(shù)器加一。需要說(shuō)明的是,在同一個(gè)嵌入式系統(tǒng)中可以同時(shí)存在兩個(gè)或兩個(gè)以上這種虛擬網(wǎng)絡(luò)設(shè)備,當(dāng)系統(tǒng)與多個(gè)底層物理設(shè)備相連時(shí),可以加載多個(gè)虛擬網(wǎng)絡(luò)設(shè)備。根據(jù)傳輸?shù)臄?shù)據(jù)包類(lèi)型的不同,下面提供兩種基于VxWorks操作系統(tǒng)的實(shí)施例對(duì)兩臺(tái)通信設(shè)備進(jìn)行數(shù)據(jù)傳輸?shù)木唧w過(guò)程進(jìn)行詳細(xì)描述。其中基于Linux操作系統(tǒng)的工作原理同樣適用于本方案,只是實(shí)現(xiàn)的方法和操作的步驟略有不同,在此不再贅述。實(shí)施例一設(shè)備一與設(shè)備二之間傳輸?shù)氖荕AC數(shù)據(jù)包,其中設(shè)備二使用虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)來(lái)完成數(shù)據(jù)的收發(fā),其接收數(shù)據(jù)的詳細(xì)流程可以是首先設(shè)備一向設(shè)備二通過(guò)光纖發(fā)送MAC數(shù)據(jù)包,MAC數(shù)據(jù)包格式為標(biāo)準(zhǔn)以太網(wǎng)MAC數(shù)據(jù)幀格式,MAC數(shù)據(jù)包類(lèi)型包括單播包、廣播包和組播包,由不同的MAC地址進(jìn)行區(qū)分。設(shè)備二的底層物理設(shè)備FPGA從光口接收到MAC數(shù)據(jù)幀后觸發(fā)中斷,由中斷服務(wù)程序從FPGA的FIFO中將MAC數(shù)據(jù)幀讀出放入緩沖區(qū),并記錄MAC數(shù)據(jù)幀在緩沖區(qū)中的頭尾指針。將虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)和上述頭尾指針一起發(fā)到網(wǎng)絡(luò)任務(wù)消息隊(duì)列,由網(wǎng)絡(luò)任務(wù)消息隊(duì)列來(lái)調(diào)用驅(qū)動(dòng)接收函數(shù)對(duì)存放在頭尾指針之間的數(shù)據(jù)進(jìn)行處理。在驅(qū)動(dòng)接收函數(shù)中,首先從網(wǎng)絡(luò)內(nèi)存池中申請(qǐng)一塊空間,并將頭尾指針之間的MAC數(shù)據(jù)幀復(fù)制到申請(qǐng)到的空間中。然后通過(guò)回調(diào)函數(shù)對(duì)接收到的MAC數(shù)據(jù)進(jìn)幀行處理。在回調(diào)函數(shù)中,首先對(duì)MAC數(shù)據(jù)幀的MAC地址進(jìn)行判斷,如果是組播包,則將組播包內(nèi)容保存到本地存儲(chǔ)系統(tǒng),將組播包計(jì)數(shù)器變量加一并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);如果是單播包或廣播包則退出回調(diào)函數(shù),由驅(qū)動(dòng)接收函數(shù)提交到協(xié)議棧并將單播包或廣播包計(jì)數(shù)器加一。上層應(yīng)用程序通過(guò)socket程序從協(xié)議棧接收MAC幀所承載的數(shù)據(jù)。上層應(yīng)用程序在對(duì)接收到的數(shù)據(jù)進(jìn)行處理后通過(guò)socket向設(shè)備一發(fā)送回復(fù)數(shù)據(jù)?;貜?fù)數(shù)據(jù)經(jīng)協(xié)議棧調(diào)用已經(jīng)注冊(cè)到操作系統(tǒng)的虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)發(fā)送函數(shù)將數(shù)據(jù)發(fā)出。在發(fā)送數(shù)據(jù)的過(guò)程中首先將數(shù)據(jù)從協(xié)議棧取出放到緩沖區(qū),所取出的數(shù)據(jù)格式已經(jīng)由協(xié)議棧包裝成標(biāo)準(zhǔn)MAC幀格式,所以這里直接將這些數(shù)據(jù)寫(xiě)到FPGA的FIFO中即可,由FPGA通過(guò)光口將數(shù)據(jù)發(fā)送到設(shè)備一。頁(yè)實(shí)施例二設(shè)備一與設(shè)備二傳輸?shù)氖荋DLC數(shù)據(jù)包,HDLC數(shù)據(jù)包的幀格式如表1所示<table>tableseeoriginaldocumentpage13</column></row><table>表1其中包類(lèi)型包括0x00—數(shù)據(jù)幀,此類(lèi)型的HDLC幀的包內(nèi)容為IP數(shù)據(jù)包;0x01—請(qǐng)求測(cè)試幀,此類(lèi)型的HDLC幀的包內(nèi)容為0,長(zhǎng)度為1個(gè)字節(jié);0x02-請(qǐng)求回復(fù)測(cè)試幀,此類(lèi)型的HDLC幀的包內(nèi)容為0,長(zhǎng)度為1個(gè)字節(jié),用來(lái)作為0x01類(lèi)型的數(shù)據(jù)幀的回復(fù)。本實(shí)施例中設(shè)備二使用虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)來(lái)完成數(shù)據(jù)的收發(fā),其接收數(shù)據(jù)的詳細(xì)流程如下首先設(shè)備一向設(shè)備二通過(guò)光纖發(fā)送HDLC數(shù)據(jù)包。設(shè)備二的底層物理設(shè)備FPGA從光口接收到HDLC數(shù)據(jù)幀后觸發(fā)中斷,由中斷服務(wù)程序從FPGA的FIFO中將HDLC數(shù)據(jù)幀讀出放入緩沖區(qū),并記錄HDLC數(shù)據(jù)幀在緩沖區(qū)中的頭尾指針。將虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)和上述頭尾指針一起發(fā)到網(wǎng)絡(luò)任務(wù)消息隊(duì)列,由網(wǎng)絡(luò)任務(wù)消息隊(duì)列來(lái)調(diào)用驅(qū)動(dòng)接收函數(shù)對(duì)存放在頭尾指針之間的數(shù)據(jù)進(jìn)行處理。在驅(qū)動(dòng)接收函數(shù)中,首先從網(wǎng)絡(luò)內(nèi)存池中申請(qǐng)一塊空間,并將頭尾指針之間的HDLC數(shù)據(jù)幀復(fù)制到申請(qǐng)到的空間中。然后通過(guò)回調(diào)函數(shù)對(duì)接收到的HDLC數(shù)據(jù)進(jìn)幀行處理。在回調(diào)函數(shù)中,首先將HDLC數(shù)據(jù)幀中的源地址保存到addr,進(jìn)而對(duì)HDLC數(shù)據(jù)幀類(lèi)型進(jìn)行判斷如果包類(lèi)型為0x01,則為請(qǐng)求測(cè)試包,CPU將打包一個(gè)類(lèi)型為0x02的HDLC數(shù)據(jù)幀由FPGA發(fā)送到設(shè)備一并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);如果包類(lèi)型為0x02,則為請(qǐng)求回復(fù)包,說(shuō)明CPU發(fā)送的包類(lèi)型為0x01的請(qǐng)求包得到了回復(fù),HDLC鏈路狀況良好,直接將該HDLC數(shù)據(jù)幀丟棄并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);如果包類(lèi)型為OxOO,則HDLC幀承載的是IP數(shù)據(jù)包,回調(diào)函數(shù)退出,不做處理。由于提交協(xié)議棧的數(shù)據(jù)包格式必須為標(biāo)準(zhǔn)的MAC數(shù)據(jù)幀格式,所以在虛擬網(wǎng)絡(luò)設(shè)備掛接到操作系統(tǒng)時(shí),需要設(shè)置虛擬網(wǎng)絡(luò)設(shè)備描述符的接口類(lèi)型參數(shù),使其值為0,這樣協(xié)議棧就不會(huì)對(duì)提交的MAC數(shù)據(jù)幀進(jìn)行MAC幀頭的檢測(cè)。所以我們對(duì)HDLC所承載的IP數(shù)據(jù)包隨便加上一個(gè)MAC幀頭即可將其提交到協(xié)議棧,由協(xié)議棧將數(shù)據(jù)發(fā)送到應(yīng)用層。同時(shí)將數(shù)據(jù)包接收計(jì)數(shù)變量加一。上層應(yīng)用程序通過(guò)socket程序從協(xié)議棧接收IP幀所承載的數(shù)據(jù),并發(fā)送回復(fù)給設(shè)備一?;貜?fù)數(shù)據(jù)經(jīng)協(xié)議棧調(diào)用已經(jīng)注冊(cè)到操作系統(tǒng)的虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)發(fā)送函數(shù)將數(shù)據(jù)發(fā)出。在發(fā)送數(shù)據(jù)的過(guò)程中首先將數(shù)據(jù)從協(xié)議棧取出放到緩沖區(qū),所取出的數(shù)據(jù)格式為標(biāo)準(zhǔn)MAC幀格式。將取出的數(shù)據(jù)包偏移MAC幀頭個(gè)長(zhǎng)度,給IP數(shù)據(jù)包加上HDLC幀頭,源地址為設(shè)備二地址,目的地址為設(shè)備一地址,包類(lèi)型為0x00。將打包好的HDLC幀寫(xiě)到FPGA的FIFO中,由FPGA通過(guò)光口將數(shù)據(jù)發(fā)送到設(shè)備一。由實(shí)例一和實(shí)例二可以看出,本發(fā)明所提及的虛擬網(wǎng)絡(luò)設(shè)備和底層物理設(shè)備的接口靈活,易擴(kuò)展,可以處理多種格式的數(shù)據(jù),適合于光纖、E1等有線網(wǎng)絡(luò)通訊的場(chǎng)合。同時(shí)不需要專(zhuān)門(mén)的網(wǎng)口芯片,節(jié)省了費(fèi)用。以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專(zhuān)利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專(zhuān)利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。權(quán)利要求1.一種以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,包括以下步驟A、CPU加載虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序并進(jìn)行初始化;B、CPU從底層物理設(shè)備讀取數(shù)據(jù)并緩存到緩沖區(qū)中;將所述數(shù)據(jù)和虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)一起發(fā)送到網(wǎng)絡(luò)任務(wù)隊(duì)列,所述網(wǎng)絡(luò)任務(wù)隊(duì)列調(diào)用驅(qū)動(dòng)接收函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理并提交到協(xié)議棧;所述協(xié)議棧將數(shù)據(jù)發(fā)送到上層應(yīng)用程序;C、所述上層應(yīng)用程序?qū)?shù)據(jù)發(fā)送到協(xié)議棧,將所述數(shù)據(jù)從協(xié)議棧取出存入虛擬網(wǎng)絡(luò)設(shè)備;所述虛擬網(wǎng)絡(luò)設(shè)備將數(shù)據(jù)打包并發(fā)往底層物理設(shè)備;所述底層物理設(shè)備將數(shù)據(jù)進(jìn)行發(fā)送。2、根據(jù)權(quán)利要求1所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟A包括以下步驟A1、CPU創(chuàng)建虛擬網(wǎng)絡(luò)設(shè)備描述符,調(diào)用字符串解析函數(shù)和網(wǎng)絡(luò)內(nèi)存申請(qǐng)函數(shù),注冊(cè)設(shè)備驅(qū)動(dòng)函數(shù),對(duì)虛擬網(wǎng)絡(luò)設(shè)備進(jìn)行操作配置;其中,所述字符串解析函數(shù)用于對(duì)傳入的字符串進(jìn)行解析,所述網(wǎng)絡(luò)內(nèi)存池申請(qǐng)函數(shù)用于向物理內(nèi)存申請(qǐng)內(nèi)存,并設(shè)定最大傳輸單元的大小;A2、對(duì)變量、中斷和回調(diào)函數(shù)進(jìn)行初始化;A3、將所述虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)與IP協(xié)議棧進(jìn)行掛接;A4、設(shè)置虛擬網(wǎng)絡(luò)設(shè)備的初始化參數(shù);其中,所述初始化參數(shù)包括IP地址、子網(wǎng)掩碼、路由設(shè)置參數(shù)。3、根據(jù)權(quán)利要求1所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟B具體包括以下步驟B1、當(dāng)檢測(cè)到底層物理設(shè)備有數(shù)據(jù)到達(dá)時(shí),觸發(fā)CPU中斷,將所述數(shù)據(jù)讀出存入緩沖區(qū);B2、向網(wǎng)絡(luò)任務(wù)隊(duì)列發(fā)送所述數(shù)據(jù)在緩沖區(qū)的首尾指針和虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù);B3、網(wǎng)絡(luò)任務(wù)隊(duì)列依次從隊(duì)列中取出接收到的數(shù)據(jù)并調(diào)用虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理并提交到協(xié)議棧;B4、所述協(xié)議棧將數(shù)據(jù)發(fā)送到上層應(yīng)用程序。4、根據(jù)權(quán)利要求3所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟B3具體包括以下步驟已311、從網(wǎng)絡(luò)內(nèi)存池中申請(qǐng)一塊空間,將所述首尾指針之間的MAC數(shù)據(jù)幀復(fù)制到申請(qǐng)到的所述空間;B312、對(duì)MAC數(shù)據(jù)幀的MAC地址進(jìn)行判斷,如果所述MAC數(shù)據(jù)幀是組播包,則將組播包內(nèi)容保存到本地存儲(chǔ)系統(tǒng),將組播包計(jì)數(shù)器變量加一,并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);B313、如果所述MAC數(shù)據(jù)幀是單播包或廣播包,則退出回調(diào)函數(shù),由驅(qū)動(dòng)接收函數(shù)將所述MAC數(shù)據(jù)幀提交到協(xié)議棧,并將單播包或廣播包計(jì)數(shù)器加一。5、根據(jù)權(quán)利要求3所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟B3具體包括以下步驟B321、從網(wǎng)絡(luò)內(nèi)存池中申請(qǐng)一塊空間,并將頭尾指針之間的HDLC數(shù)據(jù)幀復(fù)制到申請(qǐng)到的所述空間;B322、對(duì)HDLC數(shù)據(jù)幀類(lèi)型進(jìn)行判斷,如果所述HDLC數(shù)據(jù)幀為請(qǐng)求測(cè)試包,則CPU將打包一個(gè)類(lèi)型為請(qǐng)求回復(fù)包的HDLC數(shù)據(jù)幀,由FPGA發(fā)送到設(shè)備一并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);如果所述HDLC數(shù)據(jù)幀為請(qǐng)求回復(fù)包,則將該HDLC數(shù)據(jù)幀丟棄并退出回調(diào)函數(shù)和驅(qū)動(dòng)接收函數(shù);如果所述HDLC數(shù)據(jù)幀為IP數(shù)據(jù)包,則回調(diào)函數(shù)退出;B323、對(duì)HDLC數(shù)據(jù)幀承載的IP數(shù)據(jù)包加上一個(gè)MAC幀頭,將其提交到協(xié)議棧,同時(shí)將數(shù)據(jù)包接收計(jì)數(shù)變量加一。6、根據(jù)權(quán)利要求1所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟C具體包括以下步驟C1、應(yīng)用程序通過(guò)協(xié)議棧發(fā)送數(shù)據(jù);C2、協(xié)議棧通過(guò)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)發(fā)送函數(shù)將所述數(shù)據(jù)發(fā)送到虛擬網(wǎng)絡(luò)設(shè)備;C3、虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)發(fā)送函數(shù)從協(xié)議棧取得獲取數(shù)據(jù)并進(jìn)行處理,打包成所需要的數(shù)據(jù)格式并發(fā)送到底層物理設(shè)備。7、根據(jù)權(quán)利要求6所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟C3具體包括以下步驟C31、將所述數(shù)據(jù)從協(xié)議棧取出放到緩沖區(qū);C32、將取出的數(shù)據(jù)包偏移MAC幀頭個(gè)長(zhǎng)度,給IP數(shù)據(jù)包加上HDLC幀頭,將源地址設(shè)置為源設(shè)備地址,目的地址設(shè)置為目的設(shè)備地址,將包類(lèi)型設(shè)置為IP數(shù)據(jù)包類(lèi)型;C33、將設(shè)置好的HDLC幀寫(xiě)到所述底層物理設(shè)備FPGA的FIFO中,由FPGA通過(guò)光口將數(shù)據(jù)進(jìn)行發(fā)送。8、根據(jù)權(quán)利要求7所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟C3之后還包括步驟C4、所述虛擬網(wǎng)絡(luò)設(shè)備判斷數(shù)據(jù)包是否發(fā)送成功,如果是則接收成功計(jì)數(shù)器加一;否則接收失敗計(jì)數(shù)器加一。9、根據(jù)權(quán)利要求18中任一項(xiàng)所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于,所述步驟C之后還包括步驟D、對(duì)虛擬網(wǎng)絡(luò)設(shè)備的IP地址、子網(wǎng)掩碼進(jìn)行動(dòng)態(tài)修改;對(duì)虛擬網(wǎng)絡(luò)設(shè)備進(jìn)行路由的添加和刪除;卸載虛擬網(wǎng)絡(luò)設(shè)備。10、根據(jù)權(quán)利要求9所述的以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,其特征在于所述協(xié)議棧均采用VxWorks或Linux操作系統(tǒng)中的組件,所述協(xié)議棧為T(mén)CP/IP協(xié)議棧和IPX/SPX/NetBIOS協(xié)議棧。全文摘要一種以太網(wǎng)中進(jìn)行數(shù)據(jù)處理的方法,包括步驟A、CPU加載虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序并進(jìn)行初始化;B、CPU從底層物理設(shè)備讀取數(shù)據(jù)并緩存到緩沖區(qū)中;將該數(shù)據(jù)和虛擬網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)接收函數(shù)一起發(fā)送到網(wǎng)絡(luò)任務(wù)隊(duì)列,所述網(wǎng)絡(luò)任務(wù)隊(duì)列調(diào)用驅(qū)動(dòng)接收函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理并提交到協(xié)議棧;該協(xié)議棧將數(shù)據(jù)發(fā)送到上層應(yīng)用程序;C、所述上層應(yīng)用程序?qū)?shù)據(jù)發(fā)送到協(xié)議棧,將所述數(shù)據(jù)從協(xié)議棧取出存入虛擬網(wǎng)絡(luò)設(shè)備;所述虛擬網(wǎng)絡(luò)設(shè)備將數(shù)據(jù)打包并發(fā)往底層物理設(shè)備;所述底層物理設(shè)備將數(shù)據(jù)進(jìn)行發(fā)送。本發(fā)明在不使用網(wǎng)口芯片的情況下實(shí)現(xiàn)類(lèi)似網(wǎng)卡的功能,解決了底層物理設(shè)備同上層應(yīng)用程序的網(wǎng)絡(luò)通信問(wèn)題,提高了網(wǎng)絡(luò)處理的靈活性和兼容性以及數(shù)據(jù)傳輸?shù)男省N臋n編號(hào)H04L12/26GK101247266SQ20081006613公開(kāi)日2008年8月20日申請(qǐng)日期2008年3月21日優(yōu)先權(quán)日2008年3月21日發(fā)明者鹿丙杰申請(qǐng)人:深圳國(guó)人通信有限公司