專利名稱:網(wǎng)絡處理器體系的路由和轉寄表管理的制作方法
背景技術:
1.發(fā)明的領域本發(fā)明涉及在通訊設備中完全地使用了網(wǎng)絡處理器的軟件體系及其相關組件。特別的是,本發(fā)明設計了一種方法和設備,用于在一個多元件計算機系統(tǒng)上轉寄信息封包,該計算機系統(tǒng)使用了一個轉寄表管理程序,它在計算機系統(tǒng)的主計算機元件和從計算機元件上運行。
2.背景因特網(wǎng)底層架構包含多種組件,它主要包括,路由器,網(wǎng)關,和主機。用戶在因特網(wǎng)上的通訊發(fā)生在從主機到主機之間。因此,主機上包含了大部分的因特網(wǎng)通訊(即,在一個用戶主計算機到另一個主計算機之間發(fā)生的一次電話會議,文件傳輸,電子郵件,或網(wǎng)頁瀏覽)的起始點和終止點。網(wǎng)關不過是將兩個不同的因特網(wǎng)網(wǎng)絡連接起來。路由器識別每一個在因特網(wǎng)上所發(fā)送的信息封包的來源地和目的地,從而決定將該信息封包發(fā)送到何處,使之能夠最有效率地抵達它的目的地。
圖1顯示了一個基本網(wǎng)絡的示例,它有三個主機,兩個路由器,和一個網(wǎng)關。注意,如果主機A希望同主機B聯(lián)絡,在網(wǎng)絡上可以通過兩條不同的路徑實現(xiàn)——通過路徑1或者路徑2。僅有一條路徑用于連接主機A到主機C,即通過路徑1。在路由器通訊的技術細節(jié)上使用了“路由協(xié)議”來生成“路由數(shù)據(jù)庫”。該路由數(shù)據(jù)庫存儲了所有已知的主機和網(wǎng)絡地址,以及路由規(guī)則,它們被用于從路由器的正確端口發(fā)送信息封包,使之抵達目標地址。
因特網(wǎng)底層架構的每一個組件通過一個因特網(wǎng)協(xié)議(IP)地址來識別,該IP地址通常形如“a.b.c.d”,其中a-d都是在0-255之間的整數(shù)。當然,在一個地址中“數(shù)字”的值可以不同。此外,地址以一種分級方式排列。左首的數(shù)字“a”代表一個大的因特網(wǎng)底層架構區(qū)段的地址,如一個可能包括大量路由器和主機的完整網(wǎng)絡或者該網(wǎng)絡的一個系統(tǒng)。這個網(wǎng)絡中每一個組件的地址都將會共享同一個初始的左首數(shù)值。在IP地址中左首數(shù)字往右的每一個數(shù)字將確定越來越小的網(wǎng)絡區(qū)段,或者系統(tǒng),直至右首的數(shù)字,它將會確定單一的一臺主機。IP地址的工作方式同傳統(tǒng)的郵局地址相似,其中郵局地址的一部分確定一個國家,接下來確定該國家中的一個州,然后是確定一個城市,再然后是確定街道中的住宅。路由協(xié)議和路由數(shù)據(jù)庫利用IP地址的類似分級結構,來為從來源地到目的地的因特網(wǎng)通訊提供路由和指引。然而,在實際中,IP地址的“a.b.c.d”格式并不是這樣構造的。例如,IP地址的每一個單獨數(shù)字可能包含不止一個因特網(wǎng)底層架構區(qū)段的地址信息。因此,就要路由器的軟件和硬件體系來幫助構成因特網(wǎng)通訊的數(shù)據(jù)封包進行路由和傳輸。
一個路由器或網(wǎng)關的傳統(tǒng)硬件體系包括一個通用微處理器(即,PowerPC,Pentium,MIPS)以及一個專用集成電路(ASIC),它一般按圖2所示的方式進行配置。通過每一個路由器的數(shù)據(jù)封包數(shù)量遠遠超過了該通用微處理器的處理能力,它需要查看這些信息封包,確定目的地,指出它要從哪個端口發(fā)出,并將信息封包沿它的路徑發(fā)送出去。因此,ASIC針對大多數(shù)因特網(wǎng)數(shù)據(jù)封包實現(xiàn)了該功能。這種通信叫做“數(shù)據(jù)平面”通信或數(shù)據(jù)平面封包,即,不是路由器本身為最終目的地,而僅是在去往它們最終目的地的路上經(jīng)過該路由器的通信/封包。ASIC將“路由和轉寄”算法編制于硅芯片中,從而提供了非常高速的封包處理能力。
這種方法的一個缺點是,一旦這些算法被改進,新的ASIC設計必須將新的算法集成在硅芯片中。這需要制造新的硬件,并在之后更換先前的通訊設備。實質(zhì)上,在新的設計出現(xiàn)之后,這些設備就要被拋棄。這種硬性的成本昂貴的循環(huán)很快被網(wǎng)絡特殊處理器技術所代替。網(wǎng)絡處理器包含一個通用CPU和多個叫做“微處理機”的計算處理機來代替ASIC。為了替代寫入硅芯片中的硬件代碼封包處理算法,可以用叫做“微代碼”的軟件對微處理機進行程序編制。一旦新的算法被開發(fā)出來,新的微代碼能夠很簡單的被下載到現(xiàn)存的微處理器硬件中,避免了任何硬件產(chǎn)品開支并大大增進了產(chǎn)品設備壽命。
隨著新的網(wǎng)絡處理器模型的出現(xiàn),出現(xiàn)了關于將軟件體系和傳統(tǒng)的硬件體系結構應用于新的硬件模型的新的問題和挑戰(zhàn)。圖3顯示了與上面所述的傳統(tǒng)硬件體系共同使用的傳統(tǒng)軟件體系。一般來說,軟件體系需要處理三種類型的信息,每一種在圖3中被標記用于一個特定的通訊平面。一種信息是通過數(shù)據(jù)平面的信息,它包括只是經(jīng)過該處理器的數(shù)據(jù)封包(如圖3流程2所示)。處理器使用它的路由信息來決定將該數(shù)據(jù)封包發(fā)送到何處,使之能夠更有效率的抵達它的最終目的地。
然而,其它信息,與數(shù)據(jù)平面上的數(shù)據(jù)封包一同進入處理器。一個這種類型的信息同控制平面相關聯(lián)(如圖3中流程1a-c所示)??刂破矫嫘畔ㄒ龑酚蓴?shù)據(jù)庫,或表,更新的信息,或者路由協(xié)議特定功能所必需的信息。管理平面信息包括與配置,診斷,或處理器及其功能相關的信息。流程1a-c顯示了通過傳統(tǒng)軟件體系的控制平面信息的路由尋徑。這些通訊導致對路由表的修改,并且包括對其他處理器所發(fā)出的路由信息請求做出響應。如前面所述,流程2顯示了數(shù)據(jù)平面通訊,該流程進入軟件體系并上行到TCP/UDP/IP(因特網(wǎng)協(xié)議)模塊,并在之后下行返回傳輸?shù)剿哪康牡亍0凑諔T例,圖3中所示的所有軟件,以及信息流的處理,都需要使用通用處理器。
當網(wǎng)絡處理器提供微處理機來更有效率的處理不同的網(wǎng)絡通訊時,傳統(tǒng)的軟件體系依舊需要核心處理器來處理所有進程。因此,將傳統(tǒng)軟件體系應用于網(wǎng)絡處理器無法獲得好的性能,因為傳統(tǒng)軟件體系不能夠正確的使用微處理機。因此,就需要有一種軟件體系,能夠使網(wǎng)絡處理器的效率最大化。
發(fā)明概要本發(fā)明的一個目的是,提供一種方法和設備,用于在一個計算機系統(tǒng)上轉寄信息封包,該系統(tǒng)擁有一個至少有一臺微處理機的網(wǎng)絡處理器。
本領域技術人員在參考下面的說明書,附圖和權利要求之后,將會發(fā)現(xiàn),本發(fā)明的該目的及其它目的是顯而易見的。
本發(fā)明致力于攻克迄今為止所遇到的種種難題。最后,一個多元件計算機系統(tǒng)擁有一個主計算機元件和一個從計算機元件,它們在運行中互相進行通訊。一個表包括一批隨其建立的地址表項,其中這些表項是遵循一個對地址進行操作的LC-Trie壓縮算法而分等級組建的。一個信息封包在計算機系統(tǒng)中被接收到,其中該信息封包擁有一個與其相關的目標地址。用一種LC-Trie檢索算法來檢索表,在表中尋找一個表項與信息封包的目標地址相匹配。信息封包被傳輸?shù)揭粋€與匹配的表項地址相關聯(lián)的轉寄地址中去。
附圖的簡要說明圖1是一個先前技術中的主機/路由器網(wǎng)絡框2是一個先前技術中的因特網(wǎng)基礎構架框3是一個先前技術中的軟件體系框4是一個網(wǎng)絡處理器系統(tǒng)的框5是一個有轉寄表管理器的網(wǎng)絡處理器體系框6a是一幅二叉樹6b是圖6a的二叉樹經(jīng)過路徑壓縮后的二叉樹圖。
圖6c是圖6a的二叉樹經(jīng)過LC-Trie壓縮后的二叉樹圖。
發(fā)明的詳細說明在附圖中,圖4顯示了由英特爾公司制造的一個網(wǎng)絡處理器(IXP1200)的體系結構,在本發(fā)明中將使用這種類型的網(wǎng)絡處理器。本領域技術人員將能夠理解,本發(fā)明也適用其他相似和相關的處理器,特別是網(wǎng)絡處理器。IXP1200網(wǎng)絡處理器包括一批微處理機(或子系統(tǒng)),它們被連接在IX總線接口上。微處理機可由微代碼動態(tài)編制程序。微處理機擁有無需StrongARM核心處理器的幫助,自動執(zhí)行指令,經(jīng)由總線接口訪問系統(tǒng)組件的能力。要利用微處理機來進行網(wǎng)絡處理,這就要求改進軟件體系來支持微處理機。
因此,本發(fā)明將軟件組件添加在圖3所示的傳統(tǒng)軟件環(huán)境中,并給在微處理機上運行的微代碼定義了一個表接口,使微處理機能夠唯一地處理數(shù)據(jù)平面通訊,從而實現(xiàn)了對傳統(tǒng)網(wǎng)絡處理進程的重要性能的改進。特別的是,圖5顯示了一個本發(fā)明的軟件框圖,該軟件收集合適的信息,激活微代碼處理機,它利用放置在一個微代碼路由表中的信息來做出路由和轉寄決定。
圖5中所示的流程1a-c代表控制和管理通訊的路由。流程1a表示了封包進入系統(tǒng)時的路由流程。流程1b表示了用路由協(xié)議更新路由表的流程,作為新的路由并被加入到路由表中。流程1c表示了在需要時被發(fā)送給其他通訊設備的路由響應流程。流程2a同樣顯示了網(wǎng)絡處理器處理數(shù)據(jù)平面通信(所有的通信經(jīng)過該系統(tǒng),而并不以該系統(tǒng)本身為目的地)的流程。當網(wǎng)絡處理器軟件體系使用了微處理機上運行的微代碼系統(tǒng)來處理數(shù)據(jù)平面通信,為了做出正確的路由決定,微代碼必須已經(jīng)訪問了路由信息和端口信息以及任何在控制和管理層上的傳送服務所需要的,并通常已經(jīng)由傳統(tǒng)的軟件體系進行了處理的,特定的標記或性質(zhì)。微代碼系統(tǒng)使用了一個微代碼路由表來實現(xiàn)正確的信息平面通信的路由。一個轉寄表管理器負責識別來自于標準路由表的路由信息,來自于TCP/UCP/IP堆棧的信息,以及任何用來生成微代碼路由表的特定標記要求。
轉寄表管理器對一個微代碼路由表的實現(xiàn),部分是基于LC-Tries壓縮的等級化數(shù)據(jù)結構的原理,以及基于Stefan Nilsson和Gunner Karlsson所做的工作,在題為《使用LC-Tries的IP地址搜索》的論文中對其公開,日期為1998年7月2日,在此通過參考合并。下面給出了一個LC-Tries壓縮的理論性示例,虛擬IP地址查閱表如下表1
表1與圖6a中所示的樹形圖相關聯(lián)。為了用于圖解說明,虛擬地址表示從二叉樹的根節(jié)點到任意單獨終端葉節(jié)點的路徑,其中“0”代表在任意特定節(jié)點左轉,而“1”代表右轉。舉個例子,第6表項包括一個虛擬地址100。這表示初始時從根節(jié)點向右轉,而之后在接下來兩個節(jié)點向左轉。這代表了從根節(jié)點到終端葉節(jié)點的路徑,它對應于圖6a中所顯示的二叉樹的第6表項。另外在表1中的表項以二進制數(shù)排序,使得在做出任何右轉之前要先做出同樣多的左轉。換句話說,從表頂部到底部的表項經(jīng)過了整理,以左轉為優(yōu)先,在每一種情況下“0”優(yōu)先于“1”出現(xiàn)。
樹型結構壓縮的第一個步驟包括路徑壓縮,籍此移除盡可能多的內(nèi)部節(jié)點(例如,不包含一個終端葉節(jié)點的節(jié)點)。這種壓縮的結果如圖6b所示,2,13和14號表項分別依照跳躍值(Skip)2和4被壓縮。注意在路徑的壓縮期間,并不是所有的內(nèi)部節(jié)點都被移除。在路徑壓縮期間,有些葉節(jié)點不是源于同一父節(jié)點,擁有至少兩個這樣的最終分支葉節(jié)點的內(nèi)部節(jié)點不能夠被移除。這種方法有效的移除了在任意到達一個特定的葉節(jié)點(或者是它最近的兄弟節(jié)點)的單一路徑中必須經(jīng)過的,并且是唯一經(jīng)過的派生節(jié)點。這種方法有效的壓縮了樹結構的稀疏區(qū)域。
壓縮的第二步驟,叫做層次壓縮,它有效的壓縮了樹型結構的密集區(qū)域。這種方法是將當且僅當一個給定節(jié)點的所有兄弟節(jié)點都是內(nèi)部節(jié)點的時候,將該節(jié)點的所有兄弟節(jié)點全部移除。層的移除在一個分支因數(shù)(Branch)中反映,它可以被表示為2的乘方(2Branch),因為一個節(jié)點通常有兩個分支。因此,Branch代表了被移除的層數(shù),而2Branch表示一個被移除節(jié)點的子節(jié)點數(shù)目。被壓縮的二叉樹的層和路徑在圖6c中顯示,而表2中的數(shù)據(jù)則說明了如何處理該二叉樹。
表2
<p>表1
本發(fā)明的首選實現(xiàn)方法使用了Microware Systems公司的OS-9操作系統(tǒng),Berkeley Standard Distribution(BSD)4.4版TCP/UDP/IP堆棧,RIP和OSPF路由協(xié)議,以及英特爾IXP1200網(wǎng)絡處理器的Microware微代碼解決方案庫。這些組件被用于本發(fā)明的開發(fā)和實現(xiàn),本領域技術人員將能夠理解,本發(fā)明能適用任意的操作系統(tǒng)(實時的或非實時的),任意協(xié)議堆棧,任意路由或?qū)ぶ穮f(xié)議,以及任意在網(wǎng)絡處理器微處理機上運行的軟件。
轉寄表管理器(FTM)的優(yōu)選實施例由一個FTM程序組成,它在Microware Systems公司的OS-9實時操作系統(tǒng),或者Linux上運行。如圖5中所示,F(xiàn)TM程序與不同的網(wǎng)絡處理器軟件組件進行接口,來提取完成數(shù)據(jù)通訊所需要的所有信息。這一信息被存儲在一個叫做轉寄表的微代碼IP路由表中,該表是基于上面所揭示的LC-Trie壓縮算法的一個特定的具體實現(xiàn)而建立的。為了數(shù)據(jù)封包尋徑的目的,用于查詢轉寄表的FTM程序能夠由一個低級別驅(qū)動程序通過命令行選項來執(zhí)行。該低級別驅(qū)動程序能夠與FTM程序在同樣的處理器段運行,或者在IXP1200網(wǎng)絡處理器的一個完全分離的微代碼子系統(tǒng)上運行。事實上,F(xiàn)TM程序本身可以在一個與網(wǎng)絡處理器不同的處理器上運行,或者它也可以在網(wǎng)絡處理器上運行。本發(fā)明的方法可以被用在一個有多個計算機元件的計算機系統(tǒng)上,其中該方法是在一個主計算機元件和一個從計算機元件之間實現(xiàn)。使用網(wǎng)絡處理器作為一個示例,核心處理器將包括主計算機元件,而微處理機將組成從計算機元件。然而,本發(fā)明沒有這樣進行限制。多個計算機元件可以在同一個微處理器上,在不同的微處理器上,或者在計算機系統(tǒng)中的不同計算機設備上。
無論如何,通過使用FTM程序,低級別驅(qū)動程序能夠在沒有整個網(wǎng)絡軟件體系的幫助下,實現(xiàn)數(shù)據(jù)空間的路由尋徑,并且這種方法充分減少了與數(shù)據(jù)空間通訊管理相關的管理費用。
緊接著是FTM程序的初始化,它包含圖5中所示的轉寄表管理器的主要特征,查詢系統(tǒng)以確定現(xiàn)存的所有IP地址,路由信息,以及層2的機器地址-例如,以太網(wǎng)的介質(zhì)訪問控制(MAC)地址。然后應用程序分配內(nèi)存給兩個表,并按照本發(fā)明的方法用當前信息填充這些表。表被存儲在任意可由微處理機訪問的內(nèi)存區(qū)域。應用程序還為系統(tǒng)的不同組件注冊了所有類型的通知,從而確保表保持穩(wěn)定,并由系統(tǒng)的網(wǎng)絡堆棧維持其更新。
由應用程序分配的兩個表共同包含圖5中的微代碼路由表。該表包含一個搜索樹,其內(nèi)部使用了上面所述的LC-Trie路徑和層次壓縮算法,以及下一跳躍表。在本發(fā)明的首選實施例中,這兩個表包含一個確定的表項數(shù),并且在初始化分配之后不能夠被動態(tài)調(diào)整大小。FTM程序包含命令行選項,來改變這些表在初始化時使用的默認大小選項。
一般說來,在收到一個IP封包的情況下,F(xiàn)TM程序的作用是讀取封包目的地IP地址,并在之后搜索表,以便分配下一個跳躍的目的地地址。這可能是該封包的最終目的地,或者只是另一個路由器的地址,該路由器能夠在稍后將該封包轉寄往它的最終目的地。FTM程序進行的搜索將會導致三種可能的結果,這取決于與被搜索地址相關的表的狀態(tài)(1)沒有找到通向終點的路徑;(2)找到路徑,但是層2的信息無效;(3)找到路徑,并且層2的信息有效。
在第一種情況中,應用程序僅能停止處理該封包,或者將該封包傳送回網(wǎng)絡堆棧進行處理。后一種情況是優(yōu)先的,在這種情形中,系統(tǒng)能夠發(fā)布一個報錯消息,返回給源主機,說明沒有為封包找到路徑。在第二種情況中,這種情形出現(xiàn)得最頻繁,即在下一個跳躍地址指向一個沒有MAC信息的本地以太網(wǎng)上的一個路由器,或由一個異步傳送模式(ATM)網(wǎng)絡連接實現(xiàn)來該路由器連接且沒有建立回路。在這種情況下,F(xiàn)TM程序會把封包傳回系統(tǒng)的網(wǎng)絡堆棧,來解決層2的信息問題。例如,在以太網(wǎng)上,系統(tǒng)將會廣播一個地址解析協(xié)議(ARP)請求。如果系統(tǒng)能夠使層2的信息有效,系統(tǒng)通知FTM程序更新表,用于轉寄以后的封包。第三種情況是最期望的最終結果。在這種情況中,F(xiàn)TM程序在轉寄表中查找所有必需的信息,以便立即通過正確的端口將封包發(fā)送到正確的目的地。
詳細說來,F(xiàn)TM程序包括幾個命令行選項,用以在程序中調(diào)用控制其操作。用于呼叫FTM程序的協(xié)議包括一個呼叫命令FTM[<選項>],其中的選項包括
-t[大小,LC-Trie的大小(缺省值=100,00表項)]-n[大小,下一跳躍表的大小(缺省值=50,000表項)]-f[數(shù)字,填充因數(shù)(缺省值=0.50)]-r[數(shù)字,根節(jié)點分支因數(shù)(缺省值=16)]-c[激活高速緩存(對IXP1200,缺省狀態(tài)為打開)]-d[增加/降低調(diào)試級別(5級)]-i[在IXP1200上運行(只能在運行Linux時設定)]-p[秒,ARP表查詢時間間隔(缺省值=30)]將LC-Trie搜索表缺省設置為100,000表項。這個參數(shù)沒有最大值;唯一的限制是可用內(nèi)存的數(shù)量。每一個表項占據(jù)4字節(jié),因此整體缺省內(nèi)存使用量是400,000字節(jié)。大致估計搜索表所需要的空間是IP路徑最大值的2至2倍,再加上根節(jié)點分支因數(shù)所占據(jù)的任何附加空間(下面會詳細解釋)。同樣,如這里下面所解釋的,在表中的填充因數(shù)和路徑的組織會對搜索表所需的內(nèi)存數(shù)量產(chǎn)生巨大的影響。
將下一跳躍表占據(jù)量缺省設置為50,000表項。與搜索表一樣,下一跳躍表的實際大小也僅僅由可用內(nèi)存量限制。每一個表項占據(jù)16字節(jié),總體缺省占用800,000字節(jié)的內(nèi)存。路徑的總數(shù)加上這些路徑所涉及的唯一路由器數(shù)量,大致等于下一跳躍表所需的大小。例如,如果路由表包含5條到達路由器A的路徑,以及3條到達路由器B的路徑,那么在下一跳躍表中的總表項數(shù)等于10(5條路徑到A,加上3條路徑到B,加上到達A和B的路徑)。
填充因數(shù)是一個優(yōu)選的參數(shù),它使搜索的速度增加,作為代價,需要生成一個較大的LC-Trie搜索表。填充因數(shù)是一個在0和1之間的數(shù)字,它表示百分率。缺省因數(shù)是.5,或者是50%填充因數(shù)。要理解填充因數(shù)的作用,需要先回想起前面所討論的LC-Trie的理論實現(xiàn)問題,分支因數(shù)表示層次壓縮量。Branch的值等于被跳過的層數(shù),而2Branch等于在層次壓縮期間任意兩個節(jié)點之間被移除的節(jié)點數(shù)量。因為執(zhí)行中假設每個節(jié)點有兩個子節(jié)點,表示一個字節(jié)的信息,也就是說,只有當向左或者向右,所到達的預留層的子節(jié)點的數(shù)量等于2乘方時,才可能移除一個層。因此,參見圖6c,根節(jié)點包含23(8)個子節(jié)點,子節(jié)點中所有被預留的節(jié)點包含21(2)個或者22(4)個子節(jié)點。層次壓縮的值來自于在LC-Trie中從一個層到另一個層的移動記錄,它表示一個內(nèi)存訪問。在一個未壓縮的Lc-Trie中,搜索數(shù)串中的每一位代表LC-Trie的一層,并因此,代表一個內(nèi)存訪問。層次壓縮群將搜索數(shù)串的幾位合起來,并允許一個內(nèi)存訪問一次處理搜索數(shù)串中的幾位信息,從而減少需要完成搜索所必需的內(nèi)存訪問次數(shù)。因此,這證明層次壓縮對提高路由性能來說很重要。然而,每個節(jié)點正好需要2Branch個子節(jié)點的事實將會妨礙層次壓縮,并且因此妨礙對減少搜索的好處的利用??紤]到層次壓縮可能不滿足每個節(jié)點有正好2Branch個子節(jié)點的需要,填充因數(shù)允許加入人造的虛擬節(jié)點。例如,如果兩個層的壓縮可以移除具有6個子節(jié)點的節(jié)點,壓縮通常情況下不發(fā)生。填充因數(shù)允許增加兩個虛擬節(jié)點,使子節(jié)點的數(shù)量達到8,這樣就能夠進行壓縮了。賦予填充因數(shù)的值包括一個閾值級別,用于確定是否用虛擬節(jié)點填充一個層。在一個先前的示例中,一個有6個子節(jié)點的層是75%完整的(其中8個子節(jié)點組成一個完整的層)。如果填充因數(shù)等于.75或者更小,那么該層被兩個虛擬節(jié)點填充,并進行壓縮。因此,填充因數(shù)越大,壓縮的就越少。這將會導致搜索時間更長,但是能夠預留搜索表中的空間,不用生成虛擬表項。填充因數(shù)越小,搜索的越快,但是將會導致搜索表變大。需要經(jīng)過實驗來確定填充因數(shù)的最佳設置,它取決于任意特定具體實現(xiàn)方法中的準確環(huán)境。
根節(jié)點分支因數(shù)由一個應用于根節(jié)點的填充因數(shù)的特定實現(xiàn)組成。根節(jié)點分支因數(shù)使根節(jié)點分支擁有2k個子節(jié)點,其中k等于根節(jié)點分支因數(shù)。根節(jié)點分支因數(shù)的缺省值是16。
高速緩存值提供了保證,確保在高速緩存中存儲的搜索LC-Trie表和下一跳躍表的任何改變都能夠立即被轉移到適當?shù)挠谰么鎯ξ恢谩S-9操作系統(tǒng)在檢測到自己正在一個IXP1200網(wǎng)絡處理器上運行時,會自動激活高速緩存。本發(fā)明的Linux系統(tǒng)應用中需要將表放置于一個非高速緩存的內(nèi)存中,這使得高速緩存選項無效。然而,在一些具體實現(xiàn)中,在高速緩存中存儲表,或其它可以從永久內(nèi)存中直接查看表格的處理器部分中,在這些具體實現(xiàn)中,高速緩存選項可以被設定,以避免數(shù)據(jù)失效的問題。
當前FTM程序包括5個調(diào)試級別。調(diào)試選項能夠在命令行被指定1到5次,來選擇所期望的不同級別。
IXP1200選項用于Linux,OS-9自動檢測它是否在一臺IXP1200網(wǎng)絡處理器上運行。設定這個選項必須考慮到在下一跳躍表中的適當?shù)亩丝谔柵渲?。在IXP1200上的端口號有不同的分配。
ARP表查詢選項也是用于Linux系統(tǒng)。因為FTM應用軟件的Linux系統(tǒng)應用中不接收關于ARP層2信息變化的直接通知,這一選項允許FTM程序在一個設定的時間間隔內(nèi)查詢以太網(wǎng)ARP高速緩存。OS-9系統(tǒng)應用中使用了總線來探聽網(wǎng)絡堆棧的監(jiān)控,這將緩和對ARP高速緩存進行查詢的需要。
FTM程序擁有對來自于應用程序外部的某些信號做出響應,使應用程序完成某些任務的能力。一個SIGINT信號使應用程序打印當前的LC-Trie搜索表和下一跳躍表。SIGUSR1和SIGUSR2信號引起調(diào)試級別的變化,前一信號提升調(diào)試級別,而后一個信號降低級別。如果FTM程序被初始化為不激活調(diào)試,那么對級別的提升將會激活調(diào)試級別1。如果在FTM程序命令行中輸入兩個-d選項,那么對級別的提升將會激活調(diào)試級別3。如果調(diào)試級別被設定在5(最高級別),額外的提升級別的信號將不起作用。類似的,如果調(diào)試級別是0,那么降低級別的信號將會被忽略。
下面的討論描述了搜索表和下一跳躍表的設計和實現(xiàn)。特別是,這些信息涉及了FTM程序如何接收到建立表所需的信息,表的數(shù)據(jù)結構,和建立和搜索該表所用的算法。
FTM程序所使用的表存儲在內(nèi)存中,該內(nèi)存被FTM程序和數(shù)據(jù)封包的轉寄實現(xiàn)程序所共享。封包轉寄程序僅能讀取表,而不能對表做出改動。FTM程序能實現(xiàn)所有的管理功能,比如在表中增加或刪除表項。
同樣,F(xiàn)TM程序所使用的微代碼路由表包括兩個部分(1)LC-Trie搜索表;和(2)下一跳躍表。LC-Trie搜索表包含了FTM程序用于存儲和搜索IP地址的主要數(shù)據(jù)結構。LC-Trie搜索表是非常高效的數(shù)據(jù)結構,來實現(xiàn)IP地址的最長可能的前綴匹配,該IP地址被用來定位一個數(shù)據(jù)封包的轉寄地址。LC-Trie的每個節(jié)點在內(nèi)存中由一個搜索表中的4-字節(jié)表項來表示。正如前面的理論實現(xiàn)中所揭示的,在搜索表中的每一個表項包括一個分支因數(shù)(Branch),一個跳躍值(Skip),和一個數(shù)值,該數(shù)值代表一個指向LC-Trie自身的指針,或者代表到下一跳躍表中的一個轉移量(表2中的指針/表項號)。因此,每4-字節(jié)LC-Trie結構如下
同樣,分支因數(shù)表示在層次壓縮期間所移除的層的數(shù)量,而2分支因數(shù)表示被移除的子節(jié)點的數(shù)量。跳躍值表示任意的路徑壓縮。因此,F(xiàn)TM程序在一個搜索步驟中能夠處理Branch+Skip位的搜索串。LC-Trie/下一位轉移量(指針/表項號)表示在搜索表中與搜索串相匹配的下一表項的位置(如果Branch≠0),或者表示轉移到包含轉寄IP地址的下一跳躍表的表項的轉移量(如果Branch=0)。
搜索LC-Trie的目的是找到在下一跳躍表中的表項,該表項擁有和搜索樹相匹配的最長的前綴數(shù)位。引入的數(shù)據(jù)封包將會被發(fā)送至存儲在這個表項中的轉寄IP地址處,該地址將會最直接地將數(shù)據(jù)封包路由至它的最終目的地。然而,需要重點解釋的是,并不必須將整個搜索串與一個目的IP地址匹配。所需的只是與地址的網(wǎng)絡部分相匹配。例如,如果在表中有一個路由,它對應于有18位網(wǎng)絡掩碼的IP地址172.16.192.0,它將會同IP地址172.16.224.14或IP地址172.16.120.39的網(wǎng)絡部分相匹配,而不是同任一地址嚴格匹配,如下表所示。
接下來,轉到下一跳躍表,這張表包括將一個數(shù)據(jù)封包轉寄至另一個主機/路由器所需的實際信息。對LC-Trie搜索表的搜索返回一個轉移量到下一跳躍表。實際的下一跳躍表項由一個16字節(jié)表項組成,它的格式如下
IP地址出現(xiàn)在前4個子節(jié),并包括了該表項的整個第3層的地址。掩碼長度占據(jù)5位,表示與該表項相關的網(wǎng)絡掩碼的位數(shù)。換句話說,IP地址的右首部分用于識別與地址相關的網(wǎng)絡,而地址中剩下的部分識別在這個網(wǎng)絡上的特定的主計算機。掩碼長度確定了在將IP地址轉換成一個二進制等效數(shù)字之后,用于識別網(wǎng)絡的位數(shù)。標記的設定能夠使掩碼長度表項無效。如果標記位顯示該表項是一臺主計算機,那么就不使用掩碼長度,因為所有的主機表項設定掩碼長度是32位。如果需要的話,掩碼長度位的長度位數(shù)可以被增至7位,來用于處理IPv6地址。
標記區(qū)域占據(jù)5位,然而,只有數(shù)位0和1被使用,剩下的數(shù)位被預留下來。數(shù)位1是網(wǎng)絡位。如果該數(shù)位被設定(等于1),這表示該表項是一個網(wǎng)絡路由。在這種情況下,在下一跳躍表中需要多一個跳躍,以便為該表項獲取合適的層2的信息(即,以太網(wǎng)的MAC層信息),當前下一跳躍表項的端口指定區(qū)域?qū)ㄒ粋€轉移量,它轉移到存儲正確層2信息的下一跳躍表項。如果數(shù)位1沒有被設定,那么該表項是一個主機路由,而端口指定區(qū)域?qū)ㄔ摫眄椀膶?地址信息。數(shù)位0是一個有效位。如果數(shù)位被設定,那么在端口指定區(qū)域中任何層2信息都是有效的。如果數(shù)位沒有被設定,這代表層2信息有問題,它或者是丟失了,或者是過期了。如果網(wǎng)絡位被設定,那么有效位是不重要的。有效位僅與層2信息的有效性相關,而并不轉移到下一跳躍表中。
下一跳躍轉移量備份區(qū)域占據(jù)14位,并被用在搜索算法在LC_Trie之下運行太靠下的情況中。這種情況出現(xiàn),是因為LC-Trie搜索算法試圖找到與搜索串匹配的最大數(shù)位前綴,而且僅當LC-Trie搜索算法到達一個葉節(jié)點的時候,搜索才會結束。在極少的情況中,搜索算法能夠找到一個正確的匹配,僅能在理論上判別一個匹配可能是最佳匹配,但在實際用途中,它可能是一個不能接受的匹配。
在IP地址應用中,需要考慮網(wǎng)絡掩碼長度,因為它影響搜索算法。在IP地址搜索中,搜索目標不會正好與數(shù)位最大前綴相匹配,而是與一個表項的網(wǎng)絡掩碼中的位數(shù)相匹配?;谙旅姹?考慮一個示例表3
該表顯示了一個IP地址172.16.130.44的搜索串,后面是它的二進制等價數(shù)。該二進制等價數(shù)是通過將十進制IP地址的每一部分轉換成8位二進制數(shù)而獲得的。該表包括兩個表項,出于本例的目的,表項1是表項2在LC-Trie中的父節(jié)點。表項1擁有16位的網(wǎng)絡掩碼長度,而表項2有18位的掩碼長度。當然,表項1和表項2的前16位匹配搜索串。然而,最大前綴匹配將會出現(xiàn)在搜索串和表項2之間(全部二進制數(shù)字串的前17位匹配)。因此,LC-Trie搜索算法將會通過表項1,將搜索串與表項2相匹配。這產(chǎn)生了一個不期望的結果,表項2的網(wǎng)絡掩碼是18位,而表項2和搜索串只有17位匹配。因此,由搜索算法提供的匹配并沒有識別正確的網(wǎng)絡。然而,父節(jié)點表項(表項1)的網(wǎng)絡掩碼長度位數(shù)字,并不與搜索數(shù)串的前16位匹配。在這種情況中,正確的匹配是父節(jié)點表項(表項1),或是子節(jié)點表項(表項2),由搜索算法來找出。這種情況的出現(xiàn)是因為搜索算法正在設法匹配最大的前綴。要處理這種情況,一旦搜索算法到達LC-Trie的底部,并且表項和搜索數(shù)串之間相同的位數(shù)不等于至少是網(wǎng)絡掩碼長度的位數(shù),算法返回查看數(shù)結構,嘗試尋找一個符合該標準的匹配。正是因為這個原因,下一跳躍轉移量備份中存儲了當前表項的父節(jié)點的轉移量。這種情況出現(xiàn)在實際應用中的極少實例中,最突出的是缺省路徑。因為一個缺省路徑的網(wǎng)絡掩碼長度經(jīng)常比任意其他路徑都要小,所以缺省路徑將總是所有派生路徑的一個網(wǎng)絡掩碼長度前綴匹配。
端口號區(qū)域占據(jù)8位,它提供給FTM正確的信息,用來同網(wǎng)絡處理器的其余部分進行通訊。端口號的配置一般具有兩種形式,它由運行FTM程序的微處理機和網(wǎng)絡處理器其它部分之間接口的特性來決定。如果IX位被設定,那么FTM程序正在使用IX總線(見圖4),并且端口號區(qū)域的配置如下所示。
端口號包括IXP1200接口MAC號和單元號。如果該數(shù)位沒有被設定,這表示該接口不是在一個IX總線上。在這種情況中端口號的配置形式如下。
數(shù)位0-5包括接口的接口指針號,它被用于在運行FTM程序的微處理機和網(wǎng)絡處理器其它部分之間進行通訊。當然,這個區(qū)域的格式能夠并且將會不同,以適應其他的,新形成的,尋址協(xié)議和相關的信息。
端口指定區(qū)域由8字節(jié)組成,并被用于存儲下一跳躍轉移量,或是存儲層2的信息,這取決于標記的設定。如果標記位被設定,表示該表項是一個網(wǎng)絡路徑,端口指定區(qū)域包含了轉移到包含有層2信息的下一跳躍表的轉移量。在這種情況中,下一跳躍表的表項配置形式如下。
可能將層2的信息存儲在當前的表項中,然而,由于實際的目的,在下一跳躍表中,為網(wǎng)絡路徑層2的信息而創(chuàng)造一個單獨的表項已經(jīng)被證明更有效率。在實際中,下一跳躍表中的幾個表項擁有同樣的下一跳躍層2地址信息的現(xiàn)象頻繁出現(xiàn)。將該地址單獨存儲在一個單獨表項內(nèi),從而使得表項的更新更為簡單。如果地址改變,系統(tǒng)僅需要查找并改動單一表項,而不需要搜索每個表項來找出所有需要更新的表項。
如果標記沒有被設定,代表該表項是一個主機路由,并且端口指定區(qū)域?qū)ㄔ摫眄椀膶?地址信息。在這種情況中,下一跳躍表的表項配置形式如下。
在以太網(wǎng)的情況中,端口指定區(qū)域包括6-字節(jié)MAC地址。對于一個ATM網(wǎng)絡,端口指定區(qū)域包括一個經(jīng)過編譯的VCI/VPI電路號碼。無論如何,F(xiàn)TM程序都沒有曾經(jīng)對這個數(shù)據(jù)進行過處理和解譯。它總是被當作是8個單獨的字節(jié),來防止這些處理器出現(xiàn)相關的endian問題,這種問題不允許對數(shù)據(jù)進行不加限制的分割。
端口指定區(qū)域的長度和功能可以不同,如上所述,它能作為一個opaque型數(shù)據(jù)區(qū)域,能夠存儲一大批專門的封包處理參數(shù)。例如,端口指定區(qū)域也能夠包含與服務參數(shù),編碼處理參數(shù),多協(xié)議標簽交換(MPLS)標記,或虛擬局域網(wǎng)(VLAN)標記,等等類似物相關的信息。
下面的討論描述了FTM程序的結構和核心功能。FTM程序主要負責建立,搜索和維護搜索表和下一跳躍表。這包括一些功能,像添加,更新,以及基于新的路由信息和路由信息的更改而對表項進行刪除的功能,還有對層2網(wǎng)絡信息的維護。為了執(zhí)行這些功能,F(xiàn)TM程序需要通過操作系統(tǒng)同網(wǎng)絡堆棧進行通訊。由于FTM程序在不同的操作系統(tǒng)上運行,用于實現(xiàn)FTM程序的協(xié)議也因操作系統(tǒng)的變更而變更。為了使這些變更最小化,F(xiàn)TM程序在兩種截然不同的組件中實現(xiàn)。第一種,一個獨立于操作系統(tǒng)的應用程序接口(API),它實現(xiàn)一系列表操作的核心功能。第二種,一個操作系統(tǒng)特定組件,它將來自于系統(tǒng)其它部分的,實現(xiàn)核心功能所需要的信息翻譯成適合于核心功能的形式。
處理主要的搜索和下一跳躍表的核心動能由操作系統(tǒng)請求,并包括以下程序。一個FTMAddRoute函數(shù)添加一條路徑到搜索/下一跳躍表,并使用了四個參數(shù)(1)一個目的地IP地址——與一條路徑相關聯(lián)的目的地網(wǎng)絡或主機,它被轉化為指向一個常規(guī)in_addr結構的一個指針;(2)網(wǎng)關IP地址——與路徑相關的下一跳躍地址,也是一個指向in-addr結構的指針;(3)網(wǎng)絡掩碼長度,是一個整型數(shù);以及(4)端口號,有效的端口號在0-255之間。FTMAddRoute函數(shù)有可能失效,或者是因為被添加的路徑已經(jīng)存在,或者是因為搜索/下一跳躍表已經(jīng)滿了。
一個FTMDelRoute函數(shù)被用來從搜索/下一跳躍表中刪除一條路徑。該函數(shù)除了不需要的端口號之外,使用了相同的參數(shù)。只有在要被刪除的路徑不存在的時候,F(xiàn)TMDelRoute函數(shù)才有可能失效。
一個FTMAddMAC函數(shù)被用來將opaque型數(shù)據(jù)填充在端口指定區(qū)域內(nèi),這些數(shù)據(jù)一般由層2信息組成。FTM程序不解譯MAC信息,而只是簡單的存儲該信息,用于在被查詢時作為返回。該函數(shù)使用了三個參數(shù)(1)目的地IP地址——該IP地址同層2的MAC信息相關,是指向一個in_addr結構的一個指針;(2)數(shù)據(jù)指針——一個指向?qū)?信息的無符號字符指針;以及(3)大小——數(shù)據(jù)指針所指向的層2信息所用的字節(jié)數(shù),當前被限制為8字節(jié)。如果存儲層2信息所需要的超過8字節(jié),數(shù)據(jù)指針將會指向一個有足夠空間存儲該數(shù)據(jù)的表格的索引。當下一跳躍表已滿,或者被傳到函數(shù)中的層2信息超過8字節(jié)時,F(xiàn)TMAddMAC函數(shù)失效。
一個FTMDelMAC函數(shù)被用于刪除層2信息。該函數(shù)所需的唯一參數(shù)是與層2信息相關的目的地IP地址。該函數(shù)實際上并沒有刪除層2信息,只是將該表項屏蔽為無效。如果在下一跳躍表中沒有發(fā)現(xiàn)目的地IP地址,或者如果該表項已經(jīng)無效了,該函數(shù)失效。
一個FTMQuery函數(shù)被用于實現(xiàn)對搜索/下一跳躍表的搜索。該函數(shù)有一個參數(shù),它以IP地址的形式轉換進入該函數(shù),作為一個指針指向一個in_addr結構。該函數(shù)返回三種可能結果中的一種(1)錯誤,如果沒有到該IP地址的路徑存在;(2)錯誤,如果路徑存在但是無效;(3)成功,當一個附帶有效的層2信息的IP地址被找到時。在第一種情況中,返回一個空值。在最后一種情況中,返回的是指向下一跳躍表的表項的指針。
一個FTMQueryRT函數(shù)被用來實現(xiàn)對搜索/下一跳躍表的搜索,它能夠區(qū)分一個FTMQuery函數(shù)命令的前兩種結果。換句話說,F(xiàn)TMQueryRT函數(shù)能夠被用來區(qū)分路徑不存在,還是存在一條路徑,但是卻包含無效的層2信息。如果路徑不存在,F(xiàn)TMQueryRT返回一個空值。如果路徑存在,該函數(shù)返回一個指向下一跳躍表的指針,在這一點用戶能夠檢查有效位,來確定該表項是否包含有效的層2信息。
在操作系統(tǒng)的特定方面,F(xiàn)TM程序需要在控制和管理平面上同網(wǎng)絡堆棧進行通訊,以便訪問更新和維護搜索及下一跳躍表所需的信息,或者發(fā)送信息請求。同樣,程序的這一部分也是因操作系統(tǒng)而異的。提及OS-9系統(tǒng),OS-9系統(tǒng)使用了BSD(加州大學柏克利分校軟件)Unix-型路由域套接口,來發(fā)送和接收進出網(wǎng)絡堆棧的配置信息。FTM程序打開一個路由套接口,并簡單的讀取所有消息,但是僅僅只注意兩種消息,即,RTM_ADD和RTM_DELETE消息。一旦FTM檢測到了引起它注意的消息,它就解析該消息的正文,并使用適當?shù)暮诵暮瘮?shù)(FTMAddRoute,F(xiàn)TMDelRoute,F(xiàn)TMAddMac,F(xiàn)TMDelMac)來更改搜索/下一跳躍表。
在OS-9中,無論何時,當一個新的路徑被添加到路由表中時,或是第2層信息更新時,由SPIP(IP協(xié)議層)發(fā)送一個RTM_ADD消息。在任何一種情況中,該消息將擁有一個RTA_DST區(qū)域,它包含與該表項相關的IP地址。該消息還有一個RTA_GATEWAY區(qū)域,它將能夠區(qū)分是添加一個新路徑,還是更新第2層信息這兩種情況。RTA_GATEWAYSOCKADDR的AF_FAMILY區(qū)域的值將被用來區(qū)分這兩種任務。如果AF_FAMILY區(qū)域等于AF_INET,就添加一個路徑。如果該值等于AF_LINK,那么就添加一個第2層表項。下面的例子說明了這兩種命令行指令,它們后面是由OS-9生成的RTM_ADD結果消息。
Command-route add-net 192.168.9 172.16.5.88 255.255.255.192類型RTM_ADD
標志RTF_UP RTF_GATEWAY地址掩碼RTA_DST RTA_GATEWAY RTA_NETMASKRTA_DST10 01 00 00 c0 a8 09 00 00 00 00 00 00 00 00 00SIN_AMILYAF_INETSIN_ADDRc0 a8 09 00RTA_GATEWAY10 02 00 00 ac 10 05 58 00 00 00 00 00 00 00 00SIN_FAMILYAF_INETSIN_ADDRac 10 05 58RTA_NETMASK 08 00 00 00 ff ff ff c0SIN_LEN8SIN_ADDRff ff ff c0Command-arp-s 192.168.3.141 00:11:22:33:44:55類型RTM_ADD標志RTF_HOST地址掩碼RTA_DST RTA_GATEWAYRTA_DST10 02 00 00 c0 a8 03 8d 00 00 00 00 00 00 00 00SIN_FAMILYAF_INETSIN_ADDRc0 a8 03 8dRTA_GATEWAY14 12 03 00 06 00 06 00 00 11 22 33 44 55 00 00 00 00 00 00SDL_LEN0x14SDL_FAMILYAF_LINKSDL_INDEX3SDL_TYPE IFT_ETHER
SDL_ALEN6SDL_DATA00 11 22 33 44 55FTM程序把層2信息作為一個opaque型數(shù)據(jù)。在SDL_DATA區(qū)域中的MAC地址00:11:22:33:44:55被作為一個無符號字符型數(shù)組,它包括6字節(jié)的數(shù)據(jù)。這樣就允許FTM程序處理所有類型的數(shù)據(jù),而不需要特別知道在一個系統(tǒng)中每個接口的特殊類型。
在OS-9中,無論何時,當一個路徑被從路由表中刪除時,或是一個層2信息被刪除時,SPIP送出一個RTM_DELETE消息。該消息中包含的數(shù)據(jù),除了包含RTM_DELETE中的TYPE檔案之外,與RTM_ADD消息中所包含的數(shù)據(jù)相同。
Linux和OS-9實現(xiàn)的不同之處在于,Linux不支持BSD路由域套接口。Linux使用了一種類似技術叫做網(wǎng)絡連接套接技術。然而,網(wǎng)絡連接套接技術,只能夠接收路徑的添加和刪除。這就要求用別的方法獲得層2信息。
特別的是,F(xiàn)TM程序在命令行中使用的最后選項設定了一個查詢時間間隔,用于檢查在以太網(wǎng)ARP高速緩存中的新表項。查詢允許FTM應用程序獲知ARP高速緩存何時改變,這個信息被用于同一個Unix域套接機制相結合,使ATM網(wǎng)絡子系統(tǒng)添加或刪除層2信息。該機制使用了網(wǎng)絡連接套接概念,將網(wǎng)絡連接RTM_NEWNEIGH和RTM_DELNEIGH消息發(fā)送至/TMP/ATMPROXY Unix域套接口。FTM程序打開套接口,讀取消息,并調(diào)用適當?shù)暮诵暮瘮?shù)(FTMAddMac或FTMDelMac)來更改第2層信息。
當新的路徑被添加到系統(tǒng)中時,Linux系統(tǒng)生成一個RTM_NEWROUTE消息,而當一個路徑被刪除時,生成一個RTM_DELROUTE消息。下面的例子說明了兩種類型的命令行指令,它們后面是由Linux生成的結果消息。Command-route add-net 192.168.9.0 netmask 255.255.255.192 gw 172.16.5.88類型RTM_NEWROUTE網(wǎng)絡掩碼長度26族AF_INETRTA_DST00 08 00 01 c0 a8 09 00RTA_LEN8RTA_TYPERTA_DST(1)DATAc0 a8 09 00(192.168.9.0)RTA_GATEWAY00 08 00 01 c0 a8 09 00RTA_LEN8RTA_TYPERTA_GATEWAY(5)DATAc0 a8 03 12(192.168.3.18)RTA_OIF00 08 00 04 00 00 00 02RTA_LEN8RTA_TYPERTA_OIF(4)DATA2(接口指針)Command-route del-net 192.168.3.141 netmask 00:11:22:33:44:55類型RTM_DELROUTE網(wǎng)絡掩碼長度26族AF_INETRTA_DST00 08 00 01 c0 a8 09 00RTA_LEN8RTA_TYPERTA_DST(1)DATAc0 a8 09 00(192.168.9.0)RTA_GATEWAY00 08 00 01 c0 a8 09 00RTA_LEN8RTA_TYPERTA_GATEWAY(5)DATAc0 a8 03 12(192.168.3.18)RTA_OIF00 08 00 04 00 00 00 02RTA_LEN8RTA_TYPERTA_OIF(4)DATA2(接口指針)接下來,偽碼被用于揭示首先建立LC_Trie和下一跳躍表,并在之后搜索該表的程序。建立表的程序通常是直截了當?shù)?。第一步包括從系統(tǒng)路由表中找回所有當前路由信息。該信息封包括所有的IP地址,來自于層2表的任意MAC地址信息,以及等等類似信息。為系統(tǒng)中的每一條路徑生成一個下一跳躍表項,沒有特定的順序。同樣,如果該表項是一個網(wǎng)絡路徑,則生成兩個下一跳躍表項,一個包含IP地址,另一個包含層2地址信息。
接下來根據(jù)IP地址對下一跳躍表項進行排序,完全相同的表項被刪除。在一個網(wǎng)關服務器是到多個路徑的下一跳躍的情況中,會出現(xiàn)完全相同的下一跳躍表項,網(wǎng)關的主機信息只需要在下一跳躍表中存儲一次。同樣,如果與一個特定表項相關的層2信息已經(jīng)在ARP高速緩存中,這可能導致相同的信息。如果一個表項的IP地址和掩碼長度與另一個表項的相匹配,這個表項就被判斷為是重復的。在表項重復的情況下,有有效的層2信息的表項優(yōu)先于有無效信息的表項而被預留下來。
下一步驟包括使用參照表1中表項所描述的方法,根據(jù)二進制IP地址來對表項進行排序??梢允褂萌魏纬R?guī)的排序方法,包括基于像快速排序這樣的排序算法的標準比較法,或也可以使用一種基數(shù)排序算法。一旦表項被排序,識別基礎向量和這些基礎向量的前綴向量就是一個簡單的任務了。一個前綴向量是一個表項,它的二進制IP地址擁有一個位數(shù)至少與表項掩碼長度相同的前綴,完全被包含在另一表項的掩碼長度位前綴之內(nèi)。此外,一個前綴向量將包含一個在LC_Trie中的內(nèi)部節(jié)點,而基礎向量將包含一個終端葉節(jié)點。例如,參見圖3,表項1是一個前綴表項,其基礎向量存儲在表項2中。當然,有可能表項2也會是某些其他基礎向量表項的前綴向量。因為表被排序,一個前綴表項將會緊跟著它的基礎向量表項,從而可能產(chǎn)生一條這樣的表項鏈。這樣的表項鏈可以被連接到一起,使得可以簡單地從一個基礎向量開始。從最大掩碼長度到最小掩碼長度通過每個前綴表項,從而穿過整個表項鏈。表項鏈中的連接對應于下一跳躍表中的下一跳躍轉移量備份區(qū)域。同樣,在某些特殊情況中,LC-Trie搜索在樹結構中進行的太靠下時,它允許在樹結構中向上回溯。
在實際建立LC-Trie搜索表之前的最后步驟中包括對下一跳躍表中的每一條網(wǎng)絡路徑表項進行的更新,該表項有一個指針指向在下一跳躍表中包含該IP地址層2信息的表項。同樣這減少了在幾個表項使用同一個MAC地址的情況下,對MAC層2信息進行更新的復雜程度。由于MAC信息存儲在下一跳躍表的一個單獨表項內(nèi),如果MAC信息改變,只有這個表項需要更新。否則,每次MAC信息改變時,都必須線性搜索下一跳躍表的表項,已找到所有受影響的表項。
為了在構造進程期間避免和正在進行的LC-Trie表搜索發(fā)生沖突,LC-Trie在一個單獨的內(nèi)存區(qū)域進行初始化構造,并在完成之后LC-Trie被拷貝覆蓋在原LC-Trie之上。下面,基于Nillsson&Karlsson的工作,顯示了用于實現(xiàn)一個遞歸函數(shù)的虛擬代碼,這個遞歸函數(shù)被用來從一個叫做Base的IP地址項目表中建立一個叫做LC-Trie的LC-Trie搜索表。
<pre listing-type="program-listing"><![CDATA[ Build(int frst,int n,int pre,int pos) { if(n==1) { LC-Trie[pos]={0,0,first}; return; } Skip=ComputeSkip(pre,first,n); Branch=ComputeBranch(pre,first,n,skip); Offset=AllocateMemory(2^Branch); LC-Trie[pos]={Branch,Skip,Offset}; p=first; for bitpat=0 to 2^Branch-1 { k=0; while(Extract(pre+Skip,Branch,Base[p+k])==bitpat) k=k+1; Build(p,k,pre+skip,Offset+bitpat); p=p+k; }}]]></pre>基于表Base中的表項分支(或子區(qū)間)的遞歸處理,LC-Trie表(LC-Trie)被從上到下建立。Build函數(shù)傳遞4個整型參數(shù)first——來自于被Build函數(shù)處理的表Base的表項系列的第一表項號碼;n——被Build函數(shù)處理的表項系列的表項數(shù);pre——被Build函數(shù)處理的表項系列的任意共同前綴的位數(shù)。以及pos——在表LC-Trie中,用于分配一個表項的第一個可用的位置。
要說明一個LC-Trie搜索表的建立,請參考上面的Build函數(shù)在表1中表項上的執(zhí)行情況。函數(shù)的初始調(diào)用形式如“Build(0,15,0,0)”,其中初始調(diào)用包括表1中的所有15個表項。第一條if語句處理僅有一個表項調(diào)用Build函數(shù)的情況,在這種情況中,在表LC-Trie中生成一個引導節(jié)點。因此由這個if語句生成的所有葉節(jié)點(或終端)的分支和跳躍值都是零。而Nilsson和Karlsson揭示了一種帶有非零跳躍值的葉節(jié)點,實際中在有完整IP地址的情況下這種現(xiàn)象是不會出現(xiàn)的。
如果有不止一個表項,控制程序進入下一個執(zhí)行區(qū),來計算Skip和Branch的值。Skip值由一個ComputeSkip函數(shù)來計算,該函數(shù)檢查子系統(tǒng)中的第一個和最后一個表項,尋找一個共同的前綴位,在任意這樣的前綴中的位數(shù)就包含了Skip值。在Build函數(shù)的初始化調(diào)用中,在表1中的15個表項中沒有共同的前綴,因此,Skip值等于零。
Branch值由一個ComputeBranch函數(shù)來計算,它檢查在子系統(tǒng)中的所有表項,來確定前綴的最大位數(shù),它忽略了任何共同前綴,包含了位數(shù)的所有可能值。使用該函數(shù)針對表1中所有表項的第一次調(diào)用來進行說明,這里沒有需要忽略的共同前綴。因此,開始第一位出現(xiàn)的所有數(shù)值是(0,1),對表項的前兩位的檢查顯示在表項中出現(xiàn)的所有可能的前兩位數(shù)值是(00,01,10,11)。繼續(xù)用這種方式,列出所有數(shù)值的前3位,但是沒有列出前4位。因此,Branch值是3。
Offset的數(shù)值由一個AllocateMemory函數(shù)來計算。該函數(shù)的結果(Offset)是一個內(nèi)部指針,指向在搜索表LC-Trie中與當前內(nèi)部節(jié)點相關聯(lián)的下一跳躍表項。換句話說,AllocateMemory返回表2的指針/表項號欄中的指針部分??紤]到在當前節(jié)點和下一跳躍內(nèi)部節(jié)點之間的Branch個層,以及2Branch個內(nèi)部節(jié)點已經(jīng)被移除,AllocateMemory函數(shù)設定Offset的值以反映它在壓縮的LC-Trie中的新節(jié)點位置。接下來,Branch,Skip,和Offset值被分配給當前搜索表表項(LC-Trie[pos])。通過例證的方法,第一次通過Build函數(shù),由于23個內(nèi)部節(jié)點被移除,Offset將等于1(見表2,第一行)。這反映了在圖6a中是第7節(jié)點(從0開始)的內(nèi)部節(jié)點,現(xiàn)在在圖6c所示的壓縮LC-Trie中是第一節(jié)點。這里減少了8(23)個節(jié)點。將Branch,Skip,Offset的值分配到搜索表中的當前位置,從而在壓縮的LC-Trie中設定了這條從根節(jié)點到第一內(nèi)部節(jié)點的新路徑。
接下來的代碼部分包含了遞歸調(diào)用,它建立了表項中的逐漸增多的較小子區(qū)間。這些代碼設定了一個計數(shù)變量p等于first,它保存了在遞歸調(diào)用之前的第一表項的數(shù)值。一個for循環(huán)執(zhí)行2Branch次循環(huán),每次處理一個被移除的節(jié)點。循環(huán)將一個局部變量設定為零,并在之后調(diào)用一個while循環(huán)來計數(shù)帶有每一個可能的共同前綴的表項數(shù)量,或者設定其位數(shù)。While循環(huán)使用了一個Extract函數(shù),它返回一個整數(shù),該整數(shù)與一個表項的一個預先確定的部分等價。該函數(shù)的調(diào)用形式如Extract(p,b,s),其中函數(shù)返回的整數(shù)等于起始于位置p的字符串s的b位。之后針對每一個組合調(diào)用Build函數(shù)一次。
為了說明遞歸代碼部分,使用了一個針對所有表項調(diào)用Build函數(shù)的示例,第一次進入該部分的p被設定為0。For循環(huán)從0增至23-1,或8次循環(huán)(每一次處理該3位的8種可能數(shù)值中的一種)。計數(shù)值K被設為0,而while循環(huán)被執(zhí)行。While循環(huán)將求出Branch位數(shù)(在這種情況中是3),開始于第(p加k)個表項(在這種情況下是0)的pre加Skip(在這種情況下是0)位置處,并在之后將該數(shù)值同bitpat(在這種情況下是0)作比較。While循環(huán)的第一個循環(huán)將會從表1中提取第0(000)個表項的前三位,它就等于bitpat。計數(shù)值k被增加,而循環(huán)重復進行,這次提取第1(000)個表項的前三位,它也等于bitpat。計數(shù)值k被增加到2,而while循環(huán)提取第2(001)個表項的前三位,它不等于bitpat。然后遞歸調(diào)用Build函數(shù),用于一系列與bitpat匹配的表項(在第一表項是第0號表項的情況下,所建立的函數(shù)調(diào)用,可能是針對k-1個表項,而不是k個表項)。當遞歸調(diào)用返回后,計數(shù)值p的值增加k,for循環(huán)繼續(xù)。在這種方法中,一次建立LC-Trie的一個分支。
首選實現(xiàn)方法與虛擬代碼實現(xiàn)方法有所不同,在這種方法中,為了調(diào)節(jié)根節(jié)點分支因數(shù),該因數(shù)經(jīng)常被使用,在LC-Trie中的第一表項需要有一個跳躍值0。
正如所提到的一樣,LC-Trie表被建立在一個單獨的內(nèi)存區(qū)域,并在之后被拷貝到現(xiàn)存的LC-Trie表之上??截惒僮鲝谋淼撞康巾敳浚淮翁幚硪粋€表項。這避免了在拷貝期間鎖定表的需求。因此,搜索和拷貝可以在同一時間進行。搜索算法很少反向移動搜索表,因此,一個搜索操作很可能只在搜索表的新舊區(qū)域之間移動一次。而這有可能導致搜索失敗和封包丟失,這一現(xiàn)象出現(xiàn)的幾率很小,小到足以證明在拷貝期間,不對表格進行禁止搜索的鎖定是有好處的。
要在搜索表中添加一個新表項,需要將該表項附加到表中的一個空閑表項上,并在之后用上述同樣的方法重新建立表。要刪除一個表項,僅需要把被刪除的表項標記為空閑表項即可,并在之后重新建立表。然而,由于移除一個表項不會影響到剩余表項的順序,排序步驟可以被省略。
下面的虛擬代碼揭示了對LC-Trie壓縮的搜索表進行搜索的程序。在本發(fā)明的首選實施例中的程序(以及下面所透露的程序)都用C代碼和IXP1200微代碼來實現(xiàn)。本領域技術人員將能理解本發(fā)明并非局限于此,而能夠用其他語言實現(xiàn)。
<pre listing-type="program-listing"><![CDATA[ FTMQuery(ip) { if(hopent=Getent(ip)) { if(hopent.flags & Flags_Net) { hopent=nexthop[hopent.pro_spec.nhop]; } if(hopeent.flags & Flags_PSV) { return(hopent); } } return NULL; } Getent(ip) { node=LC-Trie
;Pos=node.skip;Branch=node.branch;Offset=node.offset;While(Branch?。?) { node=LC-Trie[Offset+Extract(Pos,Branch,IP)]; Pos=Pos+Branch+node.Skip; Branch=node.branch; Offset=node.offset; }hopent=nexthop[Offset];bitmask=hopent.ipaddr^ip;if(Extract(0,hopent.masklen,bitmask)==0) { return hopent; }Offset=hopent.nexthop;While(Offset?。絅oPrefix) { hopent=next[Offset]; if(Extract(0,hopent.mask.len,bitmask)==0) { return hopent; }} return NULL; }]]></pre>搜索開始于對FTMQuery核心函數(shù)的調(diào)用,它嘗試為IP地址ip尋找一個匹配。FTMQuery函數(shù)調(diào)用Getent函數(shù),該函數(shù)實際處理搜索。Getent函數(shù),如果成功的話,它在變量hopent中返回的是在下一跳躍表中同地址ip相匹配的表項。如果Getent不成功,它在變量hopent中返回的是一個NULL值。因此,如果Getent函數(shù)返回一個ip地址,控制程序進入FTMQuery的if語句中。在這一點上FTMQuery需要檢查兩種情況。第一,Getent檢查在下一跳躍表中標記區(qū)域,來確定該ip地址是否是一個網(wǎng)絡入口。如果是,在下一跳躍表中做出一個以上的跳躍來獲得層2信息。第一條if語句處理這種情況。第二種情況包括檢查在下一跳躍表中的標志區(qū)域,來確定在hopent中的該ip地址是否有效。如果它有效,F(xiàn)TMQuery成功返回hopent,否則,則返回一個NULL值。
同樣,Getent函數(shù)實際搜索表LC-Trie,為IP地址ip尋找一個匹配。首先,該函數(shù)載入根節(jié)點信息,聯(lián)系表中的第一表項來設定Pos(或Skip),Branch,和Offset的值。接下來,Getent執(zhí)行一個while循環(huán)來搜索表LC-Trie,直到它到達一個終端葉節(jié)點,例如,一個Branch等于0的節(jié)點。要說明表2中數(shù)值的使用,假設Getent被調(diào)用用于搜索ip地址10111。根節(jié)點信息被載入,設定Pos=0,Branch=3,和Offset=1。函數(shù)提取ip地址10111的前三位,或101,它等于十進制的5。將Offset的值(表2中的指針/表項號碼)加到這個值上得到6(5+1),它確定了在表2中要讀取到節(jié)點中的下一表項(第6號節(jié)點)。之后Pos當前值被增加到Pos值+Branch+node.skip的現(xiàn)值。這樣就給Pos賦值為3(0+3+0),這意味著現(xiàn)在,Pos個數(shù)位可以被Getent忽略。Branch和Offset的值可以被分別設定為2和0(在表2中的第6節(jié)點的數(shù)值)。由于Branch不等于0,While循環(huán)再次執(zhí)行。Extract提取出在ip中下面剩下的,也是最后的兩個數(shù)位(11),并返回其十進制等價數(shù)3,之后將該值與表2的第6表項中的Offset值相加。因此,該節(jié)點被賦值為3+13=16。第16號節(jié)點的Branch值是0,它使得while循環(huán)終結。在這一點,Getent函數(shù)已經(jīng)確定了一個同樣的匹配第16號節(jié)點的虛擬地址同地址ip正確的匹配。然而,在實際應用中,Getent需要進一步檢查該匹配,以確定它所找到的是否是最佳匹配。
在Getent中接下來的代碼段是while循環(huán),它確定了在ip和hopent之間的匹配是否符合在hopent中的掩碼長度位數(shù)。這可以通過進行排他操作或是在兩個字符串上進行操作,并在之后對比if語句的結果而實現(xiàn)。如果掩碼長度位數(shù)匹配,那么Getent已經(jīng)找到了一個匹配,并返回hopent(下一跳躍轉移量)。
接下來的代碼部分處理沒有匹配,或是沒有明顯匹配的情況,Getent反向查看二叉樹尋找匹配。該代碼段開始設定Offset,用于從hopent開始沿二叉樹反向的第一表項。一個while循環(huán)被執(zhí)行,只要Offset還是一個有效的數(shù)字,它重復先前代碼段的功能。如果找到一個匹配,Getent返回hopent,否則它會繼續(xù)嘗試尋找。如果沒有找到匹配,Getent返回NULL。前面所述的揭示了在微處理機上運行的FTM程序的結構,相關表的格式,以及建立和搜索該表的方法。然而,F(xiàn)TM程序并不能獨立實現(xiàn)功能。網(wǎng)絡處理器的結構中需要有一種方法,用于核心處理器同微處理機的接口。例如,如果當FTM程序不能夠處理一個數(shù)據(jù)封包,而將該封包傳送給核心時,或是當本發(fā)明的首選實施例中,構造和維護表的FTM程序部分在核心處理器上運行時,同時程序的搜索部分在微處理機上運行。在任一情況中,都需要一個接口,用于在上述計算機元件之間提供通訊。
下面描述了由IXP1200微代碼所實現(xiàn)的接口優(yōu)選實施例,它被用于StrongARM核心。這個接口提供了將一個以太網(wǎng)和/或ATM驅(qū)動程序?qū)懭肴我獠僮飨到y(tǒng)所需的框架,該操作系統(tǒng)在核心上運行。當然,這并不是本發(fā)明的局限,本發(fā)明和該接口可以使用任何常規(guī)的或相似的網(wǎng)絡。FTM程序提供了大批在數(shù)據(jù)平面上的標準通訊,然而,有些實施例中需要在核心和微處理機之間進行通訊。這種通訊包括主控制和管理平面通訊,F(xiàn)TM程序,連同設置和初始化信息以及數(shù)據(jù)平面通訊一起,進入核心處理器。
核心驅(qū)動程序有兩種初始化職責。第一是確認硬件已經(jīng)被正確的初始化。第二是給微處理機提供所需的設置參數(shù)。這種設置參數(shù)由一個CSR(設置和狀態(tài)注冊器)程序被提供給微處理機。附錄A包含一個“C”語言結構,它描述了接口CSR。
在接口初始化之后,核心僅負責高級緩存描述符的管理。所有的MAC和物理層處理進程由微處理機通過FTM程序進行處理。
核心處理器和微處理機使用緩存描述符來交流被傳輸/接收的數(shù)據(jù)以及所需的任意控制信息的位置。以太網(wǎng)和ATM驅(qū)動程序各自分配和維護它們自己的一系列緩存描述符。這些描述符集合進一步被分為單獨的傳輸緩存描述符和接收緩存描述符集合。因此有四個截然不同的組以太網(wǎng)接收;以太網(wǎng)傳輸;ATM接收;和ATM傳輸。雖然這四個集合被單獨維護,但它們都是用同一種基礎數(shù)據(jù)結構。唯一的不同之處在于每一個組的狀態(tài)區(qū)域位的定義不同。緩存描述符的一般格式如下
每個緩存描述符涉及一個單一完整的封包。每個驅(qū)動程序最少必須有一個傳輸和一個接收緩存描述符,然而在實際應用中會需要更多。所需要的數(shù)量取決于有多少端口被激活,以及所期望的封包等級。如果核心驅(qū)動程序或微處理機不能夠得到一個空閑的緩存描述符,性能將受到影響。描述符的最大數(shù)量僅受到可用內(nèi)存量的限制。這里強烈推薦將所有的緩存描述符或者定位于非高速緩存的內(nèi)存中,或者不止一個地出現(xiàn)在一個單一高速緩存線路上。
不同緩存描述符隊列的內(nèi)存位置由CSR設置。有兩種類型的鏈表隊列。第一種類型使用了IXP推/拉式隊列。八個可用的推/拉式隊列中的三個被要求用于以太網(wǎng)或ATM接口。除了一個等待最終核心處理的傳輸緩存描述符清單之外,這些隊列還保存著樹表的傳輸和接收緩存描述符的清單。在插入或移出這些隊列時不需要鎖定,因為這是硬件提供的功能。第二種類型的隊列被用于傳輸和接收隊列。這必須保持一個FIFO排序,所以推/拉式隊列不適用。為提供快速的插入和刪除,隊列中的每一個元素都有一個頭指針和一個尾指針。為了保證連貫性,在訪問這些來自于核心驅(qū)動程序的隊列之前,必須使用CAM(條件訪問模塊)鎖定機制來鎖定尾指針。
每個描述符包含一個微處理器從不修改的用戶-定義區(qū)域。這個區(qū)域<p>表18.表16和17所列改進的相關性數(shù)據(jù)
<p>數(shù)位6——該位是一個成幀故障位,它表示在接受到的封包中有一個成幀故障。
數(shù)位5——該位是一個接收器溢出位,它表示微代碼在其溢出之前,不能夠從硬件接收FIFO中移除數(shù)據(jù)。這表示或者是微代碼沒有足夠快到能夠?qū)⑦M程繼續(xù)下去,或者是系統(tǒng)的空閑接收緩存描述符用盡了。
數(shù)位4——該位是一個CRC(循環(huán)冗余碼)錯誤位,它表示該封包已經(jīng)被接收到,但CRC不正確。
數(shù)位3——該位是短封包位,它表示一個接收到的封包小于64字節(jié)。
數(shù)位2——該位是長封包位,它表示一個接收到的封包長度大于最大值。
數(shù)位1——該位是多點傳送位,它表示被接收到封包被作為一個硬件層多點傳送數(shù)位0——該位是廣播位,它表示被接收到封包被作為一個硬件層廣播。
控制/狀態(tài)字(ATM)
數(shù)位15——這是一個中斷位,其中對該位的設定將會導致在用數(shù)據(jù)填充該緩存描述符,并將其放置于rxbd隊列中之后,微處理機發(fā)送一個中斷給核心。
數(shù)位14到11——預留。
數(shù)位10——這是一個類型位,它表明了這是一個接收緩存描述符還是傳輸緩存描述符。對于是接收緩存描述符的情況,驅(qū)動程序?qū)言撐辉O置為0。
數(shù)位9-0——預留。
為了接收緩存描述符,端口號區(qū)域?qū)⒈晃⒋a設定,以表明封包由哪個接口接收。
端口號
數(shù)位15——預留。
數(shù)位14——這是一個IX位,它表示該端口位于IX總線上。對于以太網(wǎng)和ATM而言,這一位都將被微代碼設定為1。
數(shù)位13到10——這是類型位區(qū)域,它表示了接口的類型1——以太網(wǎng);2——ATM;而3-15——預留。
數(shù)位9到6——預留。
數(shù)位5到3——這些位表示端口的MAC號。
數(shù)位2到0——這些位表示端口的單元號。
數(shù)據(jù)長度區(qū)域在被放入rxfree隊列中之前被初始化為0。在微處理機將緩存描述符插入rxbd隊列之前,它們將對數(shù)據(jù)長度區(qū)域進行設定,令其反映被拷貝到緩存區(qū)中的字節(jié)總數(shù)。這包括數(shù)據(jù)連接報頭和有效負載。在ATM的情況下,只有在第一單元上的ATM報頭被拷貝,而同一封包后面的ATM報頭被丟棄。數(shù)據(jù)大小區(qū)域表示微處理機可以拷貝到與該緩存描述符所關聯(lián)的緩沖區(qū)中去的最大數(shù)據(jù)字節(jié)數(shù)。對以太網(wǎng)和ATM而言,它必須足夠大從而包括一個完整的幀。這意味著它對于ATM而言至少是1552,對于以太網(wǎng)而言至少是1514。
數(shù)據(jù)位置區(qū)域包括一個指針,指向與該緩存描述符所關聯(lián)的緩沖區(qū)的起始點,該緩沖區(qū)包含了實際傳輸/接收的數(shù)據(jù)。必須在一個8字節(jié)的范圍內(nèi)接收這個緩存描述符。ATM微代碼同樣需要在該位置之前有8個字節(jié),可用于存儲臨時數(shù)據(jù)。
用戶數(shù)據(jù)區(qū)域可以被用于存儲驅(qū)動程序所需的任意數(shù)據(jù)。這個區(qū)域從不會被微處理機查看或修改。例如,如果數(shù)據(jù)位置指針指向一個大的數(shù)據(jù)結構內(nèi)部,這個區(qū)域可以被用于很容易的找到所包含的數(shù)據(jù)結構。
下面描述了傳輸緩存描述符,同樣也是上面所述的一般形式。當核心希望傳輸一個封包時,驅(qū)動程序從txfree隊列中移出一個緩存描述符,填充所有需要的傳輸區(qū)域,并將它插入到txbd隊列上。核心驅(qū)動程序不需要等待封包被發(fā)送,而取而代之的是能夠立即使用下一個傳輸緩存描述符。這將會繼續(xù)下去,直至核心處理器運行完所有要發(fā)送的封包,或者txfree隊列為空。一旦核心處理器插入了封包,它就不允許更改在傳輸緩存描述符中的任何區(qū)域。在每一個封包都已經(jīng)被發(fā)送之后,如果需要,微處理機將緩存描述符插入txdone隊列并中斷核心程序。之后,驅(qū)動程序從這個隊列中移除緩存描述符,釋放任何相關的系統(tǒng)內(nèi)存,并將緩存描述符放回到txfree隊列中。
下面描述了傳輸緩存描述符的格式。
下一個緩存描述符區(qū)域用于生成一個描述符鏈,通過識別被處理鏈中的下一緩存描述符,該描述符鏈被核心處理。
控制/狀態(tài)字包含的信息被用于識別與中斷和類型相關的某些信息。
控制/狀態(tài)字(以太網(wǎng))
數(shù)位15——這是中斷位,當其被設定時,它會在將數(shù)據(jù)傳輸和將緩存描述符放置于txdone隊列上之后,使微處理機發(fā)送一個中斷給核心程序。
數(shù)位14到11——預留。
數(shù)位10——該位是類型位,它表明了這是一個接收緩存描述符還是傳輸緩存描述符。對于是接收緩存描述符的情況,驅(qū)動程序?qū)言撐辉O置為0。
數(shù)位9到0——預留。
控制/狀態(tài)字(ATM)
數(shù)位15——這是中斷位,當其被設定時,它會在將數(shù)據(jù)傳輸和將緩存描述符放置于txdone隊列上之后,使微處理機發(fā)送一個中斷給核心程序。
數(shù)位14到11——預留。
數(shù)位10——該位是類型位,它表明了這是一個接收緩存描述符還是傳輸緩存描述符。對于是接收緩存描述符的情況,驅(qū)動程序?qū)言撐辉O置為0。
數(shù)位9到0——預留。
端口號被用來表示封包將在哪一個端口被發(fā)送。
數(shù)位15——預留。
數(shù)位14——這是一個IX位,它表示該端口位于IX總線上。對于以太網(wǎng)和ATM而言,這一位都將被設定為1。
數(shù)位13到10——這是類型位區(qū)域,它表示了接口的類型1——以太網(wǎng);2——ATM;而3-15——預留。
數(shù)位9到6——預留。
數(shù)位5到3——這些位表示端口的MAC號。
數(shù)位2到0——這些位表示端口的單元號。
數(shù)據(jù)長度區(qū)域表示在緩存區(qū)內(nèi)的數(shù)據(jù)字節(jié)數(shù),該緩存區(qū)與要被傳輸?shù)倪@個描述符相關聯(lián)。
數(shù)據(jù)大小區(qū)域沒有被傳輸緩存描述符使用,并將被初始化為零。
數(shù)據(jù)位置區(qū)域指向一個包含有要被發(fā)送的封包的緩存區(qū)的起始處。該封包必須已經(jīng)包含了以太網(wǎng)或ATM數(shù)據(jù)連接報頭。在ATM的情況中,只有第一單元的報頭被包括在內(nèi)。在以太網(wǎng)中,在數(shù)據(jù)位置指針上沒有排列約束。在ATM中數(shù)據(jù)位置必須是8字節(jié)排列的。
用戶數(shù)據(jù)區(qū)域可以被用于存儲驅(qū)動程序所需的任意數(shù)據(jù)。這個區(qū)域從不會被微處理機查看或修改。例如,如果數(shù)據(jù)位置指針指向一個大的數(shù)據(jù)結構內(nèi)部,這個區(qū)域可以被用于很容易的找到所包含的數(shù)據(jù)結構。
下面描述了在初始化時提供給微處理機的CSR塊的配置。用于以太網(wǎng)和ATM接口的CRS的C代碼在附錄A中列出。用于以太網(wǎng)和ATM的CRS被分成兩個部分,并且包含了用于控制微處理機操作的可配置參數(shù)。第一個是一個一般共同部分,它被該類型的所有接口共享,而第二部分包含了端口特征信息。
共同以太網(wǎng)CSR部分包含了不同隊列數(shù)據(jù)結構的一個單一拷貝,它被共享給所有以太網(wǎng)端口,在下面列出
·rxfree_push——指向八個IXP推式隊列中的一個的指針。當核心程序結束對一個接收到的緩存描述符的處理時,驅(qū)動程序?qū)言撝羔樂祷亟o使用該推式隊列的rxfree表。
·rxfree_pull——指向八個IXP推式隊列中的一個的指針。當微處理機需要一個接收緩存描述符,它們可以從這里得到一個。這個參數(shù)必須和rxfree_push一樣與相同的推/拉式隊列建立關聯(lián)。
·txfree_push——與rxfree_push類似。核心驅(qū)動程序?qū)⒃趯鬏斁彺婷枋龇M行處理之后,將它們從txdone_pull隊列中插入到這里。
·txfree_pull——與rxfree_pull類似。當核心驅(qū)動程序需要一個空閑的傳輸緩存描述符時,它能夠從這個隊列中得到一個。
·txdone_push——個指針指向一個IXP推式隊列,它存儲了傳輸緩存描述符。在微處理機結束一個傳輸緩存描述符的處理時,它將會被插入該隊列。
·txdone_pull——核心驅(qū)動程序能夠從這個IXP拉式隊列中找回傳輸緩存描述符。這使驅(qū)動程序在將一個緩存描述符插入txfree_push隊列中之前,可以釋放于它相關的任意內(nèi)存。
·rxbd_tail——個指針指向接收隊列的末尾。微處理機將會從這里開始接收輸入的封包。
·rxbd_head——個指針指向接收隊列的開頭。核心驅(qū)動程序?qū)倪@里開始接收輸入的封包。
·txbd_tail——個指針指向傳輸隊列的末尾。核心驅(qū)動程序?qū)谶@里插入所有的傳輸緩存描述符。
·txbd_head——個指針指向傳輸隊列的開頭。微處理機將會從這里移除已經(jīng)被傳輸?shù)木彺婷枋龇?br>
在共同以太網(wǎng)CSR部分中也包括由所有以太網(wǎng)端口使用的中斷向量(向量)。核心驅(qū)動程序負責將進入的封包進行多路分解,如果需要的話。
共同以太網(wǎng)CSR部分也包括一個中斷事件/掩碼寄存器(i_event/i_mask)。該事件寄存器和掩碼寄存器是物理上不同的寄存器,但是包含相同的數(shù)位區(qū)域定義。事件寄存器將表示是不同的中斷中的哪一個正在等待。然而,僅僅只有在掩碼寄存器中的等效數(shù)位被設定時,實際的核心程序中斷才會出現(xiàn)。
數(shù)位31——這是傳輸緩存區(qū)中斷位。在一個緩存區(qū)已經(jīng)被傳輸,并且相關緩存描述符被放置在txdone隊列之后,由微處理機生成該中斷。
數(shù)位30到15——預留。
數(shù)位14——這是接收錯誤中斷位。如果在一個封包的接收期間出現(xiàn)一個錯誤,接受錯誤中斷被生成。該緩存描述符仍然被插入到rxbd隊列中,而bd_status表示導致錯誤的原因。
數(shù)位13——這是接收幀中斷位。在一個幀已經(jīng)被成功的接收之后,它被放置于rxbd隊列之中,并生成接收幀中斷。
數(shù)位1到0——預留。
共同以太網(wǎng)CSR部分的最后一個組成包括微處理機命令寄存器(mccr),它被用于發(fā)送命令給微處理機。
數(shù)位31到16——這些數(shù)位包含了端口位區(qū)域,它被用于指定該命令被用于哪一個以太網(wǎng)端口。數(shù)位16表示端口0,而數(shù)位31表示端口15。通過在該區(qū)域中設定不止一個數(shù)位,一個命令有可能被應用于多個端口。
數(shù)位15——這是占用標記位,表示微處理機當前正在執(zhí)行一個命令。驅(qū)動程序在對適當?shù)膮?shù)進行初始化之后設定這個數(shù)位,并在之后等待這個數(shù)位被清空,這表示該命令已經(jīng)被結束了。
數(shù)位3到0——這是操作碼區(qū)域,它指出了在指定的端口上要由微處理機執(zhí)行什么命令。
·0000——開始傳輸和接收,有可能在一個端口上同時開始傳輸和接收。這個命令等價于在一個開始傳輸命令之后緊跟著一個開始接收命令。
·0001——開始接收·0010——開始傳輸·0011——停止接收·0100——停止傳輸下面描述了以太網(wǎng)的端口指定CSR部分。第一組成部分將每一個以太網(wǎng)端口的物理地址設置為一個48位802.3MAC層地址。
最后一個組成部分設置了傳輸和接收控制寄存器(trcr)。
數(shù)位31到2——預留。
數(shù)位1——該位激活傳輸程序。
數(shù)位2——該位激活接收程序。
下面描述了用于ATM網(wǎng)絡的CRS結構,它也被分成兩個部分。第一部分是一個單一的共同部分,它被共享給該種類型的所有接口,而第二部分包含端口指定信息。
共同ATM CSR部分包含一個不同數(shù)據(jù)結構的單一拷貝,它被所有的ATM端口共享,它與前面所述的用于以太網(wǎng)端口的隊列結構相同。
在共同ATM CSR中還包含有中斷向量(向量),它被所有ATM端口使用。核心驅(qū)動程序負責將進入的封包進行多路分解,如果需要的話。
中斷事件/掩碼寄存器(i_event/i_mask)。該事件寄存器和掩碼寄存器是物理上不同的寄存器,但是包含相同的數(shù)位區(qū)域定義。事件寄存器將表示是不同的中斷中的哪一個正在等待。然而,僅僅只有在掩碼寄存器中的等效數(shù)位被設定時,實際的核心程序中斷才會出現(xiàn)。
數(shù)位31——這是傳輸緩存位。在一個緩存區(qū)已經(jīng)被傳輸,并且相關的緩存描述符被放置到txdone隊列中之后,由微處理機生成這個中斷。
數(shù)位30到15——預留。
數(shù)位14——這是接收錯誤中斷位。如果在一個封包的接收期間出現(xiàn)一個錯誤,接受錯誤中斷被生成。該緩存描述符仍然被插入到rxbd隊列中,而bd_status區(qū)域表示導致錯誤的原因。
數(shù)位13——這是接收幀中斷位。在一個幀已經(jīng)被成功的接收之后,它被放置于rxbd隊列之中,并生成接收幀中斷。
數(shù)位1到0——預留。
共同ATM CSR部分的最后組成部分包括微處理機命令寄存器(mccr),它被用于發(fā)送命令給微處理機。
數(shù)位31到16——這些數(shù)位包含了端口位區(qū)域,它被用于指定該命令被用于哪一個ATM端口。數(shù)位16表示端口0,而數(shù)位31表示端口15。通過在該區(qū)域中設定不止一個數(shù)位,一個命令有可能被應用于多個端口。
數(shù)位15——這是占用標記位,表示微處理機當前正在執(zhí)行一個命令。驅(qū)動程序在對適當?shù)膮?shù)進行初始化之后設定這個數(shù)位,并在之后等待這個數(shù)位被清空,這表示該命令已經(jīng)被結束了。
數(shù)位3到0——這是操作碼區(qū)域,它指出了在指定的端口上要由微處理機執(zhí)行什么命令。
·0000——開始傳輸和接收,有可能在一個端口上同時開始傳輸和接收。這個命令等價于在一個開始傳輸命令之后緊跟著一個開始接收命令。
·0001——開始接收·0010——開始傳輸·0011——停止接收·0100——停止傳輸端口指定ATM CSR下面描述了ATM的端口指定CSR部分,它包含一個對傳輸和接收控制寄存器(trcr)進行設置的數(shù)位區(qū)域。
數(shù)位31到2——預留。
數(shù)位1——該位激活傳輸程序。
數(shù)位0——該位激活接收程序。
下面的部分包含了在微處理機的初始化和重設中以及封包的傳輸和接收中所需的步驟的功能描述。
·初始化步驟(1)禁止傳輸和接收;(2)設置CSR(速度的,雙向通訊的,BD的,地址信息,等等);(3)清空事件寄存器;(4)設定掩碼寄存器;(5)激活中斷;并(6)開始傳輸和接收。
·傳輸步驟(1)填寫描述符;(2)放入傳輸隊列;并(3)處理TX中斷。
·接收步驟(1)當一個封包到達一個接口時,微處理機從接收空閑串列中移除一個緩沖描述符,并開始用數(shù)據(jù)填充它,在封包的接收結束后,狀態(tài)信息被更新,而該緩沖描述符被放置于rxbd隊列中,如果需要的話,也生成一個核心程序的中斷,如果核心驅(qū)動程序處理封包不夠快以及微處理器用完了可用的接收描述符的話,將簡單的停止處理所有進入的封包直至描述符變?yōu)榭捎茫?2)存儲來自于描述符的信息;(3)重設描述符的值;并(4)放置于rxfree隊列中;·重設步驟(1)停止傳輸和接收;(2)更改設置參數(shù);并(3)輸入重設命令。
關于硬件的初始化,驅(qū)動程序負責某些以太網(wǎng)和ATM硬件的初始化。對以太網(wǎng)而言,尤其是Intell IXF440以太網(wǎng),核心驅(qū)動程序負責在Intel IXF440多通道10/100Mbps以太網(wǎng)控制器上設置如下寄存器。
·ixf_pcr——端口控制寄存器·ixf_fbr——FIFO總線模式寄存器·ixf_rpr——接收參數(shù)寄存器·ixf_smr——串行模式寄存器·ixf_ftr——FIFO閾值寄存器·ixf_rmfr——接收模式濾波寄存器·ixf_ier——中斷激活寄存器附錄A——數(shù)據(jù)結構這個附錄包含了上面所述的數(shù)據(jù)結構的’C’語言定義。
<pre listing-type="program-listing"><![CDATA[ /* **緩沖描述符 */typedef struct BufferDescriptor{ struct BufferDescripto*bd_next; u_int16 bd_status; u_int16 bd_port; u_int16 bd_len1; u_int16 bd_len2; u_int16 bd_size1; u_int16 bd_size2; u_int8* bd_data1; u_int32 bd_usr1; u_int8* bd_data2; u_int32 bd_usr2;}BD;/*以太網(wǎng)接口*/typedef struct{ /*以太網(wǎng)端口指定數(shù)據(jù)*/ u_int8 paddr[6];/*單點傳送地址*/ u_int8 res1[2];/*邊界填充*/ u_int32 res2[2];/*預留*/ u_int32 trcr;/*傳輸/接收控制寄存器*/}Enet_port;typedef struct{ /*以太網(wǎng)共同數(shù)據(jù)*/ BD*free_push;/*用于空BD的IXP推式隊列*/ BD*free_pull;/*用于空BD的IXP拉式隊列*/ BD*txdone_push;/*用于被傳輸BD的IXP推式隊列*/ BD*txdone_pull;/*用于被傳輸BD的IXP拉式隊列*/ BD*rxbd tail;/*接收隊列尾部*/ BD*rxbd_head;/*接收隊列頭部*/ BD*txbd_tail;/*傳輸隊列尾部*/ BD*txbd_head;/*傳輸隊列頭部*/ u_int32 vector /*中斷向量*/ u_int32 i_event;/*中斷事件寄存器*/ u_int32 i_mask;/*中斷掩碼寄存器*/ u_int32mccr;/*微代碼命令寄存器*/}Enet_common;/*ATM接口*/typedef struct{ /*ATM端口指定信息*/ u_int32 trcr;/*傳輸/控制寄存器*/}ATM_port;typedef struct{/*ATM共同數(shù)據(jù)*/ BD*free_push;/*用于空BD的IXP推式隊列*/ BD*free_pull;/*用于空BD的IXP拉式隊列*/ BD*txdone_push;/*用于被傳輸BD的IXP推式隊列*/ BD*txdone_pull;/*用于被傳輸BD的IXP拉式隊列*/ BD*rxbd_tail;/*接收隊列尾部*/ BD*rxbd_head;/*接收隊列頭部*/ BD*txbd_tail;/*傳輸隊列尾部*/ BD*txbd_head;/*傳輸隊列頭部*/ u_int32 vector /*中斷向量*/ u_int32i_event;/*中斷事件寄存器*/ u_int32i_mask;/*中斷掩碼寄存器*/ u_int32mccr;/*微代碼命令寄存器*/}ATM_common;/***IXP1200共享內(nèi)存映射*/typedef struct{ Enet_common enet_common; Enet_port enet_port[MAX_ENET_PORTS]; ATM_common atm_common; ATM_port atm_port[MAX_ATM_PORTS];}IXP1200MM;]]></pre>
前面的描述和附圖包含了本發(fā)明的說明性實施例。前面所敘述的實施例和方法會因本領域技術人員的能力,經(jīng)驗和偏好的不同而不同。所列出的方法步驟遵循一定的順序,并不構成對本方法步驟的順序的限定。前述的描述和附圖只不過是本發(fā)明的解釋和說明,本發(fā)明并未以此為限定,而是在權利要求中對范圍做出了限定。擁有本公開資料的本領域技術人員,無需從本發(fā)明范圍出發(fā)就能夠作出修改和變化。
權利要求
1.一個接口用于激活一個多元件計算機系統(tǒng)的一個主計算機元件和一個從計算機元件之間的通訊,上述方法包括一個多元件計算機系統(tǒng),它擁有一個主計算機元件和一個從計算機元件;以及一個設置和狀態(tài)寄存器(CSR)塊,它擁有一個共同部分和一個端口指定部分,用于激活上述主計算機元件和從計算機元件之間的緩存描述符的交換,其中所述緩存描述符包含識別下層信息封包的信息。
2.如權利要求1所述的發(fā)明,其中所述緩存描述符還包括從上述從計算機元件發(fā)送到上述主計算機元件的接收緩存描述符,以及從上述主計算機元件發(fā)送到上述從計算機元件的傳輸緩存描述符。
3.如權利要求2所述的發(fā)明,其中所述上述CSR塊的共同部分還包括一個隊列結構,上述主計算機元件和上述從計算機元件能夠使用其來接收和傳輸上述緩存描述符。
4.如權利要求3所述的發(fā)明,其中所述隊列結構還包括一個接收空閑拉式隊列,上述從計算機元件能夠從其中獲得一個可用的接收緩存描述符;一個接收隊列,它擁有一個頭指針和一個尾指針,其中上述從計算機元件在用數(shù)據(jù)填充上述接收緩存描述符之后,能夠?qū)⒔邮站彺婷枋龇祷氐缴鲜鼋邮贞犃械奈膊?,而其中上述主計算機元件能夠?qū)⑺顫M的接收緩存描述符從上述接收隊列的頭部移除;一個接收空閑推式隊列,在其中上述主計算機元件能夠在其結束對緩存描述符的處理之后返回緩存描述符;一個傳輸空閑拉式隊列,在其中上述主計算機元件能夠獲得一個可用的傳輸緩存描述符;一個傳輸隊列,它擁有一個頭指針和一個尾指針,其中上述主計算機元件在用數(shù)據(jù)填充上述傳輸緩存描述符之后,能夠?qū)鬏斁彺婷枋龇祷氐缴鲜鰝鬏旉犃械奈膊?,而其中上述從計算機元件能夠?qū)⑺顫M的傳輸緩存描述符從上述傳輸隊列的頭部移除;一個傳輸結束推式隊列,其中上述從計算機元件能夠在其結束對傳輸緩存描述符的處理之后返回傳輸緩存描述符;一個傳輸結束拉式隊列,上述主計算機元件可從其中找回傳輸緩存描述符;以及一個傳輸空閑推式隊列,在其中上述主計算機元件能夠獲得返回的傳輸緩存描述符。
5.如權利要求1所述的發(fā)明,其中所述上述CSR塊的共同部分還包括一個中斷向量,它被用于主計算機元件的通訊中斷。
6.如權利要求5所述的發(fā)明,其中所述的上述CSR塊的共同部分還包括中斷事件和掩碼寄存器,其中所述的中斷事件寄存器將會識別正在等待的中斷,而上述掩碼寄存器將會確定是否是上述被識別的中斷被發(fā)送到上述主計算機元件。
7.如權利要求1所述的發(fā)明,其中所述的上述CSR塊的共同部分還包括一個從計算機元件命令寄存器,用于發(fā)送命令給上述從計算機元件。
8.如權利要求1所述的發(fā)明,其中所述的CSR塊的上述端口指定部分特定用于以太網(wǎng),并且包含一個物理地址組成部分和一個用于激活傳輸或接收的傳輸和接收控制寄存器。
9.如權利要求1所述的發(fā)明,其中所述的CSR塊的上述端口指定部分特定用于ATM,并且包含一個物理地址組成部分和一個用于激活傳輸或接收的傳輸和接收控制寄存器。
10.如權利要求2所述的發(fā)明,其中所述的接收緩存描述符包括一個下一緩存描述符區(qū)域,用于存儲一個指針,指向在一個緩存描述符鏈中的下一個緩存描述符;一個控制/狀態(tài)區(qū)域,如果上述接收緩存描述符是以太網(wǎng)特定的,那么它包含關于主要信息封包的信息,或者如果上述接收緩存描述符是ATM特定的,那么它包含一個中斷位,它表示從計算機元件發(fā)送一個中斷給上述主計算機元件。一個端口號區(qū)域,它包含網(wǎng)絡和接口特定的信息;一個數(shù)據(jù)長度區(qū)域,它包含被讀入緩存區(qū)的字節(jié)數(shù),該緩存區(qū)包含有優(yōu)先的數(shù)據(jù)封包。一個數(shù)據(jù)大小區(qū)域;一個數(shù)據(jù)位置區(qū)域;一個用戶數(shù)據(jù)區(qū)域;緩存描述符添加轉寄表聲明Kitchen接收器
11.一個轉寄信息封包的方法,它在一個擁有主、從計算機元件的多元件計算機系統(tǒng)上操作,上述方法包括提供一個多元件計算機系統(tǒng),它擁有一個主計算機元件和一個從計算機元件,它們相互之間可以有效的通訊;建立一個表,它包含一些表項,這些表項帶有與之相關聯(lián)的地址,其中所述的表項是依照一個LC-Trie算法對上述地址進行操作,從而分級組織起來的;在上述計算機系統(tǒng)內(nèi)部接收一個信息封包,其中所述的信息封包帶有一個與之相關聯(lián)的目的地地址;使用一個LC-Trie算法來搜索上述表,在上述表一個表項的上述地址和上述信息封包的上述目的地地址之間找到一個匹配;將上述信息封包傳輸?shù)揭粋€轉寄地址,該轉寄地址與上述匹配表項的上述地址相關聯(lián);并且其中提到的方法的上述步驟是由一個在上述主、從計算機元件上運行的轉寄表管理程序?qū)崿F(xiàn)的。
12.如權利要求1所述的發(fā)明,其中提到的表包括關聯(lián)在一起的一個LC-Trie搜索表和一個下一跳躍表,其中所述的LC-Trie搜索表包含來自于上述LC-Trie壓縮算法的信息,而其中所述的下一跳躍表包含了將上述信息封包傳輸?shù)缴鲜鲛D寄地址所必需的信息,該轉寄地址與上述匹配表項相關聯(lián)。
13.如權利要求2所述的發(fā)明,其中所述的LC-Trie搜索表表項包括一個分支因數(shù),一個跳躍值,以及一個LC-Trie/下一跳躍轉移量,它們是在上述建立步驟期間,遵照上述LC-Trie壓縮算法,針對上述多個表項中的每一個而生成的。
14.如權利要求3所述的發(fā)明,其中所述的下一跳躍表的表項中包括了上述地址區(qū)域,該區(qū)域中包含了在上述搜索步驟中識別的匹配表項中的上述IP地址,還有一個opaque型數(shù)據(jù)區(qū)域,用于存儲特定的封包處理信息。
15.如權利要求4所述的發(fā)明,其中所述的下一跳躍表的表項還包括一個掩碼長度區(qū)域,它包含上述表項的一個掩碼長度,而上述方法還包含檢驗上述匹配表項地址和上述信息封包目的地址在至少是上述掩碼長度內(nèi)是否匹配的步驟。
16.如權利要求5所述的發(fā)明,其中所述的下一跳躍表的表項還包括一個下一跳躍轉移量備份區(qū)域,它表示在該層級中的,在建立步驟中生成的一個先前的表項,而上述方法還包括第二次檢驗步驟,如果上述檢驗步驟失敗的話,由該步驟來完成檢驗,它檢驗了上述前一個表項地址與上述信息封包目的地址在至少是上述前一表項的掩碼長度數(shù)位內(nèi)是否匹配。
17.如權利要求4所述的發(fā)明,其中所述的opaque型數(shù)據(jù)區(qū)域還包括MPLS標志。
18.如權利要求4所述的發(fā)明,其中所述的opaque型數(shù)據(jù)區(qū)域還包括設備參數(shù)的屬性。
19.如權利要求4所述的發(fā)明,其中所述的opaque型數(shù)據(jù)區(qū)域還包括加密的處理參數(shù)。
20.如權利要求4所述的發(fā)明,其中所述的地址包括IP地址,而上述opaque型數(shù)據(jù)區(qū)域還包括VLAN標志。
21.如權利要求4所述的發(fā)明,其中所述的opaque型數(shù)據(jù)區(qū)域還包括一個端口指定區(qū)域,用于訪問在上述傳輸步驟中所識別的上述轉寄地址。
22.如權利要求11所述的發(fā)明,其中所述的地址是IP地址。
23.如權利要求12所述的發(fā)明,其中所述的下一跳躍表的表項還包括一個標記區(qū)域,在其中如果上述標記設定上述端口指定區(qū)域包含上述轉寄IP地址,該區(qū)域包含了一個指向上述下一跳躍表中一個表項的轉移量,這表示上述轉寄IP地址找到的是一個網(wǎng)絡路由,而如果上述標記沒有被設定上述端口指定區(qū)域包含上述轉寄IP地址,這表示上述轉寄IP地址找到的是一個主機路由。
24.如權利要求1所述的發(fā)明,其中所述的計算機系統(tǒng)包括一個網(wǎng)絡處理器,它擁有一個核心處理器和至少一個微處理機,而上述主計算機元件就是上述核心處理器,上述從計算機元件就是上述微處理機。
25.如權利要求14所述的發(fā)明,其中所述的建立上述表的步驟是由上述轉寄表管理器或上述核心處理器來執(zhí)行的,而所述的對上述表進行搜索的步驟是由上述轉寄表管理器在上述微處理機上執(zhí)行的。
26.一個轉寄信息封包的方法,它在擁有一個網(wǎng)絡處理器的一個多元件計算機系統(tǒng)上運行,該網(wǎng)絡處理器包含一個核心處理器和至少一個微處理機,上述方法包括提供一個多元件計算機系統(tǒng),它擁有一個網(wǎng)絡處理器,該網(wǎng)絡處理器帶有一個核心處理器和至少一個微處理機,它們相互之間能夠通訊;建立一個LC-Trie搜索表和一個相應的下一跳躍表,該表包含一些表項,這些表項帶有與其相關聯(lián)的IP地址;其中提到的LC-Trie表包含一個分支因數(shù),一個跳躍值,以及一個LC-Trie/下一跳躍轉移量,它們是遵照上述LC-Trie壓縮算法,針對上述多個表項的每一個而生成的;而其中所述的下一跳躍表的表項包括上述IP地址,它有一個掩碼的長度;一個與其相關聯(lián)的目的地IP地址;一個下一跳躍轉移量備份區(qū)域,它用于在上述下一跳躍表中查找一個先前的表項;一個opaque型數(shù)據(jù)區(qū)域,用于存儲特定的封包處理信息,包括,一個端口指定區(qū)域,一個VLAN標志,服務參數(shù)性質(zhì),和加密的處理參數(shù);以及一個標記區(qū)域,其中如果上述標記設定包括一個在所述下一跳躍表中一個表項的轉移量的上述端口指定區(qū)域,如果該標記包含轉寄IP地址,表示上述轉寄IP地址找到的是一個網(wǎng)絡路由,而如果上述標記沒有被設定包含上述轉寄IP地址的上述端口指定區(qū)域,這表示上述轉寄IP地址找到的是一個主機路由;在上述計算機系統(tǒng)中接收一個信息封包,其中所述的信息封包擁有一個與其相關聯(lián)的目的地IP地址;對上述LC-Trie表的搜索使用了一種LC-Trie搜索算法,在上述下一跳躍表中上述對應表項的上述IP地址和上述信息封包的上述目的地IP地址之間尋找匹配;驗證上述匹配表項的上述IP地址和上述信息封包的的上述目的地IP地址至少在上述掩碼長度內(nèi)是相互匹配的;如果上述前一個驗證步驟失敗,則驗證上述匹配表項的上述IP地址和上述信息封包的的上述目的地IP地址至少在上述前一個表項的掩碼長度位數(shù)內(nèi)是匹配的,該前一個表項由上述表項在它的上述下一跳躍轉移量備份區(qū)域中給出;將上述信息封包傳輸?shù)脚c上述匹配表項的上述IP地址相關聯(lián)的上述轉寄IP地址處;以及其中上述方法的上述步驟由一個轉寄表管理器來執(zhí)行,其中建立上述表的上述步驟由在上述核心處理器上的一個轉寄表管理器來執(zhí)行,而對上述表進行搜索的上述步驟是由上述轉寄表管理器在上述微處理機上執(zhí)行的。
全文摘要
一種具有網(wǎng)絡處理器的計算機系統(tǒng),包括一核心處理器和可操作地和該核心處理器通訊的至少一微處理機(1-6)。一個表包括一批隨其建立的IP地址表項,其中這些表項是遵循一個對IP地址進行操作的LC-Trie壓縮算法而分等級組建的。一個信息封包在計算機系統(tǒng)中被接收到,其中該信息封包擁有一個與其相關的目標IP地址。用一種LC-Trie檢索算法來檢索表,在表中尋找一個表項與信息封包的目標IP地址相匹配。信息封包被傳輸?shù)揭粋€與匹配的表項IP地址相關聯(lián)的轉寄IP地址中去。一接口用于在網(wǎng)絡處理器的核心處理器和微處理機之間通訊。
文檔編號H04L12/56GK1613066SQ02826978
公開日2005年5月4日 申請日期2002年11月9日 優(yōu)先權日2001年11月9日
發(fā)明者克特·舒瓦德爾, 大衛(wèi)·里昂, 理克·斯途恩 申請人:瑞迪西斯邁克維爾通訊軟件分公司