專利名稱:一種網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方法
技術領域:
本發(fā)明涉及通信領域多網(wǎng)絡應用技術,更具體地涉及網(wǎng)卡實現(xiàn)多網(wǎng)絡協(xié) 議棧切換的方法。
背景技術:
隨著網(wǎng)絡技術的普及和應用越來越廣泛,某種具體特殊的應用可能需 要具有某些特定功能的協(xié)議棧來支持,并且在應用需求的不斷變化和更新 中,網(wǎng)絡協(xié)議棧的功能也需要不停地修改和變化。因此在很多網(wǎng)絡應用中, 譬如典型地軟交換上的應用,由于操作系統(tǒng)自帶的網(wǎng)絡協(xié)議棧滿足了通用性導致了不能滿目某些具有特殊要求的應用,以及因源碼的不開;^文性導致了不 能對協(xié)議棧進行修改和定制,因此,開發(fā)通信軟件的商家往往不會使用操作 系統(tǒng)自帶的網(wǎng)絡協(xié)議棧來開發(fā)自己網(wǎng)絡應用程序,而是自己開發(fā)新的協(xié)議 棧,在自己的協(xié)議棧上面去開發(fā)網(wǎng)絡應用程序,這樣可以針對具體的應用而 使網(wǎng)絡協(xié)議棧為上層提供特殊的服務。但是由于考慮到成本問題,商家自己 開發(fā)的協(xié)議棧往往是針對具體的應用,沒有集成對應用程序和驅動程序的調 試、分析及統(tǒng)計等功能,這個時候又需要操作系統(tǒng)自帶的網(wǎng)絡協(xié)議棧來完成 這些功能。因此在開發(fā)中往往需要用到多個網(wǎng)絡協(xié)議棧,而使用多個協(xié)議棧 時協(xié)議棧之間的切換速度便成了亟待解決的問題。因為,如果兩個協(xié)議棧之 間切換的速度過慢,則會導致在雙協(xié)議棧切換時出現(xiàn)丟包問題,從而不能滿 足上層應用程序的需求。而要解決這個問題則需要下層網(wǎng)卡和網(wǎng)卡驅動的支 持。網(wǎng)卡(NIC, Network Interface Card),也稱"網(wǎng)絡適配器",它是連接 計算機與網(wǎng)絡的硬件設備。無論是雙絞線連接、同軸電纜連接,還是光纖連 接,都必須借助網(wǎng)卡才能實現(xiàn)數(shù)據(jù)通信。網(wǎng)卡的主要工作原理是整理計算機 上發(fā)往網(wǎng)線上的數(shù)據(jù),并將數(shù)據(jù)分解為適當大小的數(shù)據(jù)包之后向網(wǎng)絡上發(fā) 送。每塊網(wǎng)卡都有一個唯一的網(wǎng)絡節(jié)點地址,通常稱為MAC地址(物理地 址),它是網(wǎng)卡生產(chǎn)廠家在生產(chǎn)時燒入ROM中的,且保證該地址絕對不會 重復。人們日常使用的網(wǎng)卡都是以太網(wǎng)網(wǎng)卡。目前網(wǎng)卡按其傳輸速度可分為 IOM網(wǎng)卡、10/100M自適應網(wǎng)卡以及千兆(1000M)網(wǎng)卡。如果只是作為 一般用途,如日常辦公等,比較適合使用10M網(wǎng)卡和10/100M自適應網(wǎng) 卡兩種。如果應用于服務器等產(chǎn)品領域,就要選擇千兆級的網(wǎng)卡。目前針對雙協(xié)議棧切換的研究不多,主要的研究集中在ipv4/ipv6雙協(xié) 議棧的研究上?,F(xiàn)有的網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的過程如圖l所示,首先是停 止當前設備驅動的使用,然后是釋放一些與當前使用的協(xié)議棧相關的資源, 并重新啟動設備驅動以支持新的協(xié)議棧。這個切換過程的優(yōu)點是具有通用 性,不會出錯,且代碼量小。但其最主要的缺點就是將整個網(wǎng)卡驅動停止后 又重新啟動了一遍,多次操作了網(wǎng)卡芯片的寄存器,耗時非常大,導致協(xié)議 棧切換期間出現(xiàn)丟包現(xiàn)象,故不能滿足上層應用的需要。發(fā)明內容本發(fā)明所要解決的技術問題是提供一種網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方法, 支持多協(xié)議棧的快速切換,從而能夠避免在協(xié)議棧切換過程中出現(xiàn)數(shù)據(jù)丟包現(xiàn)象。為了解決上述技術問題,本發(fā)明提供了 一種網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方 法,應用于網(wǎng)卡的驅動,該方法包括如下步驟(a) 將雙協(xié)議棧切換與網(wǎng)卡驅動的相關點抽象成切換重點;(b) 進行雙協(xié)議棧切換時,僅針對雙協(xié)議棧將切換重點中的不同點切換過來。進一步地,步驟(a)切換重點包括中斷處理機制、內存分配和釋放 機制以及連接的建立方式;步驟(b)切換重點的不同點切換包括(bl)掛接新協(xié)議棧的中斷處理函數(shù),以將接收到的包上送給新協(xié)議棧處理;(b2)更換接收緩沖區(qū)內存,包括將原協(xié)議棧的接收緩沖區(qū)內存釋放,
以及為新協(xié)議棧申請分配內存,并且將新協(xié)議棧內存地址寫入到4妄收緩沖區(qū)的描述符中;(b3 )根據(jù)新協(xié)議棧的需要進行連接的建立方式的切換。進一步地,步驟(bl)掛接通過將中斷函數(shù)指針指向新協(xié)議棧的中斷處 理函數(shù)完成;步驟(b2)先保存原協(xié)議棧的接收緩沖區(qū)的內存地址,然后將 預先分配好的內存地址寫入到接收緩沖區(qū)的描述符中,等協(xié)議棧切換完成后 釋放原協(xié)議棧的接收緩沖區(qū)的內存;步驟(b3 )先判斷當前連接的建立方式 是否滿足新協(xié)議棧進行通信的要求,滿足則保持當前連接建立的方式;不滿 足則按照需求重新建立連接。進一步地,在步驟(bl)前還包括步驟預先為中斷處理函凄史定義中斷 函數(shù)指針;在步驟(b2)前還包括步驟預先分配接收緩沖區(qū)的內存。進一步地,中斷處理的方式包括中斷延時處理或中斷絕對定時處理。進一步地,網(wǎng)卡驅動在接收包后上傳給協(xié)議棧時采用零拷貝才幾制。進一步地,連接的建立方式包括自動協(xié)商連接的建立或強制連接的建立。與現(xiàn)有技術相比,由于本發(fā)明在雙協(xié)議棧的切換過程中,釆用了僅僅切 換兩種協(xié)議棧不同之處的方式,保留了兩種協(xié)議棧的共同的地方,因此大大 縮減了兩種協(xié)議棧切換的時間,從而保證了在協(xié)議棧切換過程中不會出現(xiàn)丟 包及連接中斷等現(xiàn)象。
圖1為現(xiàn)有的網(wǎng)卡實現(xiàn)雙協(xié)議棧切換方法的流程圖;圖2為采用本發(fā)明千兆網(wǎng)卡實現(xiàn)雙協(xié)議棧切換方法一實施例的流程圖。
具體實施方式
本發(fā)明提供了 一種網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方法,其關鍵點就是把雙協(xié)
議棧切換和網(wǎng)卡驅動的相關點抽象成切換重點,主要包括(1)中斷處理 機制,即通過改變中斷函數(shù)指針來掛接新協(xié)議棧的中斷處理函數(shù);(2)內 存分配和釋放機制,即接收緩沖區(qū)內存的更換,包括切換前協(xié)議棧接收緩沖 區(qū)內存的釋放,以及切換后協(xié)議棧內存分配的申請,并且將其地址寫入到接 收緩沖區(qū)的描述符中;(3)連接的建立方式,即在切換時判斷當前連接的 建立方式是否滿足切換后的協(xié)議棧的通信,滿足則保持當前連接的建立方 式;不滿足才按需求重新建立連接。這樣,每次協(xié)議棧切換時不需要重復整 個驅動重新加載到協(xié)議棧的過程,而只是將切換重點中的不同點切換過來, 從而大大縮減了切換的時間。并且,在切換的過程中,能夠順利地將收到的 每個包上送給協(xié)議棧處理,從而避免出現(xiàn)數(shù)據(jù)丟包現(xiàn)象。下面結合具體實施例和附圖對本發(fā)明上述技術方案作進一步詳細的說明。本發(fā)明的網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方法,通過將雙協(xié)議棧和網(wǎng)卡驅動相 關點抽象成切換重點,而在協(xié)議棧切換時,僅針對協(xié)議棧就這些重點的不同 點進行切換,達到加速切換的目的。(1)中斷處理機制及中斷處理函數(shù)切換的實現(xiàn)由于接收的包要上傳給不同的協(xié)議棧,不同的協(xié)議處理包的接口肯定不 一樣,所以中斷后處理函數(shù)肯定不一樣。協(xié)議棧切換首要解決的問題就是切 換中斷處理函數(shù)。在網(wǎng)卡芯片控制器內部寄存器中,對中斷產(chǎn)生的條件有多種設置方式,時器的含義是指在網(wǎng)卡芯片通過DMA接收到一個包后,不會立即產(chǎn)生一個 中斷,而是延遲一個預先定義好的時間后,如果還沒有下一個包到來,則產(chǎn) 生中斷,如果在定義的時間之內又接收了一個包,則又延遲產(chǎn)生中斷。中斷 絕對定時器的含義就是在接收到第一個包后,即使一直連續(xù)不斷的接收到 包,但定義的絕對定時器時間到達后,立即產(chǎn)生一個中斷。通過兩種中斷條 件的組合,避免了每收到一個包就產(chǎn)生一個中斷而導致效率不高的問題,以 及接收到了包但不能夠及時上送給協(xié)議棧處理的問題。但是,不同的協(xié)議??赡軐W(wǎng)卡驅動收到的包處理的流程不一樣,需要 將包上送給不同的協(xié)議棧。這里所謂切換(或掛接)中斷處理函數(shù),可以預 先為中斷處理函數(shù)定義一個函數(shù)指針,在切換協(xié)議棧時,將這個中斷函數(shù)指 針指向新的協(xié)議棧的中斷處理函數(shù),這樣切換中斷處理函數(shù)的耗時將會很 短。(2 )內存分配和釋放機制及接收緩沖區(qū)內存切換的實現(xiàn)的協(xié)議棧在接收包使用不同的內存分配機制,比如vxworks操作自己的網(wǎng)絡 協(xié)議棧就^使用了 mBlk結構池、clBlk結構池和簇緩沖區(qū)池結構來組織包的4妄 收和上傳,而在另外一些協(xié)議棧中,在接收時它可能用的是自己的內存分配 和釋放方式,從而使得在切換協(xié)議棧時,對接收緩沖區(qū)中內存的釋放等也要 重新切換。這里,所謂零拷貝(Zero-Copy)機制其基本思想是數(shù)據(jù)包從網(wǎng)絡設 備到用戶程序空間傳遞的過程中,盡量避免數(shù)據(jù)拷貝。亦即在從接收緩沖區(qū) 傳送到協(xié)議棧的過程中,傳輸?shù)氖菙?shù)據(jù)包的內存地址,而不是數(shù)據(jù)包的內容。千兆網(wǎng)卡是通過DMA傳輸機制將數(shù)據(jù)從網(wǎng)卡芯片的FIFO接收數(shù)據(jù)區(qū) 傳輸?shù)絻却娴模缓笤贑PU的控制下,將內存中的數(shù)據(jù)上傳給協(xié)議棧處理。 所以在內存中要預先定義一個接收緩沖區(qū)供網(wǎng)卡DMA讀取,由于在上送給 協(xié)議棧時,采用了零拷貝機制,而不同的協(xié)議棧可能對緩沖區(qū)內存分配的方 式不一樣,因此在切換協(xié)議棧時要切換接收緩沖的內存區(qū)。為了加速接收緩沖區(qū)內存的切換,可以采取一種預先分配接收緩沖區(qū)內 存機制和延遲釋放原協(xié)議棧內存的機制,切換時先保存原協(xié)議棧的接收緩沖 區(qū)的內存區(qū)地址,然后直接將預先分配好的內存區(qū)地址寫入到接收緩沖區(qū)描 述符中,等整個協(xié)議棧切換完成后再釋放原協(xié)議棧內存,這樣大大減少了接 收緩沖區(qū)內存切換的時間。(3)連接的建立方式及切換連接方式的實現(xiàn)各種協(xié)議棧建立連接的方式可能會不一樣,有的協(xié)議棧可能要求是自 動協(xié)商連接,有的可能要求是強制連接,還有的可能是要求從EEPROM讀 取數(shù)據(jù)建立連接等等。所以,應根據(jù)協(xié)議棧的需要,如果需要改變建立連接
的方式,則連接的建立方式也需要切換。Intel82546千兆網(wǎng)卡芯片有兩種建立連接的方式, 一種是自動協(xié)商連接, 主要是通過芯片自動檢測對等方的連接速度,通信模式和流控方式從而確定 己方連接速度是10M、 100M還是1000M,通信方式是半雙工還是全雙工, 以及流控的方式等。另外一種是強制連接方式,就是說己方將連接速度和通 信方式根據(jù)自己的需要強制設置成規(guī)定范圍內的參數(shù),從而根據(jù)這些參數(shù)建 立連接。還有一種方式就是將建立連接的方式(譬如自動協(xié)商連接或強制連 接)參數(shù)寫入到EEPROM中去,通過讀EEPROM的凄t據(jù)來確定建立哪種方 式的連接。建立連接由于涉及到對網(wǎng)卡芯片的才喿作,耗時比較長,所以在協(xié) 議棧切換時首先要判斷當前的連接方式是否滿足切換后的協(xié)議棧進行通信 的要求,如果滿足,就不需要切換連接方式;否則,才按照需求重新建立連 接。這里的優(yōu)化主要是將系統(tǒng)啟動后默認建立自動協(xié)商機制的連接,然后在 切換協(xié)議棧時,根據(jù)判斷自動協(xié)商機制是否滿足當前需要切換的協(xié)議棧,來 確定是否切換連接的建立方式,這樣切換協(xié)議棧時基本上就不需要重新建立 連接,從而避免了最大耗時的工作,保證了切換時間銳減,從而避免丟包的 現(xiàn)象??傮w說來,在協(xié)議棧切換時需要切換的重點就在上迷三個方面。其中 (1)和(2)的切換主要是針對內存的一些操作,與芯片硬件的4喿作關系不 大,消耗的時間非常少,時間的消耗主要花費在(3)上,即連^l妄建立方式 的切換。而對于大多數(shù)協(xié)議棧切換并不需要改變連接的建立方式。因此,如 果能夠在協(xié)議棧切換時,根據(jù)判斷當前的連接方式滿足切換后的協(xié)議棧的通 信與否,確定是否需要重新建立連接。這樣,切換協(xié)議棧時基本上就可以盡 可能地避免重新建立連接,由此規(guī)避了最大耗時的工作,從而大大縮減了兩 種協(xié)議棧切換的時間。圖2表示了本實施例千兆網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方法的流程圖,該流 程以千兆網(wǎng)卡實現(xiàn)雙協(xié)議棧切換為例,其并非用于說明本發(fā)明僅限于此,而 只是以此為例來表述清楚本發(fā)明的技術方案。該流程包括以下步-驟201:關中斷;202:更換接收緩沖區(qū)內存,主要包括切換前協(xié)議棧接收緩沖區(qū)內存的
釋放和切換后協(xié)議棧內存分配的申請,并且將其地址寫入到接收緩沖區(qū)的描述符中;203:掛接新協(xié)議棧的中斷處理函數(shù),主要通過將中斷函數(shù)指針指向該 中斷處理函數(shù)實施;204:開中斷;205:判斷當前建立連接的方式是否滿足新協(xié)議棧的要求,即是否需要 改變建立連接的方式?若是,則執(zhí)行步驟206;若否則結束切換流程;206:根據(jù)新協(xié)議棧的需求建立新的連接方式,結束流程。綜上所述,采用本發(fā)明方法,應用于網(wǎng)卡驅動支持雙協(xié)議棧的快速切換, 通過將兩種協(xié)議棧切換與網(wǎng)卡驅動的相關點抽象成切換重點,使得在雙協(xié)議 棧切換時僅僅需要切換該切換重點中不同的地方,而不需要整個驅動重新加 載一遍,從而達到了減少雙協(xié)議切換時間的目的,使得根據(jù)不同的需要將不 同的包送往不同的協(xié)議棧進行處理成為了現(xiàn)實。當然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質的變形,但這些相應的改變和變形都應屬于本發(fā)明所附的權利要求的保護范圍。譬如,本發(fā)明同樣適用于其它網(wǎng)卡產(chǎn)品的驅動,以及本發(fā)明還適用于多 種協(xié)議棧之間的切換。
權利要求
1、一種網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方法,應用于所述網(wǎng)卡的驅動,所述方法包括如下步驟(a)將所述雙協(xié)議棧切換與所述網(wǎng)卡驅動的相關點抽象成切換重點;(b)進行所述雙協(xié)議棧切換時,僅針對所述雙協(xié)議棧將所述切換重點中的不同點切換過來。
2、 按照權利要求1所述的方法,其特征在于,步驟(a)所述切換重點 包括中斷處理機制、內存分配和釋放機制以及連接的建立方式;步驟(b) 所述切換重點的不同點切換包括(bl)掛接新協(xié)議棧的中斷處理函數(shù),以將接收到的包上送給所述新協(xié) 議棧處理;(b2)更換接收緩沖區(qū)內存,包括將原協(xié)議棧的接收緩沖區(qū)內存釋放, 以及為所述新協(xié)議棧申請分配內存,并且將所述新協(xié)議棧內存地址寫入到接 收緩沖區(qū)的描述符中;(b3 )根據(jù)所述新協(xié)議棧的需要進行所述連接的建立方式的切換。
3、 按照權利要求2所述的方法,其特征在于,步驟(bl)所述掛接通 過將中斷函數(shù)指針指向所述新協(xié)議棧的中斷處理函數(shù)完成;步驟(b2)先保 存所述原協(xié)議棧的接收緩沖區(qū)的內存地址,然后將預先分配好的內存地址寫 入到所述接收緩沖區(qū)的描述符中,等所述協(xié)議棧切換完成后釋;^文所述原協(xié)議 棧的所述接收緩沖區(qū)的內存;步驟(b3)先判斷當前連接的建立方式是否滿 足所述新協(xié)議棧進行通信的要求,滿足則保持所述當前連接建立的方式;不 滿足則按照需求重新建立連接。
4、 按照權利要求3所述的方法,其特征在于,在步驟(bl)前還包括 步驟預先為所述中斷處理函數(shù)定義所述中斷函數(shù)指針;在步驟(b2)前還 包括步驟預先分配接收緩沖區(qū)的所述內存。
5、 按照權利要求2所述的方法,其特征在于,所述中斷處理的方式包 括中斷延時處理或中斷絕對定時處理。
6、 按照權利要求2所述的方法,其特征在于,所述網(wǎng)卡驅動在接收包 后上傳給所述協(xié)議棧時采用零拷貝機制。
7、 按照權利要求2所述的方法,其特征在于,所述連接的建立方式包 括自動協(xié)商連接的建立或強制連接的建立。
全文摘要
一種網(wǎng)卡實現(xiàn)雙協(xié)議棧切換的方法,其關鍵是把協(xié)議棧切換和網(wǎng)卡驅動的相關點抽象成切換重點,包括1)中斷處理機制,即通過改變中斷函數(shù)指針來掛接新協(xié)議棧的中斷處理函數(shù);2)內存分配和釋放機制,即更換接收緩沖區(qū)內存,包括切換前協(xié)議棧接收緩沖區(qū)內存的釋放,以及切換后協(xié)議棧內存分配的申請,并且將其地址寫入到接收緩沖區(qū)的描述符中;3)連接的建立方式,即在切換時判斷當前連接的建立方式是否滿足切換后的協(xié)議棧的通信,滿足則保持當前連接的建立方式;不滿足才按需求重新建立連接。這樣,每次協(xié)議棧切換只是將切換重點中的不同點切換過來,從而加速了切換。
文檔編號H04L12/02GK101150412SQ20071015146
公開日2008年3月26日 申請日期2007年10月18日 優(yōu)先權日2007年10月18日
發(fā)明者勤 任, 磊 楊, 田云操 申請人:中興通訊股份有限公司