欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

最長(zhǎng)匹配地址查詢(xún)的方法和裝置的制作方法

文檔序號(hào):6755598閱讀:214來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):最長(zhǎng)匹配地址查詢(xún)的方法和裝置的制作方法
技術(shù)領(lǐng)域
因特網(wǎng)是由路由器連接的一組網(wǎng)絡(luò)。路由器維護(hù)表示每個(gè)可能的目的網(wǎng)絡(luò),即接收的數(shù)據(jù)包應(yīng)被轉(zhuǎn)發(fā)到的下一跳的路由表。下一跳可以是另一個(gè)路由器或最終的目的地。
背景技術(shù)
在路由器中的端口接收的網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)包包括一個(gè)IP目的地址。該IP目的地址是該IP數(shù)據(jù)包的最終目的地。目前,存在兩種版本的IP,IP版本4(“IPv4”)和IP版本6(“IPv6”)。IPv4提供包含在用來(lái)存儲(chǔ)IP目的地址的數(shù)據(jù)包中IP首部中的32位字段。根據(jù)存儲(chǔ)在IP首部中的IP目的地址,如果目的地在本地網(wǎng),路由器轉(zhuǎn)發(fā)接收到的與下一跳路由器或最終目的地相連的數(shù)據(jù)包。
一個(gè)32位的IPv4目的地址提供40億個(gè)可能的路由。一個(gè)互連網(wǎng)路由器通常存儲(chǔ)40億個(gè)可能的路由中的5萬(wàn)個(gè)路由。然而,存儲(chǔ)的路由數(shù)量會(huì)隨著互連網(wǎng)的發(fā)展和IPv6的普及而增加。
起初,IP地址空間分為A,B和C三類(lèi)IP地址。每個(gè)IP地址空間分為網(wǎng)絡(luò)地址和主機(jī)地址。A類(lèi)可容納126個(gè)網(wǎng)絡(luò),每個(gè)網(wǎng)絡(luò)可包含16,000,000臺(tái)主機(jī)。B類(lèi)可容納16382個(gè)網(wǎng)絡(luò),每個(gè)網(wǎng)絡(luò)可包含64,000臺(tái)主機(jī),以及C類(lèi)可容納2,000,000個(gè)網(wǎng)絡(luò),每個(gè)網(wǎng)絡(luò)可包含256臺(tái)主機(jī)。然而,將IP地址空間劃分為不同的類(lèi)減少了可用IP地址的數(shù)量。C類(lèi)只允許每個(gè)網(wǎng)絡(luò)最多256臺(tái)主機(jī)對(duì)于大多數(shù)組織來(lái)說(shuō)太少了。因此,大多數(shù)組織分配到一個(gè)B類(lèi)地址,多達(dá)64,000個(gè)主機(jī)地址,這些地址即使該組織用不了也不能由其它組織使用。具有B類(lèi)IP地址的組織的主機(jī)都在16位最高有效位(“MSBs”)中存儲(chǔ)相同的網(wǎng)絡(luò)地址,例如27.32.xx.xx。
引入無(wú)級(jí)域間路由(“CIDR”)以便釋放未使用的IP主機(jī)地址。剩余的未使用網(wǎng)絡(luò)分配給規(guī)模不同的組織。一個(gè)需要500個(gè)地址的組織得到500個(gè)連續(xù)的地址。例如,一個(gè)組織可以分配到以128.32.xx為起始的500個(gè)可用地址。自從引入了無(wú)級(jí)域間路由,增加了存儲(chǔ)在路由器中的路由數(shù)量。無(wú)級(jí)域間路由需要最長(zhǎng)前綴匹配來(lái)尋找相應(yīng)路由來(lái)代替為找到相應(yīng)的IP目的地址的下一跳而尋找匹配的網(wǎng)絡(luò)地址。例如,因?yàn)?28.32.4.xx可能已經(jīng)分配給其它需要不同下一跳的組織,所以在B類(lèi)IP地址的16 MSB,例如128.xx.xx之后,不再停止尋找。
一種用來(lái)查詢(xún)關(guān)鍵字最長(zhǎng)前綴匹配的方法是使用二叉樹(shù)搜索。二叉樹(shù)搜索與輸入的32位逐位匹配到32層,需要32次搜索才能找到與32位關(guān)鍵字匹配的入口。另一種搜索匹配的方法是使用Patricia樹(shù)。如果二叉樹(shù)沒(méi)有入口的葉子,Patricia樹(shù)減少所需的搜索次數(shù)。
Brodnick等人于1998年5月11日提交的題為“快速路由查詢(xún)的方法和系統(tǒng)”,序號(hào)為PCT/SE98/00854的PCT申請(qǐng)中描述了有效地搜索與IP目的地址有關(guān)的下一跳的另一種方法。Brodnick描述的方法通過(guò)不再存儲(chǔ)重復(fù)路由來(lái)減少所存儲(chǔ)的下一跳的數(shù)量。通過(guò)減少下一跳的數(shù)量,減小了對(duì)內(nèi)存的需求,因此路由查詢(xún)表可以存儲(chǔ)在快速超高速緩沖存儲(chǔ)器中。
Brodnick等人將二叉樹(shù)劃分為三層。將二叉樹(shù)劃分為三層使搜索次數(shù)減少到三。第一層中的索引入口表示搜索是否可以利用從入口獲得的路由在第一層結(jié)束,或者該搜索必須利用IP目的地址另外的部分將繼續(xù)到下一層。
圖1A說(shuō)明了表示二叉樹(shù)第一層的現(xiàn)有技術(shù)的64K(65536)位表。64K位表30代表在深度16層的二叉樹(shù)的葉子或節(jié)點(diǎn)44,每個(gè)節(jié)點(diǎn)44對(duì)應(yīng)一位。位表被劃分為長(zhǎng)度為16的位屏蔽。在64K位表中共有212=4096個(gè)位屏蔽。圖1A中顯示了一個(gè)位屏蔽。如果有子樹(shù)或路由索引存儲(chǔ)在與節(jié)點(diǎn)44對(duì)應(yīng)的指針數(shù)組中,則位表30中的一位賦置為“1”。如果該節(jié)點(diǎn)與前一節(jié)點(diǎn)44共享路由入口,則位表30中的一位賦置為“0”。
圖1B說(shuō)明了在超高速緩沖存儲(chǔ)器中實(shí)現(xiàn)查詢(xún)表的當(dāng)前技術(shù)。查詢(xún)表包括碼字?jǐn)?shù)組36,基索引數(shù)組34和映射表40。圖1B中還顯示了32位IP地址38。針對(duì)位表30(圖1A)中的每個(gè)位屏蔽,將碼字46存儲(chǔ)在碼字?jǐn)?shù)組36中。碼字46包括一個(gè)6位的值46a和一個(gè)10位的位移46b。針對(duì)碼字?jǐn)?shù)組36的數(shù)組中的每四個(gè)碼字46,將基索引42存儲(chǔ)在基索引數(shù)組34中。
碼字?jǐn)?shù)組36,基索引數(shù)組34和映射表40用來(lái)在指針數(shù)組(未顯示)中選擇指針。指針存儲(chǔ)一個(gè)路由索引或一個(gè)索引以便執(zhí)行進(jìn)一步的搜索。
通過(guò)在碼字?jǐn)?shù)組36中選擇碼字46和在基索引數(shù)組34中選擇基索引42來(lái)在指針數(shù)組中選擇一組指針。利用IP地址38的前12位50來(lái)選擇碼字46。利用IP地址38的前10位來(lái)選擇基索引42。利用映射表32在一組指針中選擇正確的指針。
所選碼字36中10位的值46b作為到映射表32的索引。映射表32將一個(gè)位屏蔽中的位數(shù)映射到4位的位移。該位移指定在指針數(shù)組中所選的一組指針中的指針。10位的值46b選擇映射表32中的行,并且IP地址52的位1916選擇4位的位移54。
這樣,搜索指針需要下面的超高速緩沖存儲(chǔ)器訪問(wèn)(1)讀取16位碼字46;(2)讀取16位基地址42;(3)從映射表32中讀取4位位移54;(4)從指針?biāo)饕x取指針,其中指針?biāo)饕腔刂?2,碼字位移46a和4位位移54之和。
二叉樹(shù)的每一層需要同樣的存儲(chǔ)器訪問(wèn)。這樣,3層的搜索需要訪問(wèn)存儲(chǔ)器12次。

發(fā)明內(nèi)容
David A.Brown提交的代理案編號(hào)2037.2004-001,題為“長(zhǎng)匹配地址查詢(xún)的方法和裝置”描述了用來(lái)執(zhí)行多層搜索符合關(guān)鍵字的值的查詢(xún)表。能夠存儲(chǔ)在查詢(xún)表中的路由索引的數(shù)量由查詢(xún)表中存儲(chǔ)單元的數(shù)量來(lái)限制。
根據(jù)本發(fā)明的原理,給出包括第一查詢(xún)單元和第二查詢(xún)單元的查詢(xún)表。第一查詢(xún)單元接收關(guān)鍵字并且通過(guò)第一單元中的多層搜索提供第一結(jié)果。第二查詢(xún)單元接收關(guān)鍵字并且通過(guò)第二單元中的多層搜索提供第二結(jié)果。第一查詢(xún)單元和第二查詢(xún)單元二者都并行地接收關(guān)鍵字,但根據(jù)第一結(jié)果和第二結(jié)果,只有一個(gè)單元提供只存儲(chǔ)在一個(gè)查詢(xún)單元中的關(guān)鍵字的最終結(jié)果。
根據(jù)存儲(chǔ)在查詢(xún)表中的最終結(jié)果的總數(shù)將最終結(jié)果分配到表中。關(guān)鍵字可以是IP地址,最終結(jié)果是IP地址的路由索引。
由關(guān)鍵字索引的第一查詢(xún)單元中的第一存儲(chǔ)單元存儲(chǔ)最終結(jié)果,由關(guān)鍵字索引的第二查詢(xún)單元中的第二存儲(chǔ)單元存儲(chǔ)最終結(jié)果存儲(chǔ)在第一查詢(xún)單元的指示。第一查詢(xún)單元和第二查詢(xún)單元都包括多個(gè)映射程序?qū)硬⑶颐恳粋€(gè)映射程序?qū)影ㄓ糜诖鎯?chǔ)結(jié)果的存儲(chǔ)單元。
在一個(gè)實(shí)施例中,把與存儲(chǔ)在第一查詢(xún)單元中的多個(gè)映射程序?qū)拥娜魏我粚又械膯卧械年P(guān)鍵詞對(duì)應(yīng)的最終結(jié)果轉(zhuǎn)發(fā)到第二查詢(xún)單元,并由第一查詢(xún)單元提供。
在另一個(gè)實(shí)施例中,由存儲(chǔ)最終結(jié)果的查詢(xún)單元提供與該關(guān)鍵字對(duì)應(yīng)的最終結(jié)果。


圖1A示出代表二叉樹(shù)第一層的現(xiàn)有技術(shù)的位表;圖1B示出在超高速緩沖存儲(chǔ)器中實(shí)現(xiàn)的現(xiàn)有技術(shù)的查詢(xún)表;圖2A示出根據(jù)本發(fā)明原理的最長(zhǎng)匹配前綴查詢(xún)表;圖2B示出存儲(chǔ)在圖2A所示的查詢(xún)表中的路由索引的二叉樹(shù)表示;圖3示出根據(jù)本發(fā)明原理的40位關(guān)鍵字的最長(zhǎng)匹配前綴查詢(xún)表;圖4示出能夠存儲(chǔ)在圖2A所示的直接映射的映射程序的映射程序入口的類(lèi)型;圖5示出對(duì)應(yīng)圖2B所示的映射程序?qū)? 112b中的節(jié)點(diǎn)的映射程序;圖6A是子樹(shù)的二叉樹(shù)表示;圖6B示出對(duì)應(yīng)圖6A所示的子樹(shù)底層中的節(jié)點(diǎn)的圖5所示的數(shù)據(jù)字段中存儲(chǔ)的密集子樹(shù)描述符。
圖7示出圖5所示的ptr字段;圖8示出圖5所示的映射程序地址邏輯;圖9是說(shuō)明搜索最長(zhǎng)匹配的步驟的流程圖;圖10A示出提供深度擴(kuò)展的實(shí)施例;
圖10B示出圖10A所示的實(shí)施例中的一個(gè)查詢(xún)表;圖10C示出通過(guò)提供深度擴(kuò)展來(lái)增加可用于存儲(chǔ)值的映射程序入口數(shù)量的另一個(gè)實(shí)施例;圖10D示出圖10C所示的實(shí)施例中的副查詢(xún)表;圖11A-B示出在圖10A和10C所示查詢(xún)表中的映射程序入口中圖2B所示路由索引的二叉樹(shù)表示中節(jié)點(diǎn)分配的二叉樹(shù)表示。
圖12是說(shuō)明在圖10A和10C所示的查詢(xún)表中的映射程序入口中分配值的方法的流程圖;圖13是說(shuō)明搜索與圖10C所示的查詢(xún)表中一個(gè)映射程序入口中存儲(chǔ)的搜索關(guān)鍵字對(duì)應(yīng)的值的方法的流程圖;圖14是說(shuō)明搜索與圖10A所示的查詢(xún)表中一個(gè)映射程序入口中存儲(chǔ)的搜索關(guān)鍵字對(duì)應(yīng)的值的方法的流程圖;圖15示出由第一映射程序?qū)铀饕牡诙成涑绦驅(qū)又邢∈枳訕?shù)和密集子樹(shù)的二叉樹(shù)表示;圖16A-C示出在圖5所示子樹(shù)入口和圖4所示子樹(shù)入口中數(shù)據(jù)字段和指針字段的修改以便在子樹(shù)入口中允許存儲(chǔ)多個(gè)稀疏子樹(shù)描述符;圖17示出圖8所示位移邏輯中稀疏模式子樹(shù)邏輯以選擇稀疏居住子樹(shù)中節(jié)點(diǎn)的塊位移;圖18示出圖17中位移邏輯中所示的稀疏模式邏輯;圖19A-D示出在稀疏居住子樹(shù)中為節(jié)點(diǎn)選擇塊位移;圖20是說(shuō)明圖8所示指針邏輯中稀疏模式基本選擇邏輯的方框圖;圖21示出在子樹(shù)存儲(chǔ)器中存儲(chǔ)的密集子樹(shù)描述符和稀疏子樹(shù)描述符;圖22是說(shuō)明向?yàn)橄∈杈幼∽訕?shù)和密集居住子樹(shù)中的節(jié)點(diǎn)存儲(chǔ)路由的子樹(shù)映射程序中的映射程序入口提供映射程序地址的方法的流程圖;圖23示出將要加到查詢(xún)表的新路由的二叉樹(shù)表示;圖24示出更新處理器存儲(chǔ)器中存儲(chǔ)的路由;圖25示出查詢(xún)表中存儲(chǔ)的圖23所示的新路由;圖26是說(shuō)明向圖25所示查詢(xún)表中增加新路由的步驟的流程圖。
本發(fā)明前面所述的及其它目的,特征和優(yōu)點(diǎn)將通過(guò)下面參考本發(fā)明實(shí)施例的具體描述更加顯而易見(jiàn),不同附圖中的相同部分用同一參考符號(hào)表示。附圖不必放大,強(qiáng)調(diào)只起說(shuō)明本發(fā)明原理的作用。
具體實(shí)施例方式
下面描述本發(fā)明的優(yōu)選實(shí)施例。密集模式圖2A示出根據(jù)本發(fā)明原理的最長(zhǎng)匹配前綴查詢(xún)表100。查詢(xún)表100提供對(duì)應(yīng)關(guān)鍵字104的路由索引102。路由索引102用來(lái)訪問(wèn)對(duì)應(yīng)IP目的地址的下一跳。在圖2A所示的實(shí)施例中,關(guān)鍵字104為32位,但是關(guān)鍵字104不必限制在32位。查詢(xún)表100包括3個(gè)映射程序106a-c。每個(gè)映射程序106a-c包括獨(dú)立的地址存儲(chǔ)器。對(duì)應(yīng)關(guān)鍵字104的路由索引102或缺省路由索引存儲(chǔ)在映射程序106a-c之一的一個(gè)單元中。如果需要搜索多個(gè)映射程序,來(lái)自每個(gè)映射程序的映射程序輸出110a-c存儲(chǔ)在延遲存儲(chǔ)器150a-c中,直到所有映射程序106a-c已訪問(wèn)了關(guān)鍵字。
多路復(fù)用器108選擇轉(zhuǎn)發(fā)到多路復(fù)用器108輸入端中的一個(gè)映射程序輸出110a-c作為路由索引102。根據(jù)映射程序輸出110a-c的最高有效位(“MSB”)來(lái)選擇映射程序輸出110a-c。僅當(dāng)映射程序輸出110a-c包括路由索引102時(shí),將映射程序輸出110a-c的MSB置為“1”。
圖2B說(shuō)明了圖2A所示的查詢(xún)表100中映射程序106a-c中存儲(chǔ)的入口的二叉樹(shù)表示。結(jié)合圖2A來(lái)描述圖2B。32位關(guān)鍵字104可以表示為32層二叉樹(shù)。二叉樹(shù)實(shí)現(xiàn)需要32次搜索,以便按位向下搜索到32層。為減少搜索次數(shù),將32層的二叉樹(shù)分為每個(gè)映射程序?qū)?12a-c對(duì)應(yīng)一個(gè)映射程序106a-c(圖2A)的3個(gè)映射程序?qū)?12a-c。映射程序?qū)? 112a包括32層二叉樹(shù)的前16層。然而,為簡(jiǎn)單起見(jiàn),圖2B中只顯示了16層中的5層。映射程序?qū)? 112b包括32層二叉樹(shù)接下來(lái)的8層,圖2B顯示了8層中的3層。映射程序?qū)?包括32層二叉樹(shù)的最后8層,圖1B顯示了8層中的3層。每個(gè)映射程序?qū)?12a-c包括多個(gè)節(jié)點(diǎn)。將32層這樣分配,使映射程序?qū)? 112a中包括16層(關(guān)鍵字104的16MSB),映射程序?qū)? 112b中包括8層以及映射程序?qū)?中包括8層對(duì)當(dāng)前存儲(chǔ)器技術(shù)顯然是最適宜的;然而,本發(fā)明不受這種配置的限制。
取代對(duì)關(guān)鍵字104的前16位進(jìn)行16次分別的逐位搜索,而是將與關(guān)鍵字104的前16位有關(guān)的路由索引102存儲(chǔ)在映射程序106a中(圖2A)。映射程序106a(圖2A)直接由關(guān)鍵字104的前16位MSBs索引。根據(jù)前一個(gè)映射程序106a是否存儲(chǔ)了用于訪問(wèn)與關(guān)鍵字104有關(guān)的下一跳信息的路由索引102來(lái)搜索接下來(lái)的映射程序106b。
如圖2B所示,映射程序?qū)? 112a所示的節(jié)點(diǎn)或葉子包括分別標(biāo)為r0和r1的兩個(gè)路由114,116,以及分別標(biāo)為s0和s1的指向映射程序?qū)? 112b中1304和13023的兩個(gè)指針。對(duì)應(yīng)每個(gè)路由114,116的路由索引102存儲(chǔ)在L1映射程序106a中。另外,為子樹(shù)索引1304存儲(chǔ)L2映射程序106b的地址指針120,為子樹(shù)索引13023存儲(chǔ)L2映射106b的地址指針(未示出)。在映射程序106a中的映射程序入口1404中為子樹(shù)索引1304存儲(chǔ)的地址指針120表示為了尋找與關(guān)鍵字104有關(guān)的路由索引102所需的下一層的搜索。
樹(shù)中任何節(jié)點(diǎn)的值可以通過(guò)跟蹤從根114開(kāi)始的路徑來(lái)確定。所示二叉樹(shù)中的每個(gè)節(jié)點(diǎn)有兩個(gè)子節(jié)點(diǎn),右子節(jié)點(diǎn)和左子節(jié)點(diǎn)。如果父節(jié)點(diǎn)為“1”,選擇右子節(jié)點(diǎn)。如果父節(jié)點(diǎn)為“0”,選擇左子節(jié)點(diǎn)。跟蹤從根114到節(jié)點(diǎn)116的路徑,對(duì)于所有MSB置為“010”的關(guān)鍵字,r1作為路由索引102存儲(chǔ)在L1映射程序106a中。跟蹤從根114到s0節(jié)點(diǎn)1304的路徑,對(duì)于所有MSBs置為“00011”的關(guān)鍵字,s0存儲(chǔ)在L1映射程序106a中。
L1映射106a是直接映射的映射程序并且存儲(chǔ)映射程序?qū)? 112a的底層的每個(gè)底層節(jié)點(diǎn)或葉子的路由索引102。映射程序?qū)? 112a的底層是32層二叉樹(shù)的第16層。第16層有64K個(gè)節(jié)點(diǎn)。但是,為了說(shuō)明的目的,所示映射程序?qū)? 112a的底層作為32層二叉樹(shù)的第五層顯示。L1映射程序106a所示的路由索引102對(duì)應(yīng)映射程序?qū)? 112a的第五層節(jié)點(diǎn)1301-13032。跟蹤從根節(jié)點(diǎn)114到第五層節(jié)點(diǎn)1301,1302,1303的路徑,路由索引102為r0。因此r0存儲(chǔ)在L1映射程序106a的位置1401,1402,1403中;即在索引00000,00001和00010。節(jié)點(diǎn)1304存儲(chǔ)子樹(shù)索引s0,因此s0存儲(chǔ)在L1映射程序106a中地址為00011的位置1404。類(lèi)似地,第五層節(jié)點(diǎn)1305-1308的路由索引102是r0,因此r0存儲(chǔ)在L1映射程序106a中地址為00100,00101,00110和00111的位置1405,1406,1407,1408。對(duì)應(yīng)第五層節(jié)點(diǎn)1309-13012的路由索引102是r1,因此r1存儲(chǔ)在L1映射程序106a中地址為01000和01001的位置1409,14010。
在L1映射程序106a的每個(gè)位置存儲(chǔ)直接分配給第五層節(jié)點(diǎn)3001-30032或通過(guò)第五層節(jié)點(diǎn)3001-32的父節(jié)點(diǎn)分配或指向下一個(gè)映射程序106b-c的地址指針的路由索引102。映射程序?qū)? 106c包括在32層二叉樹(shù)底層的節(jié)點(diǎn)138的主節(jié)點(diǎn)h0和在節(jié)點(diǎn)140的主節(jié)點(diǎn)h1。對(duì)主節(jié)點(diǎn)的搜索需要搜索關(guān)鍵字104的所有位。如圖2A所示,h0的路由索引102存儲(chǔ)在L3映射程序106c中的位置1464中。與L1映射程序106a不同,L2映射程序106b和L3映射程序106c不是直接映射。
在映射程序106b和106c中,不為每個(gè)可能的輸入而存儲(chǔ)路由索引102。僅當(dāng)節(jié)點(diǎn)的路由索引102與映射程序106b-c中存儲(chǔ)的前一個(gè)路由索引102不同時(shí)才存儲(chǔ)路由索引102。請(qǐng)看映射程序?qū)? 112b中所示的第一子樹(shù)A中的第三層節(jié)點(diǎn),節(jié)點(diǎn)1321和節(jié)點(diǎn)1322的路由索引102是r0,因此r0對(duì)應(yīng)的路由索引存儲(chǔ)在L2映射程序106b中的節(jié)點(diǎn)1321和節(jié)點(diǎn)1322對(duì)應(yīng)的位置1421中。節(jié)點(diǎn)1322的子樹(shù)索引存儲(chǔ)在位置1422中。與第三層節(jié)點(diǎn)1324和第三層節(jié)點(diǎn)1325和1326有關(guān)的路由索引102為r0,與存儲(chǔ)前一個(gè)節(jié)點(diǎn)1322的s0不同,r0存儲(chǔ)在L2映射程序106b中的下一個(gè)位置1423。因?yàn)楣?jié)點(diǎn)1327不與前一節(jié)點(diǎn)1326共享同一路由,所以對(duì)應(yīng)節(jié)點(diǎn)1327的路由r2存儲(chǔ)在L2映射程序106b中的位置1424中。為下一個(gè)第三層的節(jié)點(diǎn)1327存儲(chǔ)子樹(shù)索引s3,因此,s3存儲(chǔ)在L2映射程序106b中的位置1425中。由于僅當(dāng)與前一節(jié)點(diǎn)的路由不同時(shí)才存儲(chǔ)路由索引,因此減少了用于存儲(chǔ)路由索引102所需的內(nèi)存。如圖所示,只需要L2映射程序106b中的5個(gè)位置來(lái)存儲(chǔ)映射層2 112b中第一子樹(shù)A的8個(gè)第三層節(jié)點(diǎn)1321-8對(duì)應(yīng)的路由索引。對(duì)于非直接映射106b、106c將在后面結(jié)合圖5詳細(xì)描述。
圖3說(shuō)明了根據(jù)本發(fā)明原理的對(duì)應(yīng)40位關(guān)鍵字210的最長(zhǎng)匹配前綴查詢(xún)表200。在一個(gè)實(shí)施例中,40位關(guān)鍵字包括8位前綴和32位IP地址。8位前綴可以是與32位IP地址有關(guān)的虛擬專(zhuān)用網(wǎng)(“VPN”)的標(biāo)識(shí)符。查詢(xún)表200包括4個(gè)映射程序106a-d。如結(jié)合圖2A所描述過(guò)的,映射程序106a是直接映射的映射程序。映射程序106b-d是間接映射。映射程序106a存儲(chǔ)路由索引102或?qū)?yīng)40位關(guān)鍵字210的16個(gè)MSB的L2映射程序106b的子樹(shù)索引。這樣,L1映射程序具有64K個(gè)可能的位置,第一映射程序?qū)?12a(圖2B)的64K個(gè)節(jié)點(diǎn)中的每一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)位置。存儲(chǔ)在L1映射程序106a中對(duì)應(yīng)位置的L1映射程序入口數(shù)據(jù)220a轉(zhuǎn)發(fā)到管道208和L2間接映射程序106b。如果L1映射程序入口數(shù)據(jù)220a表明下一層的搜索需要利用關(guān)鍵字210b接下來(lái)的8位,那么根據(jù)關(guān)鍵字210b接下來(lái)的8位和L1映射程序入口數(shù)據(jù)220a在L2間接映射程序106b中執(zhí)行搜索。
第二層搜索的結(jié)果提供在轉(zhuǎn)發(fā)到管道208和L3間接映射程序106c的L2映射程序入口數(shù)據(jù)220b上。根據(jù)關(guān)鍵字210c接下來(lái)的8位和L2映射程序入口數(shù)據(jù)220b,在L3間接映射程序106c中執(zhí)行第三層搜索。
搜索結(jié)果提供在轉(zhuǎn)發(fā)到管道208和L4間接映射程序106d的L3映射程序入口數(shù)據(jù)220c上。L3映射程序入口數(shù)據(jù)220c根據(jù)關(guān)鍵字210d的最后8位和L3映射程序入口數(shù)據(jù)220c來(lái)確定是否在L4間接映射程序106d中執(zhí)行第四層搜索。
第四層的搜索結(jié)果提供在L4映射程序入口數(shù)據(jù)220d上。與關(guān)鍵字210的最長(zhǎng)匹配前綴有關(guān)的路由索引102只存儲(chǔ)在映射106a-d其中一個(gè)的一個(gè)位置。因此,轉(zhuǎn)發(fā)到管道208的路由索引102只包含在映射程序入口數(shù)據(jù)220a-d之一中。如果在映射程序106a-d的其中一個(gè)中找到路由索引102,例如在106b中,則不需要對(duì)余下的映射程序106c-d進(jìn)行搜索和訪問(wèn)。管道208包括用來(lái)選擇映射程序入口數(shù)據(jù)220a-d之一中包含的路由索引102的多路復(fù)用器108(圖2A)。例如,映射程序入口數(shù)據(jù)220a-d的MSB能夠提供是否包含路由索引的指示。
通過(guò)將管道208與映射程序106a-d結(jié)合使用,可以并行執(zhí)行對(duì)具有不同關(guān)鍵字210的最長(zhǎng)匹配前綴表200的多重搜索。管道208通過(guò)存儲(chǔ)與40位關(guān)鍵字210有關(guān)的每個(gè)映射程序106a-d的映射程序入口數(shù)據(jù)220a-d,允許并行執(zhí)行40位查詢(xún)表200的多重搜索,直到映射106a-d的每個(gè)搜索都已完成,如果必要,尋找對(duì)應(yīng)40位關(guān)鍵字210的路由索引。因此,對(duì)應(yīng)所接收的IP地址的路由索引的搜索請(qǐng)求通過(guò)對(duì)直接映射的映射程序106a執(zhí)行一次內(nèi)存訪問(wèn)來(lái)發(fā)送給查詢(xún)表200。對(duì)應(yīng)于另一個(gè)關(guān)鍵字的路由索引的后繼搜索可以在直接映射的映射程序106a的下一個(gè)內(nèi)存訪問(wèn)循環(huán)時(shí)發(fā)送給查詢(xún)表200。
圖4說(shuō)明了能夠存儲(chǔ)在圖3所示的直接映射的映射程序106a中的映射程序入口的類(lèi)型。圖2B所示的二叉樹(shù)中任何節(jié)點(diǎn)對(duì)應(yīng)的映射程序入口能夠存儲(chǔ)非入口300,路由入口302或子樹(shù)入口描述符304。映射程序入口300,302,304中每一種類(lèi)型包括一個(gè)子樹(shù)標(biāo)記306。子樹(shù)標(biāo)記306的狀態(tài)表示映射程序入口是否為子樹(shù)入口描述符304。如果子樹(shù)標(biāo)記306置為“1”,映射程序入口是子樹(shù)描述符304并且包括子樹(shù)索引312。子樹(shù)索引312是下一個(gè)非直接映射的映射程序106b-d中存儲(chǔ)的子樹(shù)入口描述符304的地址。子樹(shù)入口將在后面結(jié)合圖4進(jìn)行描述。如果子樹(shù)標(biāo)記306為“0”,將檢查非入口標(biāo)記314來(lái)確定映射程序入口是非入口300還是路由入口302。如果非入口標(biāo)記314是“0”,該入口則是非入口300。如果非入口標(biāo)記314為“1”,該入口則是路由入口302,并且在路由索引字段310存儲(chǔ)中與關(guān)鍵字104有關(guān)的路由索引102(圖3)。多路復(fù)用器108(圖2A)利用子樹(shù)標(biāo)記306來(lái)選擇包括路由索引102(圖3)的映射程序入口數(shù)據(jù)220a-d。
圖5說(shuō)明了對(duì)應(yīng)圖2B所示的映射層2 112b中的節(jié)點(diǎn)的映射程序106b。映射106b包括子樹(shù)內(nèi)存400,映射程序地址邏輯402和子樹(shù)映射程序418。把由存儲(chǔ)在映射程序106a中的關(guān)鍵字210a的第一部分選擇的子樹(shù)索引312轉(zhuǎn)發(fā)到子樹(shù)內(nèi)存400。子樹(shù)內(nèi)存400包括由子樹(shù)索引312選擇的子樹(shù)入口404。子樹(shù)入口404包括數(shù)據(jù)字段406和指針字段408。
返回圖2B,子樹(shù)入口404對(duì)應(yīng)映射程序?qū)? 112b所示的一個(gè)子樹(shù)的底層。如果映射程序?qū)? 112b有8層,每個(gè)子樹(shù)(未示出)的底層具有最多256條路由,每個(gè)節(jié)點(diǎn)一個(gè)路由。
繼續(xù)到圖5,子樹(shù)入口404提供對(duì)與子樹(shù)底層上的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的256個(gè)可能的路由索引102(圖3)的訪問(wèn)。路由索引102(圖3)存儲(chǔ)在子樹(shù)映射程序418中。為提供對(duì)256個(gè)可能的路由索引的訪問(wèn),密集子樹(shù)描述符存儲(chǔ)在數(shù)據(jù)字段406中。數(shù)據(jù)字段406有256位寬,為在子樹(shù)底層的每個(gè)節(jié)點(diǎn)提供一位。數(shù)據(jù)字段將在后面結(jié)合圖6A和圖6B詳細(xì)描述。指針字段408有256位寬,允許存儲(chǔ)16個(gè)16位指針,每個(gè)指針存儲(chǔ)子樹(shù)映射程序418中16個(gè)相鄰映射程序入口的基地址,以便提供對(duì)256個(gè)路由索引的訪問(wèn)。因此,指針字段408可以為子樹(shù)底層中的每個(gè)節(jié)點(diǎn)間接地提供到子樹(shù)映射程序418中的映射程序入口的指針。將結(jié)合圖6詳細(xì)描述指針字段408。
把存儲(chǔ)在數(shù)據(jù)字段406的密集子樹(shù)描述符中的子樹(shù)數(shù)據(jù)412和存儲(chǔ)在指針字段408中的子樹(shù)指針414轉(zhuǎn)發(fā)到映射程序地址邏輯402。映射程序地址邏輯402還接收關(guān)鍵字210b的下一部分(接下來(lái)的8位)。
映射程序地址邏輯402根據(jù)與子樹(shù)有關(guān)的關(guān)鍵字212b接下來(lái)的8位,子樹(shù)數(shù)據(jù)412和子樹(shù)指針414來(lái)確定與子樹(shù)底層中的節(jié)點(diǎn)有關(guān)的映射程序入口的映射程序地址416。映射程序地址416在子樹(shù)映射程序418中選擇映射程序入口。子樹(shù)映射程序418包括直接映射的映射程序106a的與結(jié)合圖4所述類(lèi)型相同的映射程序入口。映射程序數(shù)據(jù)入口220b的內(nèi)容確定是否需要后繼搜索。如果映射程序入口數(shù)據(jù)220b包括表明在下一個(gè)映射層112c(圖2B)還有另一個(gè)子樹(shù)入口404的子樹(shù)索引312(圖4),則需要后繼搜索。
關(guān)鍵字210b的第二部分選擇所選子樹(shù)底層中的節(jié)點(diǎn)。子樹(shù)指針414選擇與子樹(shù)中的節(jié)點(diǎn)有關(guān)的基地址,子樹(shù)數(shù)據(jù)412選擇與基地址有關(guān)的映射入口模塊中的位移。映射程序地址邏輯402將結(jié)合圖7在后面描述。
圖6A是子樹(shù)的二叉樹(shù)表示。所示子樹(shù)包括5層。該子樹(shù)包括三個(gè)路由索引r1,r2和r3以及兩個(gè)子樹(shù)索引s0和s1。子樹(shù)底層上有32個(gè)節(jié)點(diǎn)5001-50032。下面的表1顯示了與底層中的每個(gè)節(jié)點(diǎn)5001-50032有關(guān)的路由索引或子樹(shù)索引。
子樹(shù)位 路由/子樹(shù)00000 r000001 r000010 r000011 r000100 r100101 r100110 r000111 r001000 r201001 s001010 r201011 r201100 r201110 r201111 r21xxxx r3表1圖6說(shuō)明了對(duì)應(yīng)圖6A所示的子樹(shù)底層中的節(jié)點(diǎn)的圖5所示的數(shù)據(jù)字段406中存儲(chǔ)的密集子樹(shù)描述符。數(shù)據(jù)字段406包括32位,圖6A所示的子樹(shù)底層中的每個(gè)節(jié)點(diǎn)500對(duì)應(yīng)一位。位5021-50232在數(shù)據(jù)字段406中是這樣分配的如果要使用前一個(gè)節(jié)點(diǎn)的路由索引,那么數(shù)據(jù)字段中的一位設(shè)定為‘0’,如果使用存儲(chǔ)在子樹(shù)映射程序418(圖5)中的下一個(gè)路由索引,那么設(shè)定‘1’遞增到下一個(gè)映射入口地址。除非指定了路由,否則數(shù)據(jù)字段402中的第一位選擇存儲(chǔ)在映射程序入口5041中的缺省路由r0。這樣,由于沒(méi)有指定的路由,把位5021設(shè)定為‘0’來(lái)選擇缺省路由。為接下來(lái)三個(gè)節(jié)點(diǎn)5002-5004選擇映射程序入口5041中存儲(chǔ)的缺省路由r0,因此,在數(shù)據(jù)字段406中的對(duì)應(yīng)位5022-5024被設(shè)定為“0”,以使用5021使用的前一個(gè)路由索引。在節(jié)點(diǎn)5005存在路由改變。
節(jié)點(diǎn)5006共享用于映射程序入口5042中存儲(chǔ)的節(jié)點(diǎn)5005的路由r1。因此位5025是‘1’表示路由改變,以便在子樹(shù)映射程序418(圖5)中選擇映射程序入口5042。位5026是‘0’表示把5025中存儲(chǔ)的路由索引用于該節(jié)點(diǎn)。不為節(jié)點(diǎn)5007提供路由,因此,存在著路由變化,并且在位5027中存儲(chǔ)‘1’來(lái)表示需要在子樹(shù)映射程序418(圖5)中的映射程序入口5043存儲(chǔ)缺省路由r0。
節(jié)點(diǎn)5008與前一個(gè)節(jié)點(diǎn)5007共享同一個(gè)路由,在子樹(shù)映射程序418(圖5)中不需要新的映射程序入口。對(duì)應(yīng)節(jié)點(diǎn)5008的位5028設(shè)定為“0”。節(jié)點(diǎn)5009與前一個(gè)節(jié)點(diǎn)5008具有不同的路由,因此在子樹(shù)映射程序418(圖5)中需要新的映射程序入口。對(duì)應(yīng)節(jié)點(diǎn)5009的位5029設(shè)定為“1”,并且將存儲(chǔ)r2的映射程序入口5044添加到下一個(gè)相鄰存儲(chǔ)單元中的子樹(shù)映射程序418(圖5)。
節(jié)點(diǎn)50010與前一個(gè)節(jié)點(diǎn)5009具有不同的路由,在子樹(shù)映射程序418(圖5)中需要新的路由入口。對(duì)應(yīng)節(jié)點(diǎn)50010的位50210設(shè)定為“1”,并且將存儲(chǔ)s0的映射程序入口5045添加到下一個(gè)相鄰存儲(chǔ)單元中的子樹(shù)映射程序418(圖5)。
節(jié)點(diǎn)50011與前一個(gè)節(jié)點(diǎn)50010具有不同的路由,在子樹(shù)映射程序418(圖5)中需要新的映射程序入口。對(duì)應(yīng)節(jié)點(diǎn)50011的位50211設(shè)定為“1”,并且將存儲(chǔ)r2的映射程序入口5046添加到下一個(gè)相鄰存儲(chǔ)單元中的子樹(shù)映射程序418(圖5)。
節(jié)點(diǎn)50012和50013共享與前一個(gè)節(jié)點(diǎn)50011相同的路由,在子樹(shù)映射程序418(圖5)中不需要新的映射程序入口。在數(shù)據(jù)字段406中把對(duì)應(yīng)于節(jié)點(diǎn)50012的位50212和對(duì)應(yīng)于節(jié)點(diǎn)50013的位50213設(shè)定為‘0’。
節(jié)點(diǎn)50014與前一個(gè)節(jié)點(diǎn)50013具有不同的路由,在子樹(shù)映射程序418(圖5)中需要新的映射程序入口。數(shù)據(jù)字段406中對(duì)應(yīng)節(jié)點(diǎn)50014的位50214設(shè)定為‘1’,并且把存儲(chǔ)s1的映射程序入口5047添加到下一個(gè)相鄰存儲(chǔ)單元中的子樹(shù)映射程序418(圖5)。節(jié)點(diǎn)50015與前一個(gè)節(jié)點(diǎn)50014具有不同的路由,在子樹(shù)映射程序418(圖5)中需要新的映射程序入口。數(shù)據(jù)字段406中對(duì)應(yīng)節(jié)點(diǎn)50015的位50215設(shè)定為‘1’,并且將存儲(chǔ)r2的映射程序入口5048添加到下一個(gè)相鄰存儲(chǔ)單元中的子樹(shù)映射程序418(圖5)。節(jié)點(diǎn)50016與前一個(gè)節(jié)點(diǎn)50015共享同一個(gè)路由,在子樹(shù)映射程序418(圖5)中不需要新的映射程序入口。
節(jié)點(diǎn)50017與前一個(gè)節(jié)點(diǎn)50016具有不同的路由,在子樹(shù)映射程序418(圖5)中需要新的映射程序入口。將數(shù)據(jù)字段406中對(duì)應(yīng)節(jié)點(diǎn)50017的位50217設(shè)定為‘1’,并且將存儲(chǔ)r3的映射程序入口5049添加到下一個(gè)相鄰存儲(chǔ)單元中的子樹(shù)映射418(圖5)。
節(jié)點(diǎn)50018-50032全部與前一個(gè)節(jié)點(diǎn)50017共享相同的路由,在子樹(shù)映射程序418(圖5)中不需要新的映射程序入口。將對(duì)應(yīng)的位50218-50232設(shè)定為‘0’。這樣就需要9個(gè)映射程序入口5041-9來(lái)存儲(chǔ)32個(gè)節(jié)點(diǎn)5001-50032的路由入口302(圖4)或子樹(shù)入口304(圖4)。
通過(guò)計(jì)算在數(shù)據(jù)字段406中存儲(chǔ)的密集子樹(shù)描述符中存儲(chǔ)的‘1’的數(shù)量在子樹(shù)映射程序418(圖5)中索引與節(jié)點(diǎn)5001-50032對(duì)應(yīng)的映射程序入口5041-5049。例如,為尋找對(duì)應(yīng)節(jié)點(diǎn)50028的映射程序入口5041-5049,計(jì)算數(shù)據(jù)字段406的位5021-50228中存儲(chǔ)‘1’的數(shù)量?!?’的數(shù)量是8,并且對(duì)應(yīng)的映射程序入口是從缺省路由開(kāi)始的第八個(gè)位置,即映射程序入口5049。
僅當(dāng)路由發(fā)生變化時(shí)才存儲(chǔ)映射程序入口的方法減少了子樹(shù)映射程序418(圖5)中每個(gè)子樹(shù)映射程序入口5041-5049的數(shù)量。
圖7說(shuō)明了圖5所示的指針字段408。指針字段408包括用于存儲(chǔ)子樹(shù)映射程序418(圖5)中幾組16個(gè)相鄰映射程序入口位置5041-50416組(圖6B)的基地址的塊基地址字段6001,6002。在16個(gè)相鄰映射程序入口的組6021,6022的子樹(shù)映射程序418(圖5)中分配內(nèi)存。8層的子樹(shù)可以具有多達(dá)256個(gè)不同路由,需要16個(gè)組6021,6022來(lái)存儲(chǔ)所有256個(gè)路由。根據(jù)子樹(shù)的路由數(shù)量來(lái)確定所需組602的數(shù)量。通過(guò)從塊基地址的空閑列表中(未顯示)刪除塊基地址6021,6022來(lái)將組602分配給特定的子樹(shù)。為內(nèi)存提供地址空閑列表的方法是已知的技術(shù)。
通過(guò)分配16個(gè)映射程序入口5041-16的內(nèi)存塊,由于所分配的16個(gè)位置是相鄰的,所以子樹(shù)映射程序418(圖5)中的內(nèi)存易于管理。
圖8說(shuō)明了圖5所示的映射程序地址邏輯402。映射程序地址邏輯402包括位移邏輯700,指針邏輯702和加法器邏輯704。位移邏輯700包括節(jié)點(diǎn)選擇邏輯706和“1”計(jì)數(shù)邏輯708。指針邏輯包括基地址選擇邏輯710。
節(jié)點(diǎn)選擇邏輯706選擇在子樹(shù)數(shù)據(jù)412中對(duì)應(yīng)8位關(guān)鍵字210b的節(jié)點(diǎn)500(圖6B)。相應(yīng)的節(jié)點(diǎn)數(shù)通過(guò)節(jié)點(diǎn)選擇718轉(zhuǎn)發(fā)到‘1’計(jì)數(shù)邏輯708。‘1’計(jì)數(shù)邏輯708累計(jì)子樹(shù)數(shù)據(jù)字段406中存儲(chǔ)的‘1’的數(shù)量,直到與所選節(jié)點(diǎn)500對(duì)應(yīng)的位。‘1’的數(shù)量通過(guò)塊選擇712轉(zhuǎn)發(fā)到指針邏輯702并且通過(guò)塊位移714轉(zhuǎn)發(fā)到加法器邏輯704。
需要8位寬的計(jì)數(shù)字段的256位子樹(shù)數(shù)據(jù)字段406中最大可存儲(chǔ)256個(gè)“1”。8位計(jì)數(shù)字段分為兩個(gè)字段,提供塊選擇712的4個(gè)MSB和提供塊位移714的4個(gè)最低有效位(“LSB”)。
例如,如果8位的關(guān)鍵字210b為‘01000100’,為選擇節(jié)點(diǎn)數(shù)68并且共有27個(gè)“1”存儲(chǔ)在子樹(shù)數(shù)據(jù)42的前68位,計(jì)數(shù)結(jié)果為IC Hex(0001 1100),MSB(0001);即塊選擇714選擇塊6021(圖6)和LSB(1100);即基塊位移選擇映射程序入口50411(圖6),即塊5021中的第12個(gè)入口。
基地址選擇邏輯710根據(jù)從位移邏輯700轉(zhuǎn)發(fā)的塊選擇712從子樹(shù)指針414中選擇基地址716。加法器邏輯704將從位移邏輯700轉(zhuǎn)發(fā)的塊位移714累加到基地址716,并且提供映射程序地址416。映射程序地址416是映射程序106b-d中映射程序入口504(圖6B)的索引。
圖9是根據(jù)本發(fā)明原理用于在查詢(xún)表200中搜索關(guān)鍵字210(圖3)的最長(zhǎng)匹配前綴的步驟的流程圖。
在步驟800中,把關(guān)鍵字210a(圖3)的第一部分作為索引轉(zhuǎn)發(fā)到映射程序106a。處理過(guò)程繼續(xù)到步驟802。
在步驟802中,由關(guān)鍵字210a(圖3)的第一部分索引的第一層映射程序中的映射程序入口504(圖6B)中存儲(chǔ)的映射程序入口數(shù)據(jù)220a(圖3)確定是否需要繼續(xù)對(duì)下一層進(jìn)行搜索。如果需要,處理過(guò)程繼續(xù)到步驟804。否則,第一層映射程序中索引的映射程序入口504(圖6B)中的路由入口302(圖4)存儲(chǔ)該關(guān)鍵字的最長(zhǎng)前綴路由并且處理過(guò)程繼續(xù)到步驟808。
在步驟804,搜索下一層映射程序106b-d。下一層映射程序的索引取決于前一層映射程序中索引的映射程序入口504(圖6B)中子樹(shù)入口描述符304(圖4)中存儲(chǔ)的子樹(shù)索引312和關(guān)鍵字210b-d的下一部分。處理過(guò)程繼續(xù)到步驟806。
在步驟806中,下一層映射程序中的索引映射程序入口504(圖6B)存儲(chǔ)該關(guān)鍵字對(duì)應(yīng)的最長(zhǎng)前綴路由索引或表示需要進(jìn)一步搜索的子樹(shù)索引。如果需要進(jìn)一步搜索,處理過(guò)程繼續(xù)到步驟804。否則,處理過(guò)程繼續(xù)到步驟808。
在步驟808,把映射程序106a-d之一中的一個(gè)映射程序入口504(圖6B)中存儲(chǔ)的路由索引102(圖3)作為路由索引102(圖3)從查詢(xún)表200轉(zhuǎn)發(fā)。處理過(guò)程結(jié)束。深度擴(kuò)展能夠存儲(chǔ)在圖3所示查詢(xún)表200中的路由索引102(圖3)的數(shù)量受子樹(shù)映射程序418(圖5)中可用映射程序入口504(圖6B)的數(shù)量的限制。例如,如果每個(gè)子樹(shù)映射程序418(圖5)包括128K個(gè)映射程序入口并且在查詢(xún)表中有兩個(gè)子樹(shù)映射程序418(圖5),那么查詢(xún)表200中最多可以存儲(chǔ)256K個(gè)路由索引102(圖3)。具有128K個(gè)映射程序入口的子樹(shù)映射程序418(圖5)需要一個(gè)17位的索引。具有512K個(gè)映射程序入口的子樹(shù)映射程序418(圖5)需要一個(gè)19位的索引。查詢(xún)表200中2個(gè)512K的子樹(shù)映射程序418(圖5)為32位IPv4目的地址的40億個(gè)可能的路由索引102(圖3)中1百萬(wàn)個(gè)提供了存儲(chǔ)空間。
通過(guò)提供多個(gè)查詢(xún)表200可以增加用于存儲(chǔ)路由索引102(圖3)的映射程序入口504(圖6B)的數(shù)量。可以在多個(gè)查詢(xún)表中并行地搜索與查詢(xún)表200之一中的子樹(shù)映射程序418(圖5)中的映射程序入口504(圖6B)中存儲(chǔ)的搜索關(guān)鍵字對(duì)應(yīng)的值。
圖10A說(shuō)明了深度擴(kuò)展的實(shí)施例。示出兩個(gè)查詢(xún)表,一個(gè)為主查詢(xún)表200a,另一個(gè)為副查詢(xún)表200b。但是,查詢(xún)表的數(shù)量不只限于所示的兩個(gè),可以增加一個(gè)以上的副查詢(xún)表200b。
以相同的搜索關(guān)鍵字210并行搜索查詢(xún)表200a-d中的每一個(gè)。對(duì)應(yīng)于搜索關(guān)鍵字210的路由索引102(圖3)存儲(chǔ)在查詢(xún)表200a-d之一中的子樹(shù)映射程序418(圖5)中,或查詢(xún)表200a和200b二者中的直接映射程序106a中。在完成對(duì)查詢(xún)表200a和200b的并行搜索后,找到最終路由索引900。
圖10B說(shuō)明了圖10A所示實(shí)施例中的查詢(xún)表200a中的一個(gè)。查詢(xún)表200a-b中的每一個(gè)包括映射程序106a-d和已經(jīng)結(jié)合圖3針對(duì)查詢(xún)表200描述過(guò)的管道208,以及驅(qū)動(dòng)器邏輯902。查詢(xún)表200a為與搜索關(guān)鍵字對(duì)應(yīng)的路由索引在映射程序106a-d中執(zhí)行多層搜索。每一層的搜索結(jié)果通過(guò)映射程序入口數(shù)據(jù)220a-d轉(zhuǎn)發(fā)到管道208。管道208再將搜索結(jié)果904轉(zhuǎn)發(fā)到驅(qū)動(dòng)器邏輯902。每個(gè)查詢(xún)表200a-b中映射程序106a中的映射程序入口504(圖6B)存儲(chǔ)子樹(shù)入口304(圖4),但只有主查詢(xún)表200a的映射程序106a存儲(chǔ)路由入口302(圖4)。副查詢(xún)表200b中映射程序106a中的映射程序入口504(圖6B)代替路由入口302存儲(chǔ)非入口300(圖4)。將映射程序106a中的路由索引集中在一個(gè)查詢(xún)表避免了為提供最終路由索引900的查詢(xún)表的選擇過(guò)程。這導(dǎo)致了副查詢(xún)表200b中不能用于存儲(chǔ)路由索引而只允許存儲(chǔ)相同查詢(xún)表的64K內(nèi)存配置成主查詢(xún)表或結(jié)合圖3所述的副查詢(xún)表。在另一個(gè)實(shí)施例中,可以提供沒(méi)有映射程序106a的副查詢(xún)?cè)O(shè)備。如果路由索引102(圖3)存儲(chǔ)在映射程序106a中的路由入口302(圖4),那么搜索在主查詢(xún)表200a中的映射程序106a中結(jié)束。
如圖10A所示,主查詢(xún)表200a和副查詢(xún)表200b共享最終路由索引900。存儲(chǔ)了最終路由索引900的查詢(xún)表200a,200b提供路由索引102(圖3)。如果每個(gè)查詢(xún)表200a,200b是獨(dú)立的設(shè)備,共享最終路由索引900減小了每個(gè)設(shè)備的外部引腳數(shù)量。只有查詢(xún)表200a,200b中的一個(gè)隨時(shí)驅(qū)動(dòng)最終路由索引。
為避免兩個(gè)查詢(xún)表200a,200b中存儲(chǔ)與搜索關(guān)鍵字210有關(guān)的路由索引而會(huì)使兩個(gè)查詢(xún)表同時(shí)驅(qū)動(dòng)最終路由索引900的錯(cuò)誤狀態(tài),每個(gè)查詢(xún)表200a,200b存儲(chǔ)一個(gè)設(shè)備代碼。3位的設(shè)備代碼允許擴(kuò)展的查詢(xún)表包括8個(gè)設(shè)備。
驅(qū)動(dòng)器邏輯902確定搜索結(jié)果904是否包括路由索引102(圖3)。如果包括,查詢(xún)表200a中的驅(qū)動(dòng)器邏輯902發(fā)出試圖通過(guò)總線請(qǐng)求信號(hào)(未示出)驅(qū)動(dòng)最終路由索引900的信號(hào)。如果兩個(gè)或更多的查詢(xún)表200a,200b同時(shí)發(fā)出試圖驅(qū)動(dòng)路由索引信號(hào)的信號(hào),那么由具有最低設(shè)備代碼的查詢(xún)表200a,200b中提供路由索引。通過(guò)使用總線請(qǐng)求信號(hào)來(lái)解決總線沖突的方法是熟知的技術(shù)。
圖10C說(shuō)明了用來(lái)提供深度擴(kuò)展以增加可用于存儲(chǔ)與搜索關(guān)鍵字210對(duì)應(yīng)的值的映射程序入口數(shù)量的另一個(gè)實(shí)施例。在圖10C所示的實(shí)施例中,提供兩個(gè)查詢(xún)表200c-d來(lái)存儲(chǔ)值,主表200c和副表200d。但是查詢(xún)表的數(shù)量不只限于所示的兩個(gè),可以通過(guò)加入更多的副表200d來(lái)增加映射程序入口的數(shù)量。在查詢(xún)表200c-d中并行執(zhí)行對(duì)與搜索關(guān)鍵字[390]210對(duì)應(yīng)的查詢(xún)表200c-d之一中的映射程序入口中所存儲(chǔ)的值的搜索。
圖10D說(shuō)明了圖10C所示的實(shí)施例中的副表200d。每個(gè)查詢(xún)表包括結(jié)合圖3針對(duì)查詢(xún)表200描述的映射程序106a-d。每個(gè)查詢(xún)表200c-d中映射程序106a中的映射程序入口存儲(chǔ)子樹(shù)入口304(圖4)。每個(gè)查詢(xún)表200c-d將映射程序106a中映射程序入口504(圖6B)里存儲(chǔ)的子樹(shù)入口描述符304(圖4)中存儲(chǔ)的子樹(shù)索引312轉(zhuǎn)發(fā)到下一個(gè)映射程序106b-d。但是,路由索引102(圖3)只存儲(chǔ)在主查詢(xún)表200c的映射程序106a中。無(wú)入口存儲(chǔ)在副查詢(xún)表200d中的映射程序106a中以避免在一個(gè)以上的查詢(xún)表200b,200d中存儲(chǔ)與該關(guān)鍵字對(duì)應(yīng)的路由索引。
副查詢(xún)表200d中的多層搜索結(jié)果904轉(zhuǎn)發(fā)到最終索引邏輯1004。最終索引邏輯1004將多層搜索結(jié)果904或從主查詢(xún)表200c轉(zhuǎn)發(fā)來(lái)的輸入結(jié)果1000a作為輸出結(jié)果1002a轉(zhuǎn)發(fā)。如果路由索引102(圖3)包括在多層搜索結(jié)果904中,那么將多層搜索的結(jié)果作為輸出結(jié)果1002a轉(zhuǎn)發(fā)。如果路由索引102(圖3)包括在輸入結(jié)果1000a中,那么將輸入結(jié)果1000a作為輸出結(jié)果1002a轉(zhuǎn)發(fā)。如果路由索引102(圖3)既不包括在輸入結(jié)果1000a,也不包括在多層搜索結(jié)果904中,那么將多層搜索結(jié)果904作為輸出結(jié)果1002a轉(zhuǎn)發(fā)。
如圖10C所示,主查詢(xún)表200c和副查詢(xún)表200d通過(guò)標(biāo)有輸入結(jié)果1000a的公共總線相連。路由索引102(圖3)只通過(guò)輸出結(jié)果1002a從副查詢(xún)表200d轉(zhuǎn)發(fā)。如果有一個(gè)以上的副查詢(xún)表200d,最后一個(gè)副查詢(xún)表提供擴(kuò)展查詢(xún)表的路由索引102(圖3)。本實(shí)施例可以避免實(shí)現(xiàn)結(jié)合圖10A所述的多驅(qū)動(dòng)器最終路由索引900的出現(xiàn),但需要更多用于輸入結(jié)果1000a的設(shè)備外部引腳。
圖11A-B說(shuō)明了在查詢(xún)表200a-b(圖10A)或200c-d(圖10C)中分配圖2B所示路由的二叉樹(shù)表示。
圖11A說(shuō)明了主查詢(xún)表200a(圖10A)或200c(圖10C)中存儲(chǔ)的路由的二叉樹(shù)表示。主查詢(xún)表200a中不包括圖2B所示路由的二叉樹(shù)表示中所示的子樹(shù)B。節(jié)點(diǎn)1301-13022和13024-32在結(jié)合圖3所述的查詢(xún)表200a中的映射程序106a中編碼。如果存儲(chǔ)在主查詢(xún)表200a中,那么在那里索引子樹(shù)B的節(jié)點(diǎn)用“X”圖形化地表示為已修剪子樹(shù)。在主查詢(xún)表200a中對(duì)應(yīng)節(jié)點(diǎn)13023的映射程序入口504(圖6B)不再存儲(chǔ)指向子樹(shù)B的子樹(shù)索引312(圖4)。取而代之的是非入口300(圖4)存儲(chǔ)在主查詢(xún)表200a中對(duì)應(yīng)節(jié)點(diǎn)13023的映射程序入口504(圖6B)中,以表示對(duì)應(yīng)節(jié)點(diǎn)13023的映射程序入口存儲(chǔ)在另一個(gè)副查詢(xún)表200b的子樹(shù)映射程序418(圖5)中。
圖11B說(shuō)明了存儲(chǔ)在副查詢(xún)表200b(圖10A)或200d(圖10C)中子樹(shù)映射程序418(圖5)中的映射程序入口504(圖6B)的路由的二叉樹(shù)表示。與圖2B所示二叉樹(shù)表示不同,存儲(chǔ)在副查詢(xún)表200b中的路由的二叉樹(shù)表示不包括子樹(shù)A。因此,節(jié)點(diǎn)1301-1303和1305-13032以如結(jié)合圖2B所述的那樣進(jìn)行編碼。對(duì)應(yīng)副查詢(xún)表200b中節(jié)點(diǎn)1304的映射程序入口504(圖6B)不再存儲(chǔ)指向子樹(shù)A的子樹(shù)索引312(圖4)。取而代之的是對(duì)應(yīng)副查詢(xún)表200b中節(jié)點(diǎn)1304的映射程序入口存儲(chǔ)非入口300(圖4)以表示對(duì)應(yīng)節(jié)點(diǎn)1304的映射程序入口存儲(chǔ)在另一個(gè)查詢(xún)表中。子樹(shù)A對(duì)應(yīng)的子樹(shù)索引和主機(jī)138(圖11A)對(duì)應(yīng)的路由索引存儲(chǔ)在主查詢(xún)表200a中,并且子樹(shù)B對(duì)應(yīng)的子樹(shù)索引和主機(jī)140(圖11A)對(duì)應(yīng)的路由索引存儲(chǔ)在副查詢(xún)表200b中。副查詢(xún)表200b,200d只存儲(chǔ)子樹(shù)的結(jié)果;就是說(shuō),副查詢(xún)表200b,200d不存儲(chǔ)第一層映射程序106a中的結(jié)果。
參考圖11A和圖11B,利用關(guān)鍵字210a的第一部分對(duì)主映射程序?qū)? 1102a(圖3)或副映射程序?qū)? 1104a中任何節(jié)點(diǎn)1309-13012的搜索產(chǎn)生了主查詢(xún)表200a,200c中映射程序106a中映射程序入口504(圖6B)中路由入口302(圖4)中存儲(chǔ)的r1 116以及副查詢(xún)表200b,200d中映射程序106a中映射程序入口504(圖6B)中存儲(chǔ)的非入口300(圖4)。主查詢(xún)表200a,200c中存儲(chǔ)的路由入口302(圖4)通過(guò)輸入結(jié)果1000a轉(zhuǎn)發(fā)到副查詢(xún)表200b,200d并且通過(guò)輸出結(jié)果1002a由副查詢(xún)表200b,200d轉(zhuǎn)發(fā)。
利用關(guān)鍵字210a的第一部分對(duì)節(jié)點(diǎn)1304的搜索產(chǎn)生了主查詢(xún)表200a中映射程序106a的映射程序入口504(圖6B)中子樹(shù)入口描述符304(圖4)中存儲(chǔ)的子樹(shù)A的子樹(shù)索引312(圖4)。子樹(shù)索引312轉(zhuǎn)發(fā)到主查詢(xún)表200a中的映射程序106b來(lái)繼續(xù)對(duì)主查詢(xún)表200a中存儲(chǔ)的路由入口302(圖4)進(jìn)行搜索。
利用關(guān)鍵字210的第一部分對(duì)節(jié)點(diǎn)13023的搜索產(chǎn)生主查詢(xún)表200a中映射程序106a的映射程序入口504(圖6B)中存儲(chǔ)的非入口300(圖4)以及副查詢(xún)表200b中映射程序106a的映射程序入口504(圖6B)中存儲(chǔ)子的樹(shù)入口描述符304(圖4)。因此,繼續(xù)利用關(guān)鍵字210b的下一部分在副查詢(xún)表200b的映射程序106b中搜索路由入口302(圖4)。
圖12是說(shuō)明圖10A所示查詢(xún)表200a-b中映射程序入口504(圖6B)中存儲(chǔ)的路由入口302(圖4)的分配方法的流程圖。同樣的方法用于圖10C所示的查詢(xún)表200c-d。在查詢(xún)表200a-b中存儲(chǔ)之前,最初由處理器(未示出)在存儲(chǔ)器中存儲(chǔ)映射程序入口中要存儲(chǔ)的路由入口302(圖4)。
當(dāng)路由入口302(圖4)存儲(chǔ)在存儲(chǔ)器中時(shí),計(jì)算每個(gè)查詢(xún)表200a-b(圖10A)中要存儲(chǔ)的路由入口302(圖4)的數(shù)量。映射程序?qū)? 1104a(圖11B)的路由入口302(圖4)存儲(chǔ)在查詢(xún)表200a的映射程序106a中。映射程序?qū)? 1104a(圖11B)的子樹(shù)入口304(圖4)存儲(chǔ)在每個(gè)查詢(xún)表200a-200b的映射程序106a中。
在步驟1200中,為確定如何在查詢(xún)表200a-b(圖10A)中分配路由入口302(圖4),需要計(jì)算每個(gè)查詢(xún)表200a-200b(圖10A)中映射程序106a的每個(gè)子樹(shù)入口304(圖4)中要存儲(chǔ)的路由入口302(圖4)的數(shù)量。當(dāng)確定了存儲(chǔ)路由入口302(圖4)所需的映射程序入口504(圖6B)的總數(shù)之后,處理過(guò)程繼續(xù)到步驟1202。
在步驟1202中,將要存儲(chǔ)的子樹(shù)的映射程序入口504(圖6B)的總數(shù)除以查詢(xún)表200a-b(圖10A)的數(shù)量以確定存儲(chǔ)在每個(gè)查詢(xún)表200a-b(圖10A)中的路由入口302(圖4)的數(shù)量。處理過(guò)程繼續(xù)到步驟1204。
在步驟1204中,在所選查詢(xún)表200a-b中子樹(shù)映射程序418(圖5)的映射程序入口504(圖6B)中存儲(chǔ)路由入口302(圖4)。處理過(guò)程繼續(xù)到步驟1206。
在步驟1206中,如果在所選查詢(xún)表200a-b中子樹(shù)映射程序418(圖5)的映射程序入口504(圖6B)中存儲(chǔ)的路由入口的數(shù)量小于1/n,其中n表示可用查詢(xún)表200a-b(圖10A)的數(shù)量,那么處理過(guò)程繼續(xù)到步驟1024。否則,所選查詢(xún)表200a-b已經(jīng)存儲(chǔ)了映射程序入口總數(shù)的1/n,并且處理過(guò)程繼續(xù)到步驟1208。
在步驟1208中,所選查詢(xún)表200a-b存儲(chǔ)映射程序入口總數(shù)的1/n,因?yàn)橄鄳?yīng)子樹(shù)的路由索引不存儲(chǔ)在當(dāng)前所選的查詢(xún)表中,所以任何剩余子樹(shù)節(jié)點(diǎn)的非入口300(圖4)存儲(chǔ)在所選擇的查詢(xún)表200a-b中。處理過(guò)程繼續(xù)到步驟1210。
在步驟1210中,如果已經(jīng)存儲(chǔ)了全部路由入口,處理過(guò)程結(jié)束。否則,處理過(guò)程繼續(xù)到步驟1212。
在步驟1212中,選擇下一個(gè)查詢(xún)表200a-b(圖10A)。處理過(guò)程繼續(xù)到步驟1204。
在搜索對(duì)應(yīng)于IP地址的路由索引之前,在查詢(xún)表200a-b(圖10A)中分配路由入口。搜索是在查詢(xún)表200a-b(圖10A)中的每一個(gè)中并行執(zhí)行的。用查詢(xún)表200a-b(圖10A)中的一個(gè)來(lái)描述實(shí)現(xiàn)對(duì)每個(gè)查詢(xún)表并行搜索的方法。
圖13是說(shuō)明利用搜索關(guān)鍵字搜索與圖10C所示的查詢(xún)表200c-d中的任何一個(gè)存儲(chǔ)的搜索關(guān)鍵字對(duì)應(yīng)值的方法的流程圖。
在步驟1300中,查詢(xún)表200c-d(圖10C)中的每一個(gè)接收搜索關(guān)鍵字210。查詢(xún)表200c-d中的每一個(gè)中的映射程序106a搜索于關(guān)鍵字210a的第一部分對(duì)應(yīng)的值。處理過(guò)程繼續(xù)到步驟1302。
在步驟1302中,讀取映射程序106a中映射程序入口504(圖6B)中存儲(chǔ)的入口。主查詢(xún)表200c中的映射程序入口504(圖6B)可以存儲(chǔ)非入口300(圖4),路由入口302(圖4)或子樹(shù)入口描述符304(圖4)。副查詢(xún)表200d中的映射程序入口504可以存儲(chǔ)非入口300(圖4)和子樹(shù)入口描述符304(圖4)。如果相應(yīng)的查詢(xún)表200中的映射程序入口存儲(chǔ)路由入口302(圖4),該入口則是有效值,不需要進(jìn)一步搜索查詢(xún)表200c-d中的后繼映射程序106b-d,處理過(guò)程繼續(xù)到步驟1310。否則,處理過(guò)程繼續(xù)到步驟1304。
在步驟1304中,如果入口存儲(chǔ)了子樹(shù)入口描述符304(圖4),那么需要進(jìn)一步搜索查詢(xún)表200c-d并且處理過(guò)程繼續(xù)到步驟1306。否則,該入口存儲(chǔ)非入口,表示不需要進(jìn)一步的搜索,處理過(guò)程繼續(xù)到步驟1310。
在步驟1306中,在所選子樹(shù)中繼續(xù)搜索。根據(jù)關(guān)鍵字210b-d的下一部分和從上一層的搜索得到的子樹(shù)索引312(圖4)來(lái)搜索下一層映射程序106b-d(圖3)。處理過(guò)程繼續(xù)到步驟1308。
在步驟1308中,根據(jù)從當(dāng)前層映射程序106b-d中搜索得到的映射程序入口來(lái)確定是否繼續(xù)執(zhí)行搜索。如果映射程序入口504(圖6B)存儲(chǔ)了子樹(shù)入口描述符304(圖4),搜索繼續(xù)到下一層映射程序106b-d并且處理過(guò)程繼續(xù)到步驟1306。如果映射程序入口504(圖6B)沒(méi)有存儲(chǔ)子樹(shù)入口描述符304(圖4),則不需要作進(jìn)一步搜索,處理過(guò)程繼續(xù)到步驟1310。
在步驟1310中,把搜索結(jié)果與從另一個(gè)查詢(xún)表接收的輸入結(jié)果作比較。例如,如果查詢(xún)表是副查詢(xún)表200d,那么把從主查詢(xún)表200c中搜索產(chǎn)生的輸入結(jié)果通過(guò)輸入結(jié)果1000a轉(zhuǎn)發(fā)到查詢(xún)表200d,并且與副查詢(xún)表200d的搜索結(jié)果作比較。處理過(guò)程繼續(xù)到步驟1312。
在步驟1312中,如果輸入結(jié)果1000a與當(dāng)前查詢(xún)表200d中的搜索結(jié)果不同,處理過(guò)程繼續(xù)到步驟1314。如果輸入結(jié)果1000a與當(dāng)前查詢(xún)表200d中的搜索結(jié)果相同,在分開(kāi)的查詢(xún)表200c-d中的映射程序入口504(圖6B)中已經(jīng)存儲(chǔ)這兩個(gè)有效的結(jié)果。不應(yīng)該相同的關(guān)鍵字210來(lái)存儲(chǔ)兩個(gè)有效結(jié)果,處理過(guò)程繼續(xù)到步驟1316。
在步驟1314中,檢查輸入結(jié)果1000a來(lái)確定它是否有效。如果輸入結(jié)果1000a是路由入口302(圖4),那么它是有效的。如果輸入結(jié)果1000a是非入口300(圖4)或子樹(shù)入口描述符304(圖4),那么它是無(wú)效的。子樹(shù)入口描述符304(圖4),路由入口302(圖4)和非入口300(圖4)已經(jīng)結(jié)合圖4描述過(guò)了。如果輸入結(jié)果1000a無(wú)效,處理過(guò)程繼續(xù)到步驟1318。否則,處理過(guò)程繼續(xù)到步驟1320。
在步驟1318中,輸入結(jié)果1000a有效,而從當(dāng)前查詢(xún)表200d中搜索得到的結(jié)果無(wú)效。輸入結(jié)果1000a通過(guò)輸出結(jié)果1002a從當(dāng)前查詢(xún)表200d轉(zhuǎn)發(fā)。如果當(dāng)前查詢(xún)表200d是最后一個(gè)查詢(xún)表,那么輸入結(jié)果1000a作為路由索引102(圖3)轉(zhuǎn)發(fā),或者作為輸入結(jié)果1000a轉(zhuǎn)發(fā)到下一個(gè)查詢(xún)表。處理過(guò)程結(jié)束。
在步驟1316中,在不同的查詢(xún)表中存儲(chǔ)關(guān)鍵字的兩個(gè)有效的結(jié)果值。在查詢(xún)表200c-d中存儲(chǔ)路由入口期間發(fā)生錯(cuò)誤時(shí),生成錯(cuò)誤代碼以便能夠糾錯(cuò)。處理過(guò)程結(jié)束。
在步驟1320中,來(lái)自當(dāng)前查詢(xún)表200d的搜索結(jié)果和輸入結(jié)果1000a都無(wú)效。即使無(wú)效,也將當(dāng)前查詢(xún)表200d的搜索結(jié)果作為輸入結(jié)果1000a轉(zhuǎn)發(fā)到下一個(gè)查詢(xún)表。處理過(guò)程結(jié)束。
圖14是說(shuō)明搜索與圖10A所示的查詢(xún)表200a-b之一中存儲(chǔ)的搜索關(guān)鍵字對(duì)應(yīng)的值的方法的流程圖。
在步驟1340中,在兩個(gè)查詢(xún)表200a-b中的第一層映射程序106a搜索與關(guān)鍵字210a的第一部分對(duì)應(yīng)的值。處理過(guò)程繼續(xù)到步驟1342。
在步驟1342中,如果利用關(guān)鍵字210a的第一部分搜索第一層映射程序106a后找到了有效的結(jié)果值,則處理過(guò)程繼續(xù)到步驟1352。否則,處理過(guò)程繼續(xù)到步驟1344。
在步驟1344中,如果利用關(guān)鍵字210a的第一部分搜索第一層映射程序106a得到的值是子樹(shù)入口描述符304(圖4),處理過(guò)程繼續(xù)到步驟1346。否則,當(dāng)前查詢(xún)表中不存儲(chǔ)關(guān)鍵字的有效值,處理過(guò)程結(jié)束。
在步驟1346中,繼續(xù)在以搜索上一層映射程序期間找到的子樹(shù)入口描述符304(圖4)中標(biāo)識(shí)的子樹(shù)中搜索有效值。根據(jù)關(guān)鍵字210b-c的下一部分和從搜索下一層得到的子樹(shù)選擇在下一層映射程序中搜索一個(gè)值。處理過(guò)程繼續(xù)到步驟1348。
在步驟1348中,搜索結(jié)果確定是否需要對(duì)下一層進(jìn)行搜索。從當(dāng)前搜索得到的入口可以存儲(chǔ)路由入口302,非入口300(圖4)或子樹(shù)入口描述符304(圖4)。如果入口存儲(chǔ)了子樹(shù)入口描述符304(圖4),則需要進(jìn)一步的搜索并且處理過(guò)程繼續(xù)到步驟1346。如果入口沒(méi)有存儲(chǔ)子樹(shù)入口描述符304(圖4),處理過(guò)程繼續(xù)到步驟1350。
在步驟1350中,如果入口存儲(chǔ)了路由索引102(圖3),處理過(guò)程繼續(xù)到步驟1352。否則,將入口存儲(chǔ)在另一個(gè)查詢(xún)表中。處理過(guò)程結(jié)束。
在步驟1352中,與該關(guān)鍵字對(duì)應(yīng)的有效值存儲(chǔ)在當(dāng)前查詢(xún)表中。有效值作為對(duì)應(yīng)于該關(guān)鍵字的路由索引102(圖3)轉(zhuǎn)發(fā)。處理過(guò)程結(jié)束。稀疏模式返回圖5,子樹(shù)入口404對(duì)多達(dá)256個(gè)可能的路由索引中的每一個(gè)提供訪問(wèn),256個(gè)節(jié)點(diǎn)字樹(shù)中每個(gè)節(jié)點(diǎn)一個(gè)。路由索引存儲(chǔ)在子樹(shù)映射程序418(圖5)中的映射程序入口5041-504n中。根據(jù)子樹(shù)入口404中數(shù)據(jù)字段406中存儲(chǔ)的密集子樹(shù)描述符和指針字段408中存儲(chǔ)的子樹(shù)指針確定在子樹(shù)映射程序418(圖5)中映射程序入口504(圖6B)的映射程序地址416。密集子樹(shù)描述符的格式已經(jīng)結(jié)合圖6A-6B描述過(guò)了。密集子樹(shù)描述符為256個(gè)節(jié)點(diǎn)的子樹(shù)中每個(gè)節(jié)點(diǎn)存儲(chǔ)一個(gè)節(jié)點(diǎn)位502(圖6B)。但是,所有子樹(shù)針對(duì)256個(gè)節(jié)點(diǎn)中的每一個(gè)具有不同的路由索引,例如,一個(gè)子樹(shù)可能只有一個(gè)路由索引。
圖15說(shuō)明了由第一映射程序?qū)?12a中的子樹(shù)入口304索引的第二層映射程序?qū)?12b中稀疏子樹(shù)A和密集子樹(shù)B的二叉樹(shù)表示。映射程序106a中s1的子樹(shù)入口描述符304(圖4)存儲(chǔ)子樹(shù)A的子樹(shù)入口404的子樹(shù)索引312。映射程序106a中s0的子樹(shù)入口描述符304(圖4)存儲(chǔ)子樹(shù)B的子樹(shù)入口404的子樹(shù)索引312。
密集集中子樹(shù)B有11個(gè)路由索引;即,r6-r16和6個(gè)子樹(shù)入口;即,s2-s7。與存儲(chǔ)路由入口302(圖4)的映射程序入口504(圖6B)和子樹(shù)B的子樹(shù)入口304(圖4)對(duì)應(yīng)的映射程序地址416在密集子樹(shù)描述符中的編碼已經(jīng)結(jié)合圖6B描述過(guò)了。
稀疏集中子樹(shù)存儲(chǔ)兩個(gè)路由索引;即r1和r2。如果它們存儲(chǔ)在密集子樹(shù)描述符中,那么整個(gè)子樹(shù)入口404用來(lái)提供映射程序入口504(圖6B)的三個(gè)映射程序地址416;即,r0,r1和r2。
查詢(xún)表200中存儲(chǔ)的路由數(shù)量可以通過(guò)對(duì)多個(gè)稀疏子樹(shù)描述符的其中一個(gè)稀疏子樹(shù)描述符編碼以及對(duì)子樹(shù)入口404中密集子樹(shù)描述符中的密集集中子樹(shù)描述符編碼來(lái)增加。
密集集中子樹(shù)有16個(gè)或更多個(gè)映射程序入口504(圖6B),子樹(shù)入口404中的數(shù)據(jù)字段406存儲(chǔ)結(jié)合圖6A-6B所述的密集子樹(shù)描述符。稀疏集中子樹(shù)有15個(gè)或更少個(gè)映射程序入口504(圖6B);子樹(shù)入口404中的數(shù)據(jù)字段存儲(chǔ)了多個(gè)稀疏子樹(shù)描述符。通過(guò)提供在稀疏子樹(shù)描述符中存儲(chǔ)稀疏集中子樹(shù)的能力,子樹(shù)存儲(chǔ)器400可以存儲(chǔ)更多的子樹(shù)并且查詢(xún)表200中可以存儲(chǔ)更多的路由入口。
圖16A-C說(shuō)明了對(duì)圖5所示子樹(shù)入口404中數(shù)據(jù)字段406和指針字段408以及圖4所示子樹(shù)入口描述符304(圖4)的更改,以便允許在子樹(shù)入口404中存儲(chǔ)多個(gè)稀疏子樹(shù)描述符。
轉(zhuǎn)到圖16A,以稀疏模式配置的子樹(shù)入口404中的數(shù)據(jù)字段406包括多個(gè)稀疏子樹(shù)描述符14001-1400n來(lái)代替結(jié)合圖6B所述的子樹(shù)的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一位的密集子樹(shù)描述符。每個(gè)稀疏子樹(shù)描述符14001-1400n包括一個(gè)節(jié)點(diǎn)描述符14021-1402n。一個(gè)節(jié)點(diǎn)描述符14001-1402n是代表子樹(shù)中完全已編碼路由的一個(gè)9位值。節(jié)點(diǎn)描述符14021-1402n描述了子樹(shù)中一個(gè)節(jié)點(diǎn)或多個(gè)節(jié)點(diǎn)。
轉(zhuǎn)到圖16B,為支持存儲(chǔ)稀疏子樹(shù)描述符,在子樹(shù)入口404的指針字段408增加模式字段1404。指針字段408還存儲(chǔ)塊基地址6001和塊基地址6002,每個(gè)塊包括16個(gè)為每個(gè)子樹(shù)入口404提供總共32個(gè)映射程序地址416的已分配映射程序地址416。模式字段1404存儲(chǔ)模式值。模式字段1404中存儲(chǔ)的模式值表示子樹(shù)入口404中存儲(chǔ)的稀疏子樹(shù)描述符14001-1400n的數(shù)量和每個(gè)稀疏子樹(shù)描述符14001-1400n中存儲(chǔ)的節(jié)點(diǎn)描述符14021-1402n的數(shù)量。表2說(shuō)明了每個(gè)模式對(duì)應(yīng)的子樹(shù)入口404的配置。

表2參見(jiàn)表2,例如,如果設(shè)置子樹(shù)入口404中指針字段408的模式字段1404中存儲(chǔ)的模式值為“4”,那么子樹(shù)入口404中的每個(gè)稀疏子樹(shù)描述符1400存儲(chǔ)5到7個(gè)節(jié)點(diǎn)描述符14021-1402n。每個(gè)節(jié)點(diǎn)描述符14021-1402n存儲(chǔ)9位。通過(guò)每個(gè)稀疏子樹(shù)描述符14001-1400n的節(jié)點(diǎn)描述符14021-1402n的數(shù)量乘以9(每個(gè)節(jié)點(diǎn)描述符14021-1402n的位數(shù))來(lái)計(jì)算存儲(chǔ)在稀疏子樹(shù)描述符1400中的總位數(shù)。計(jì)算模式4的每個(gè)稀疏子樹(shù)描述符1400的位數(shù)后,具有7個(gè)節(jié)點(diǎn)描述符1402的稀疏子樹(shù)描述符1400存儲(chǔ)63位(7個(gè)節(jié)點(diǎn)描述符×9位=63)。
數(shù)據(jù)字段406中的位數(shù)除以稀疏子樹(shù)描述符14001-1400n的位數(shù)可以計(jì)算出每個(gè)子樹(shù)入口404的稀疏子樹(shù)描述符1400的數(shù)量。對(duì)于模式4,數(shù)據(jù)字段406中的位數(shù)為256并且稀疏子樹(shù)描述符中的位數(shù)為63。因此稀疏子樹(shù)描述符14001-1400n的數(shù)量為4(int(256/63)=4)。
每個(gè)子樹(shù)的節(jié)點(diǎn)數(shù)乘以每個(gè)子樹(shù)入口404的子樹(shù)數(shù)量可以得到每個(gè)子樹(shù)入口404的節(jié)點(diǎn)描述符14021-1402n的總數(shù)。計(jì)算模式4,如果在稀疏子樹(shù)描述符14001-1400n中存儲(chǔ)了7個(gè)節(jié)點(diǎn)描述符14021-1402n,那么每個(gè)子樹(shù)入口404的節(jié)點(diǎn)描述符1402的數(shù)量為28(7×4=28),并且如果每個(gè)子樹(shù)描述符14001-1400n有5個(gè)節(jié)點(diǎn)描述符1402,則結(jié)果為20(5×4=20)。
表2中的映射程序入口列表示子樹(shù)入口404使用了多少子樹(shù)映射程序418(圖5)中的映射程序入口504(圖6B)。通過(guò)將每個(gè)子樹(shù)的節(jié)點(diǎn)加1并通過(guò)乘以稀疏子樹(shù)描述符中的子樹(shù)數(shù)量來(lái)計(jì)算映射程序值。每個(gè)子樹(shù)節(jié)點(diǎn)加1是因?yàn)樾枰让總€(gè)子樹(shù)節(jié)點(diǎn)數(shù)量多1個(gè)映射程序入口,以便存儲(chǔ)子樹(shù)的缺省入口。
參見(jiàn)表2中模式4的一行,如果每個(gè)稀疏子樹(shù)描述符1400有7個(gè)節(jié)點(diǎn)描述符1402,那么每個(gè)子樹(shù)入口404需要32((7+1)×4=32)個(gè)映射程序入口,并且如果每個(gè)稀疏子樹(shù)描述符1400有5個(gè)節(jié)點(diǎn)描述符1402,那么每個(gè)稀疏子樹(shù)描述符1400需要24((5+1)×4=24)個(gè)節(jié)點(diǎn)描述符1402。因?yàn)樵?6個(gè)塊遞增中分配了子樹(shù)映射程序418(圖5)中的映射程序地址416,所以選擇每個(gè)子樹(shù)節(jié)點(diǎn)的數(shù)量和每個(gè)子樹(shù)入口404的子樹(shù)數(shù)量,以便每個(gè)子樹(shù)入口404的節(jié)點(diǎn)描述符的最大數(shù)量不超過(guò)30。通過(guò)在指針字段408中存儲(chǔ)兩個(gè)塊基地址6001,6002來(lái)提供32個(gè)映射程序地址416。
轉(zhuǎn)到圖16C,子樹(shù)存儲(chǔ)器400中的每個(gè)子樹(shù)入口404可以配置成如結(jié)合圖6B所述的密集模式或稀疏模式。通過(guò)提供表示子樹(shù)入口404是否以密集模式或稀疏模式編碼的標(biāo)志,將結(jié)合圖4所述的子樹(shù)映射程序418(圖5)中存儲(chǔ)的密集模式的子樹(shù)入口描述符304(圖4)修改為稀疏模式。類(lèi)型字段1406提供指示符。
類(lèi)型字段1406的狀態(tài)表示子樹(shù)入口404是按密集模式還是按稀疏模式配置。如果子樹(shù)入口404以稀疏模式配置,那么稀疏子樹(shù)描述符選擇字段1408中存儲(chǔ)的值和子樹(shù)索引312用于選擇稀疏子樹(shù)描述符1400。稀疏子樹(shù)描述符選擇1408將結(jié)合圖16在后面作詳細(xì)描述。
圖17說(shuō)明了用于提供塊位移714來(lái)選擇稀疏集中子樹(shù)的節(jié)點(diǎn)的映射程序入口504(圖6B)的圖8所示的位移邏輯700中稀疏模式邏輯1502。稀疏模式邏輯1502根據(jù)子樹(shù)入口404中稀疏子樹(shù)描述符1400存儲(chǔ)的節(jié)點(diǎn)描述符1402來(lái)提供塊位移714。位移邏輯700還包括密集模式邏輯1500。密集模式邏輯1500包括節(jié)點(diǎn)選擇706和用來(lái)提供密集集中子樹(shù)中用于路由的塊位移714的“1”計(jì)數(shù)邏輯708。密集模式邏輯1500已經(jīng)結(jié)合圖8描述過(guò)了。
如果類(lèi)型字段1406的狀態(tài)表示子樹(shù)入口404以稀疏模式配置,那么來(lái)自子樹(shù)入口404的子樹(shù)數(shù)據(jù)412轉(zhuǎn)發(fā)到稀疏模式邏輯1502。結(jié)合圖18描述稀疏模式子樹(shù)邏輯1502。
圖18說(shuō)明了圖17中位移邏輯700所示的稀疏模式邏輯1502。稀疏模式邏輯1502包括子樹(shù)選擇邏輯1600,多路復(fù)用器1602,內(nèi)容可編址存儲(chǔ)器(“CAM”)1606以及轉(zhuǎn)換邏輯1604。所選子樹(shù)入口404中的數(shù)據(jù)字段406中存儲(chǔ)的稀疏子樹(shù)描述符14001-1400n通過(guò)子樹(shù)數(shù)據(jù)412轉(zhuǎn)發(fā)到位移邏輯700。位移邏輯700將稀疏子樹(shù)描述符14001-1400n轉(zhuǎn)發(fā)到稀疏模式邏輯1502中的多路復(fù)用器1602。由子樹(shù)選擇邏輯1600生成的選擇1614來(lái)選擇子樹(shù)數(shù)據(jù)412中的一個(gè)稀疏子樹(shù)描述符14001。
子樹(shù)選擇邏輯1600根據(jù)從前一個(gè)映射程序?qū)舆x擇的映射程序入口轉(zhuǎn)發(fā)的稀疏子樹(shù)描述符選擇1408的狀態(tài)和所選子樹(shù)入口404中的指針字段408中存儲(chǔ)的模式1404生成選擇1614,以便選擇稀疏子樹(shù)描述符14001。表3說(shuō)明了所選稀疏子樹(shù)描述符14001和從多路復(fù)用器1602通過(guò)所選擇的稀疏子樹(shù)描述符1610從對(duì)應(yīng)模式4的子樹(shù)入口404的多路復(fù)用器1602轉(zhuǎn)發(fā)的相應(yīng)的子樹(shù)數(shù)據(jù)位412。參見(jiàn)表2中模式4的一行,在模式4中,子樹(shù)入口404可以存儲(chǔ)4個(gè)稀疏子樹(shù)描述符。這4個(gè)稀疏子樹(shù)描述符中的每一個(gè)可以以子樹(shù)入口404的模式4存儲(chǔ)。這4個(gè)稀疏子樹(shù)描述符1400中的每一個(gè)有63位并且可以存儲(chǔ)7到5個(gè)節(jié)點(diǎn)描述符1402。因此,這4個(gè)稀疏子樹(shù)描述符1400中的每一個(gè)從63位的邊界開(kāi)始。第一個(gè)稀疏子樹(shù)描述符14001存儲(chǔ)在數(shù)據(jù)字段406的位620,第二個(gè)稀疏子樹(shù)描述符14002存儲(chǔ)在數(shù)據(jù)字段406的位12563,第三個(gè)稀疏子樹(shù)描述符14003存儲(chǔ)在數(shù)據(jù)字段406的位188126以及第四個(gè)稀疏子樹(shù)描述符14004存儲(chǔ)在數(shù)據(jù)字段406的位251189。稀疏子樹(shù)描述符選擇1408選擇數(shù)據(jù)字段406中的相應(yīng)位。例如,看表3,如果稀疏子樹(shù)描述符選擇1408是“0001”,那么選擇第二個(gè)稀疏子樹(shù)描述符14002并且通過(guò)多路復(fù)用器1602將256位子樹(shù)數(shù)據(jù)412的位12563從所選擇的稀疏子樹(shù)描述符1610轉(zhuǎn)發(fā)到轉(zhuǎn)換邏輯1604。

表3子樹(shù)存儲(chǔ)器400中的每個(gè)子樹(shù)入口404可以配置成稀疏模式或密集模式。以稀疏模式配置的每個(gè)子樹(shù)入口404可以配置為能夠通過(guò)模式1404存儲(chǔ)每個(gè)稀疏子樹(shù)描述符1400的不同數(shù)量的節(jié)點(diǎn)描述符1402。以稀疏模式配置的子樹(shù)入口404中所有稀疏子樹(shù)描述符1400存儲(chǔ)每個(gè)稀疏子樹(shù)描述符1400相同數(shù)量的節(jié)點(diǎn)描述符1402。
可以對(duì)節(jié)點(diǎn)描述符1402編碼以表示子樹(shù)中的多個(gè)節(jié)點(diǎn)。節(jié)點(diǎn)描述符1402表示的多個(gè)8位節(jié)點(diǎn)通過(guò)屏蔽8位中的一些位來(lái)識(shí)別。為取代利用每個(gè)節(jié)點(diǎn)描述符1402存儲(chǔ)屏蔽位,使用9位節(jié)點(diǎn)描述符1402對(duì)節(jié)點(diǎn)描述符1402表示的8位寬的節(jié)點(diǎn)進(jìn)行完全編碼。使用運(yùn)行比特長(zhǎng)度編碼來(lái)以9位寬的節(jié)點(diǎn)描述符1402對(duì)8位寬的節(jié)點(diǎn)編碼。運(yùn)行比特長(zhǎng)度編碼可以識(shí)別8位節(jié)點(diǎn)中的哪些位被屏蔽了。
轉(zhuǎn)換邏輯1604將所選稀疏子樹(shù)描述符1400中存儲(chǔ)的9位寬的節(jié)點(diǎn)描述符14021-1402n轉(zhuǎn)換為包括置為“X”位(任意值)的8位CAM值1612并且將8位CAM值1612裝載到CAM 1606。表4顯示了通過(guò)轉(zhuǎn)換邏輯1604將9位節(jié)點(diǎn)描述符1402轉(zhuǎn)換為8位CAM值1612的例子。

表49位代碼列說(shuō)明了節(jié)點(diǎn)描述符1402中存儲(chǔ)的值??幢?的第一行,節(jié)點(diǎn)描述符1402中存儲(chǔ)的9位代碼為“101100100”并且對(duì)應(yīng)的8位值“101100XX”存儲(chǔ)在CAM 1606中。轉(zhuǎn)換邏輯1604通過(guò)在9位代碼中從右到左搜索第一個(gè)為“1”的位來(lái)轉(zhuǎn)換9位代碼。在9位代碼從右到左的位中,前兩位為“0”,第三位為“1”。由于在第一個(gè)“1”的右邊有兩個(gè)“0”,因此轉(zhuǎn)換邏輯1604將“100”轉(zhuǎn)換為兩個(gè)任意位(“XX”)。第一個(gè)“1”被忽略,余下的位直接復(fù)制到8位值的后幾位。
在表4中的第二行,節(jié)點(diǎn)描述符1402存儲(chǔ)的9位代碼為“100100000”。轉(zhuǎn)換邏輯1604通過(guò)在9位代碼中從右到左搜索第一個(gè)為“1”的位來(lái)轉(zhuǎn)換9位代碼。第5位存儲(chǔ)“1”。9位代碼被轉(zhuǎn)換為其5位最低有效位(“LSBS”)設(shè)置為“任意值”(“X”)的8位值。通過(guò)使用9位運(yùn)行比特長(zhǎng)度編碼存儲(chǔ)節(jié)點(diǎn)描述符1402,使每個(gè)節(jié)點(diǎn)描述符1402所需的位數(shù)最少,因此增加了可以存儲(chǔ)在查詢(xún)表200中的節(jié)點(diǎn)描述符1402的數(shù)量。
在9位節(jié)點(diǎn)描述符1402轉(zhuǎn)換為8位值之后,轉(zhuǎn)換邏輯1604將8位值載入CAM 1606。8位值以與所選稀疏子樹(shù)描述符1400中存儲(chǔ)的節(jié)點(diǎn)描述符1402相同的順序載入CAM 1606,即,從最短到最長(zhǎng)的匹配。CAM 1606提供用來(lái)存儲(chǔ)每個(gè)稀疏子樹(shù)描述符1400的最大編號(hào)節(jié)點(diǎn)描述符1402的存儲(chǔ)空間。因此,CAM 1606為8位寬16個(gè)入口深,以便能提供15個(gè)入口來(lái)存儲(chǔ)模式5的稀疏子樹(shù)描述符1400的節(jié)點(diǎn)描述符1402的最大編號(hào)以及缺省的映射程序地址。CAM 1606具有三進(jìn)制功能和內(nèi)置的多匹配分解器。相對(duì)于提供真正的內(nèi)容地址存儲(chǔ)器,小容量的CAM 1606可以利用邏輯門(mén)來(lái)實(shí)現(xiàn),即,CAM 1606可以通過(guò)仿真CAM的硬件電路來(lái)實(shí)現(xiàn)。
稀疏子樹(shù)描述符1400中存儲(chǔ)的節(jié)點(diǎn)描述符1402的數(shù)量確定了存儲(chǔ)稀疏子樹(shù)描述符1400的子樹(shù)入口404。在特定模式范圍內(nèi)存儲(chǔ)節(jié)點(diǎn)描述符1402的稀疏子樹(shù)描述符1400存儲(chǔ)在相同的子樹(shù)入口404中。為每個(gè)子樹(shù)的缺省路由計(jì)算缺省映射程序地址。缺省的8位值永久地存儲(chǔ)在CAM1606的第一單元以計(jì)算缺省的映射程序地址。
在所選稀疏子樹(shù)1400對(duì)應(yīng)的8位值載入CAM 1606之后,利用關(guān)鍵字210b的下一部分搜索CAM 1606。選定與關(guān)鍵字210b的下一部分中最大位數(shù)匹配的CAM 1606中的入口。從搜索CAM得到的匹配地址作為塊位移714轉(zhuǎn)發(fā)。塊位移714用來(lái)確定與子樹(shù)映射程序418(圖5)中所存儲(chǔ)路由對(duì)應(yīng)的映射程序入口的映射程序地址416。
圖19A-D說(shuō)明了對(duì)稀疏集中子樹(shù)1700中一個(gè)節(jié)點(diǎn)的塊位移714的選擇。圖17A用圖形表示了稀疏集中子樹(shù)1700中的路由。子樹(shù)1700中的節(jié)點(diǎn)對(duì)應(yīng)三個(gè)路由r0,r1和r2之一,r0是子樹(shù)1700的缺省路由。以稀疏子樹(shù)描述符1400中的節(jié)點(diǎn)描述符14021和14022編碼r1,r2兩個(gè)路由。缺省路由r0的值永久保存在CAM 1606中的第一入口1702中。參見(jiàn)表2,具有兩個(gè)節(jié)點(diǎn)描述符1402的稀疏子樹(shù)描述符1400存儲(chǔ)在模式字段1404為“1”的子樹(shù)入口404中。
在子樹(shù)1700中,r2對(duì)應(yīng)所有與10xxxxxx匹配的節(jié)點(diǎn),r1對(duì)應(yīng)所有與010xxxxx匹配的節(jié)點(diǎn)。為了最小化用來(lái)描述稀疏子樹(shù)描述符1400中每個(gè)路由的每個(gè)節(jié)點(diǎn)描述符14021,14022所需的位數(shù),使用運(yùn)行比特長(zhǎng)度編碼對(duì)節(jié)點(diǎn)描述符14021,14022進(jìn)行編碼。用于編碼的方法比用于對(duì)節(jié)點(diǎn)進(jìn)行完全編碼所用位數(shù)多1位。在第一個(gè)“X”(“任意值”)的位置插入“1”并且其余X位編碼為“0”。這樣,路由10xxxxxx被翻譯為10100000,路由010xxxxx被翻譯為010100000。
圖19B說(shuō)明了節(jié)點(diǎn)描述符14021和14022在稀疏子樹(shù)描述符1400中的存儲(chǔ)。因?yàn)橛袃蓚€(gè)節(jié)點(diǎn)描述符14021和14022存儲(chǔ)在稀疏子樹(shù)描述符1400中,所以節(jié)點(diǎn)描述符14021和14022存儲(chǔ)在模式字段1404設(shè)置為“1”的子樹(shù)入口404中。因?yàn)閞1需要與前三位匹配,而r2需要與前兩位匹配,所以子樹(shù)的最長(zhǎng)匹配為r1。節(jié)點(diǎn)14021和14022按從最短到最長(zhǎng)的匹配順序存儲(chǔ)在稀疏子樹(shù)描述符1400中,其中r2的節(jié)點(diǎn)描述符14021存儲(chǔ)在第一位,r1的節(jié)點(diǎn)描述符14022存儲(chǔ)在下一位。
圖19C說(shuō)明了節(jié)點(diǎn)描述符14022向8位屏蔽值1706的轉(zhuǎn)換。在從左到右的節(jié)點(diǎn)描述符位17081-17089中,第一個(gè)“1”存儲(chǔ)在位17086,它標(biāo)志著8位被屏蔽值1706的屏蔽位的結(jié)束。執(zhí)行下面的位轉(zhuǎn)換來(lái)實(shí)現(xiàn)節(jié)點(diǎn)描述符14022向8位被屏蔽值1706的轉(zhuǎn)換。存儲(chǔ)在節(jié)點(diǎn)描述符17081位的“0”轉(zhuǎn)換為“X”并且存儲(chǔ)在8位被屏蔽值17101位。存儲(chǔ)在節(jié)點(diǎn)描述符17082位的“0”轉(zhuǎn)換為“X”并且存儲(chǔ)在8位被屏蔽值17102位。存儲(chǔ)在節(jié)點(diǎn)描述符17083位的“0”轉(zhuǎn)換為“X”并且存儲(chǔ)在8位被屏蔽值17103位。存儲(chǔ)在節(jié)點(diǎn)描述符17084位的“0”轉(zhuǎn)換為“X”并且存儲(chǔ)在8位被屏蔽值17104位。存儲(chǔ)在節(jié)點(diǎn)描述符17085位的“0”轉(zhuǎn)換為“X”并且存儲(chǔ)在8位被屏蔽值17105位。存儲(chǔ)在節(jié)點(diǎn)描述符17086位的“1”被忽略。存儲(chǔ)在節(jié)點(diǎn)描述符17087位的“0”存儲(chǔ)在8位被屏蔽值17106位。存儲(chǔ)在節(jié)點(diǎn)描述符17088位的“1”存儲(chǔ)在8位被屏蔽值17107位。存儲(chǔ)在節(jié)點(diǎn)描述符17089位的“0”存儲(chǔ)在8位被屏蔽值17108位。
圖19D說(shuō)明了存儲(chǔ)CAM 1606中的節(jié)點(diǎn)描述符14021和14022以及所選擇的稀疏子樹(shù)描述符1400的子樹(shù)映射程序418(圖5)中存儲(chǔ)的對(duì)應(yīng)的映射程序入口5041-5043。將所選擇的子樹(shù)描述符1400中存儲(chǔ)的9位節(jié)點(diǎn)描述符14021和14022轉(zhuǎn)換到轉(zhuǎn)換邏輯1604(圖18)中,并且載入CAM 1606。CAM 1606中第一個(gè)入口1702是圖19A中子樹(shù)1700所示的r0的缺省入口。第二個(gè)入口1704從所選擇的稀疏子樹(shù)描述符1400中存儲(chǔ)的第一節(jié)點(diǎn)描述符14021轉(zhuǎn)換。第二個(gè)入口1704是為r2轉(zhuǎn)換的最短匹配。把所選擇的子樹(shù)描述符1400中存儲(chǔ)的第二節(jié)點(diǎn)描述符14022從010100000轉(zhuǎn)換為010XXXXX并且存儲(chǔ)在CAM 1606的第三入口1706中。
對(duì)CAM 1606的搜索產(chǎn)生塊位移714(圖18)。塊位移714用來(lái)確定子樹(shù)映射程序418(圖5)中存儲(chǔ)的映射程序入口5041-5043的映射程序地址416。利用存儲(chǔ)最長(zhǎng)匹配的入口1702,1704,1706的關(guān)鍵字210b的第二部分來(lái)搜索CAM 1606。根據(jù)所選擇的子樹(shù)入404中的指針字段408中存儲(chǔ)的塊基地址6001,6001之一將CAM 1606提供的塊位移714與子樹(shù)基地址結(jié)合。
圖20是說(shuō)明圖8所示指針邏輯702中稀疏模式基選擇邏輯1800的方框圖。指針邏輯702選擇用于計(jì)算子樹(shù)映射程序418(圖5)中映射程序入口504(圖6B)的映射程序地址416的基地址716。指針邏輯702包括密集模式基選擇邏輯710和稀疏模式基選擇邏輯1800,根據(jù)從上一層映射程序?qū)愚D(zhuǎn)發(fā)的子樹(shù)入口描述符304(圖4)中存儲(chǔ)的類(lèi)型1406的狀態(tài)來(lái)選擇其一。如前所述,類(lèi)型1406的狀態(tài)表示是否將子樹(shù)配置為密集模式。
如果子樹(shù)入口404存儲(chǔ)了多個(gè)稀疏子樹(shù)描述符1400,稀疏模式基選擇邏輯1800計(jì)算稀疏子樹(shù)描述符1400的基地址716。稀疏模式基選擇邏輯1800利用模式字段1404中存儲(chǔ)的模式值1608和子樹(shù)入口404中塊基地址域6001,6002中存儲(chǔ)的子樹(shù)指針414以及上一層映射程序?qū)愚D(zhuǎn)發(fā)的子樹(shù)入口描述符304(圖4)中存儲(chǔ)的稀疏子樹(shù)描述符選擇1408來(lái)計(jì)算基地址716?;刂?16的計(jì)算如下基地址(稀疏子樹(shù)描述符)=塊基地址+基位移其中,基位移=((1+節(jié)點(diǎn)/子樹(shù))×稀疏子樹(shù)描述符選擇)例如,為查找以稀疏模式4配置的子樹(shù)入口404中2號(hào)子樹(shù)的起始基地址716,首先計(jì)算基位移。2號(hào)子樹(shù)對(duì)應(yīng)的稀疏子樹(shù)描述符選擇1408為“1”并且節(jié)點(diǎn)/子樹(shù)數(shù)為7(見(jiàn)表2)?;灰茷?((1+7)×1)。每個(gè)塊基地址6001,6002是分配給子樹(shù)入口404的16個(gè)映射程序地址塊的基地址。2號(hào)子樹(shù)對(duì)應(yīng)的基位移是小于16的8,因此2號(hào)子樹(shù)的塊基地址是塊基地址6001并且稀疏子樹(shù)描述符的基地址716是塊基地址6001+8。表5說(shuō)明了以模式4配置的子樹(shù)入口404中四個(gè)子樹(shù)的每個(gè)子樹(shù)基地址。

表5
圖21說(shuō)明了存儲(chǔ)在子樹(shù)存儲(chǔ)器400中的密集子樹(shù)描述符和稀疏子樹(shù)描述符。結(jié)合圖15來(lái)描述圖21。子樹(shù)B(圖21)的密集子樹(shù)描述符存儲(chǔ)在子樹(shù)入口4041的數(shù)據(jù)字段4061。子樹(shù)A(圖21)的稀疏子樹(shù)描述符14001存儲(chǔ)在子樹(shù)入口4042的數(shù)據(jù)字段4062。密集子樹(shù)描述符存儲(chǔ)結(jié)合圖6B描述過(guò)的子樹(shù)B底層中每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)位。稀疏模式描述符14001包括對(duì)應(yīng)結(jié)合圖19B描述過(guò)的路由r4和r5的節(jié)點(diǎn)描述符14021和14022。子樹(shù)索引312選擇子樹(shù)入口4041,4042。
s0(圖15)的映射程序106a中映射程序入口504(圖6B)中子樹(shù)入口描述符304(圖4)存儲(chǔ)的子樹(shù)索引312選擇子樹(shù)入口4041。s1(圖15)的映射程序106a中映射程序入口504(圖6B)中子樹(shù)入口描述符304(圖4)存儲(chǔ)的子樹(shù)索引312選擇子樹(shù)入口4042。因此,子樹(shù)存儲(chǔ)器400可以存儲(chǔ)稀疏子樹(shù)和密集子樹(shù)對(duì)應(yīng)的子樹(shù)入口4041,4042。
圖22是說(shuō)明用來(lái)向存儲(chǔ)稀疏集中子樹(shù)和密集集中子樹(shù)中的節(jié)點(diǎn)的路由的子樹(shù)映射程序418(圖5)中的映射程序入口504(圖6B)提供映射程序地址416(圖5)的方法的流程圖。任何子樹(shù)入口404都可以存儲(chǔ)多個(gè)稀疏子樹(shù)描述符或一個(gè)密集子樹(shù)描述符。根據(jù)路由在二叉樹(shù)中的如何分布,可以對(duì)稀疏子樹(shù)描述符和密集子樹(shù)描述符進(jìn)行任意組合。靈活地混合和匹配在子樹(shù)存儲(chǔ)器400中子樹(shù)入口404中的稀疏模式和密集子樹(shù)描述符可以更好地利用子樹(shù)存儲(chǔ)器400。
在步驟1900中,從在上一映射程序?qū)又羞x擇的子樹(shù)入口描述符304(圖4)中存儲(chǔ)的類(lèi)型1406的狀態(tài)來(lái)確定所選擇的子樹(shù)入口404的配置。如果子樹(shù)入口404的類(lèi)型配置為稀疏模式,處理過(guò)程繼續(xù)到步驟1902。否則,處理過(guò)程繼續(xù)到步驟1914。
在步驟1902中,子樹(shù)入口404的配置是稀疏模式。以稀疏模式配置的子樹(shù)入口404存儲(chǔ)多個(gè)稀疏子樹(shù)描述符1400。根據(jù)模式字段1404的狀態(tài)確定子樹(shù)入口404中存儲(chǔ)的稀疏子樹(shù)描述符1400的數(shù)量。位移邏輯700中的稀疏模式邏輯1502根據(jù)從上一映射程序?qū)愚D(zhuǎn)發(fā)的子樹(shù)入口描述符304(圖4)中存儲(chǔ)的稀疏子樹(shù)描述符選擇1408和前面結(jié)合圖14描述過(guò)的模式字段1404的內(nèi)容來(lái)從子樹(shù)入口404中選擇稀疏子樹(shù)描述符1400。處理過(guò)程繼續(xù)到步驟1904。
在步驟1904,所選擇的稀疏子樹(shù)描述符1400中的節(jié)點(diǎn)描述符1402中存儲(chǔ)的9位編碼值被轉(zhuǎn)換為8位值并且按從最短到最長(zhǎng)匹配的順序存儲(chǔ)在CAM 1606中。處理過(guò)程繼續(xù)到步驟1906。
在步驟1906中,利用關(guān)鍵字210b的下一部分在CAM 1606中搜索存儲(chǔ)最長(zhǎng)匹配的CAM入口。處理過(guò)程繼續(xù)到步驟1908。
在步驟1908中,把存儲(chǔ)關(guān)鍵字210b下一部分的最長(zhǎng)匹配的CAM 1606中的位置的地址作為塊位移714轉(zhuǎn)發(fā)。塊位移714用來(lái)計(jì)算子樹(shù)映射程序418(圖5)中映射程序入口504(圖6B)的映射程序地址416(圖5B)。處理過(guò)程繼續(xù)到步驟1910。
在步驟1910中,根據(jù)從上一映射程序?qū)愚D(zhuǎn)發(fā)的子樹(shù)入口描述符304(圖4)中存儲(chǔ)的稀疏子樹(shù)描述符選擇1408和所選擇的子樹(shù)入口404中存儲(chǔ)的模式字段1404的內(nèi)容來(lái)計(jì)算所選稀疏子樹(shù)描述符1400對(duì)應(yīng)的基地址716。處理過(guò)程繼續(xù)到步驟1912。
在步驟1912中,通過(guò)在加法器邏輯704(圖8)中將塊位移714和基地址716相加來(lái)計(jì)算映射程序地址416。通過(guò)子樹(shù)映射程序418(圖5)中的映射程序地址416識(shí)別的映射程序入口504存儲(chǔ)路由入口302(圖4)或子樹(shù)入口描述符304(圖4)。如果映射程序入口504(圖6B)存儲(chǔ)路由入口302(圖4),那么搜索結(jié)束。如果映射程序入口504(圖6B)存儲(chǔ)子樹(shù)入口描述符304(圖4),那么繼續(xù)在下一映射程序?qū)铀阉鲗?duì)應(yīng)關(guān)鍵字210b的值。
在步驟1914中,子樹(shù)入口404以密集模式配置并且在數(shù)據(jù)字段406中存儲(chǔ)一個(gè)密集子樹(shù)描述符。通過(guò)統(tǒng)計(jì)前面結(jié)合圖6B描述過(guò)的子樹(shù)入口404中數(shù)據(jù)字段406中存儲(chǔ)的密集子樹(shù)描述符中“1”的數(shù)量來(lái)計(jì)算塊位移714。處理過(guò)程繼續(xù)到步驟1916。
在步驟1916中,子樹(shù)入口404在子樹(shù)入口404中的指針字段408存儲(chǔ)16個(gè)塊基地址600。前面結(jié)合圖8描述過(guò)的指針邏輯702中的密集模式基選擇邏輯710選擇塊基指針600中的一個(gè)。處理過(guò)程繼續(xù)到步驟1912。遞增更新圖23說(shuō)明了在查詢(xún)表200中添加新路由的二叉樹(shù)表示。二叉樹(shù)說(shuō)明了查詢(xún)表200中存儲(chǔ)的對(duì)應(yīng)映射程序?qū)? 2000,映射程序?qū)? 2002和映射程序?qū)? 2004的路由。映射程序?qū)? 2002存儲(chǔ)子樹(shù)A和B的路由。映射程序?qū)? 2004存儲(chǔ)子樹(shù)A1,A2,B1和B2的路由。s5表示子樹(shù)映射程序418(圖5)中存儲(chǔ)的子樹(shù)入口描述符304(圖4)。s5對(duì)應(yīng)的子樹(shù)入口描述符304(圖4)存儲(chǔ)指向子樹(shù)B2的指針,子樹(shù)B2允許繼續(xù)在映射程序?qū)? 2004搜索關(guān)鍵字210的最長(zhǎng)匹配路由。
因?yàn)樽訕?shù)B22006只有兩個(gè)路由,r6和h1,所以它是稀疏子樹(shù)。因此,節(jié)點(diǎn)r6和h1對(duì)應(yīng)的節(jié)點(diǎn)描述符1402(圖16A)存儲(chǔ)在已經(jīng)結(jié)合圖14A描述過(guò)的稀疏子樹(shù)描述符1400中。因?yàn)樵谙∈枳訕?shù)描述符1400中存儲(chǔ)了兩個(gè)節(jié)點(diǎn)描述符1402,所以子樹(shù)B22006對(duì)應(yīng)的稀疏子樹(shù)描述符1400存儲(chǔ)在子樹(shù)存儲(chǔ)器400中模式字段1404設(shè)置為“1”的子樹(shù)入口404中。
子樹(shù)B2’2008所示的新節(jié)點(diǎn)h2添加到查詢(xún)表200中。因?yàn)樽訕?shù)B22006的新增路由使稀疏子樹(shù)描述符1400中存儲(chǔ)的節(jié)點(diǎn)描述符1402的數(shù)量從2增加到3,所以新路由h1不能直接添加到查詢(xún)表的子樹(shù)B22006中。向稀疏子樹(shù)描述符1400增加節(jié)點(diǎn)描述符1402需要在模式字段1404設(shè)置為“2”的子樹(shù)入口404中分配新的稀疏子樹(shù)描述符1400。因此,增加路由h1需要用子樹(shù)B2’2008代替子樹(shù)B22006。
圖24說(shuō)明了處理器存儲(chǔ)器2400中存儲(chǔ)的更新路由。查詢(xún)表200中存儲(chǔ)的二叉樹(shù)的拷貝也存儲(chǔ)在與查詢(xún)表200分離的處理器存儲(chǔ)器2400中。存儲(chǔ)子樹(shù)B22006的路由復(fù)制到處理器存儲(chǔ)器2400的子樹(shù)B2’2008并且向子樹(shù)B2’2008增加新路由h2。
路由更新程序2402生成一系列路由更新指令2404,以便將子樹(shù)B2’2008添加到查詢(xún)表200中并且將路由更新2404轉(zhuǎn)發(fā)到表更新程序2406。表更新程序2406生成路由更新2402對(duì)應(yīng)的表更新2410并且轉(zhuǎn)發(fā)更新周期2412,以便利用路由更新2404來(lái)更新查詢(xún)表200。更新周期2412將路由更新寫(xiě)入子樹(shù)存儲(chǔ)器400(圖5)中相應(yīng)的存儲(chǔ)器位置和子樹(shù)映射程序418中(圖5)。
返回圖23,更新周期2412包括用來(lái)分配一部分子樹(shù)映射程序418(圖5)以存儲(chǔ)映射程序入口504(圖6B)中新子樹(shù)B2’2008對(duì)應(yīng)的路由的指令。子樹(shù)B2’2008包括路由h1和r6以及新路由h2的映射程序入口504(圖6B)中存儲(chǔ)的路由入口。在子樹(shù)B2’2008的路由入口存儲(chǔ)在子樹(shù)映射程序418(圖5)中的映射程序入口504(圖6B)后,產(chǎn)生了這些路由對(duì)應(yīng)的節(jié)點(diǎn)描述符1402并且存儲(chǔ)在稀疏子樹(shù)描述符1400中。稀疏子樹(shù)描述符1400存儲(chǔ)在子樹(shù)入口404。子樹(shù)入口404的模式1404與稀疏子樹(shù)描述符1400中存儲(chǔ)的節(jié)點(diǎn)描述符1402的數(shù)量有關(guān)。
在子樹(shù)B2’2008的稀疏子樹(shù)描述符1400存儲(chǔ)在查詢(xún)表200的子樹(shù)存儲(chǔ)器400的子樹(shù)入口404中之后,s5代表的子樹(shù)入口描述符304(圖4)由指向子樹(shù)B22006改為指向子樹(shù)B2’2008。當(dāng)把子樹(shù)B2’2008添加到查詢(xún)表時(shí),可以通過(guò)s5訪問(wèn)子樹(shù)B22006中存儲(chǔ)的路由r6和h1。在子樹(shù)B2’2008存儲(chǔ)到查詢(xún)表中后,s5改為指向子樹(shù)B2’2008并且可以訪問(wèn)路由h1和r6和新路由h2。因此,當(dāng)把新路由h2添加到查詢(xún)表200中時(shí),可以在子樹(shù)B22006中繼續(xù)搜索對(duì)應(yīng)于路由h1和r6的路由索引。
圖25說(shuō)明了查詢(xún)表200中子樹(shù)映射程序418b中的映射程序入口504c4中存儲(chǔ)的圖23所示的新路由h2。結(jié)合圖24所示的二叉樹(shù)表示來(lái)描述圖25。
映射程序?qū)? 2002中的子樹(shù)B有3個(gè)路由;即r3,s4和s5。因?yàn)樽訕?shù)B的路由少于16個(gè),所以它是稀疏子樹(shù)。子樹(shù)B r3,s4和s5的節(jié)點(diǎn)描述符1402a1-1402a3存儲(chǔ)在子樹(shù)存儲(chǔ)器400a中子樹(shù)入口404a中的稀疏子樹(shù)描述符1400a1中。子樹(shù)映射程序418a中存儲(chǔ)子樹(shù)B中每個(gè)路由對(duì)應(yīng)的映射程序入口504a2-504a4。子樹(shù)映射程序418a中的映射程序入口504a1存儲(chǔ)子樹(shù)B的缺省路由。每個(gè)映射程序入口504a2-504a4存儲(chǔ)該節(jié)點(diǎn)的路由入口302(圖4)或子樹(shù)入口描述符304(圖4)。504a3中存儲(chǔ)路由s4的子樹(shù)入口描述符304(圖4),504a4中存儲(chǔ)s5的子樹(shù)入口描述符304(圖4)。映射程序入口504a4中存儲(chǔ)的s5為子樹(shù)存儲(chǔ)器400b提供子樹(shù)索引312b,以便開(kāi)始下一層搜索;即對(duì)映射程序?qū)? 2004的搜索。
子樹(shù)B2有兩個(gè)路由,即h1和r6,所以它也是稀疏子樹(shù)。節(jié)點(diǎn)描述符1402b1-1402b2存儲(chǔ)在子樹(shù)存儲(chǔ)器400b中的子樹(shù)入口404b中的稀疏子樹(shù)描述符1400b1中。子樹(shù)B2的每個(gè)路由存儲(chǔ)在映射程序入口504b2-504b3中并且子樹(shù)B2的缺省路由存儲(chǔ)在映射程序入口504b1中。
為在子樹(shù)B22006中搜索路由h1,將保存了用來(lái)存儲(chǔ)路由s5的節(jié)點(diǎn)描述符1402的稀疏子樹(shù)描述符1400a的子樹(shù)入口404a的地址通過(guò)子樹(shù)索引312a轉(zhuǎn)發(fā)到子樹(shù)存儲(chǔ)器400a。所選擇的子樹(shù)入口404a中存儲(chǔ)的數(shù)據(jù)字段406和指針字段408通過(guò)子樹(shù)數(shù)據(jù)412a和子樹(shù)指針414a轉(zhuǎn)發(fā)到映射程序地址邏輯402a。映射程序地址邏輯402a生成存儲(chǔ)了s5的子樹(shù)入口的映射程序入口504a4的映射程序地址416a。映射程序地址416a取決于子樹(shù)數(shù)據(jù)412a,子樹(shù)指針414a和關(guān)鍵字210b的下一部分。把s5的子樹(shù)入口通過(guò)子樹(shù)索引312b轉(zhuǎn)發(fā)到子樹(shù)存儲(chǔ)器400b。
子樹(shù)存儲(chǔ)器400b存儲(chǔ)子樹(shù)B22006的節(jié)點(diǎn)描述符1402b2,1402b1。子樹(shù)B2的稀疏子樹(shù)描述符1400b1存儲(chǔ)在子樹(shù)入口404b中。子樹(shù)入口404b中存儲(chǔ)的數(shù)據(jù)字段406和指針字段408通過(guò)子樹(shù)數(shù)據(jù)412b和子樹(shù)指針414b轉(zhuǎn)發(fā)到映射程序地址邏輯402b。映射程序地址邏輯402b生成存儲(chǔ)了h1的路由入口的映射程序入口504b3的映射程序地址416b。映射程序地址416b取決于子樹(shù)數(shù)據(jù)412b,子樹(shù)指針414b和關(guān)鍵字210c的下一部分確定。
為向子樹(shù)B22006添加路由h2,分配子樹(shù)映射程序418b中一組前面未使用過(guò)的映射程序602c,以便存儲(chǔ)保存了子樹(shù)B2’2008的路由r6,h1和h2的映射程序入口504c2-504c4。映射程序入口504c1存儲(chǔ)子樹(shù)B2’2008的缺省入口;即,映射程序入口504b1中存儲(chǔ)的相同的值。映射程序入口504c2存儲(chǔ)路由r6的路由入口;即,映射程序入口504b2中存儲(chǔ)的相同的值。映射程序入口504c3存儲(chǔ)路由h1的路由入口;即,映射程序入口504b3中存儲(chǔ)的相同的值。映射程序入口504c4存儲(chǔ)路由h2的路由入口。當(dāng)寫(xiě)入映射程序入口504c1-4塊時(shí),可以通過(guò)子樹(shù)映射程序418a中的504a4中為路由s5存儲(chǔ)的子樹(shù)入口來(lái)訪問(wèn)映射程序入口504b1-504b3中存儲(chǔ)的路由入口。
在子樹(shù)映射程序418b中已存儲(chǔ)了子樹(shù)B2’2008的映射程序入口504c1-4后,把稀疏子樹(shù)描述符1400c1添加到子樹(shù)存儲(chǔ)器400b。節(jié)點(diǎn)描述符1402c1-3的數(shù)量少于16,因此,節(jié)點(diǎn)描述符1402c1-3存儲(chǔ)在稀疏子樹(shù)描述符1400c1中。子樹(shù)描述符14001在子樹(shù)存儲(chǔ)器400b中的位置取決于與稀疏子樹(shù)描述符1400c1有關(guān)的節(jié)點(diǎn)描述符1402c1-3的熟練。通過(guò)在子樹(shù)B22006中增加一個(gè)新路由,要為稀疏子樹(shù)描述符1400c1存儲(chǔ)的節(jié)點(diǎn)描述符1402c1-1402c3的數(shù)量從2增加到3。稀疏子樹(shù)描述符1400c1存儲(chǔ)在每個(gè)稀疏子樹(shù)描述符含有3個(gè)節(jié)點(diǎn)描述符的子樹(shù)入口404c中,并且將模式字段1404設(shè)置為“2”。如果有可用空間或分配了新模式3的子樹(shù)入口,那么稀疏子樹(shù)描述符1400c1存儲(chǔ)在當(dāng)前模式3的子樹(shù)入口404c中。子樹(shù)B2’2008中路由的節(jié)點(diǎn)描述符存儲(chǔ)在模式3的子樹(shù)入口404c中稀疏子樹(shù)描述符1400c1中的節(jié)點(diǎn)描述符1402c1-3中。
把稀疏子樹(shù)描述符1400c1和節(jié)點(diǎn)描述符1402c1-3存儲(chǔ)到子樹(shù)存儲(chǔ)器400b后,可以訪問(wèn)子樹(shù)B2’2008。為提供對(duì)子樹(shù)B2’2008的訪問(wèn),修改子樹(shù)入口504a4在索引子樹(shù)入口404c中索引稀疏子樹(shù)描述符1400b1而不是在子樹(shù)入口404b中索引稀疏子樹(shù)描述符1400c1??梢栽L問(wèn)映射程序入口504c4中存儲(chǔ)的路由h2的路由入口和相應(yīng)映射程序入口504c2和504c3中分別存儲(chǔ)的路由r6和h1。
由于不能再訪問(wèn)映射程序入口504b1-504b3,所以將它們釋放并放置在空閑列表(未示出)中等待以后分配。另外,也不能再訪問(wèn)稀疏子樹(shù)描述符1400b1。因此,稀疏子樹(shù)描述符1400b1被釋放并放置在空閑列表(未顯示)中等待以后分配。
已經(jīng)描述了向稀疏子樹(shù)中增加路由。也可以通過(guò)在新分配的子樹(shù)入口404中存儲(chǔ)新的密集子樹(shù)描述符以及在子樹(shù)映射程序418中存儲(chǔ)對(duì)應(yīng)的映射程序入口,并且將映射程序入口504a4中存儲(chǔ)的子樹(shù)入口改為索引新分配的子樹(shù)入口404來(lái)向密集子樹(shù)中增加路由。
圖26是說(shuō)明在圖25所示查詢(xún)表200中執(zhí)行增加路由的遞增更新步驟的流程圖。
在步驟2200中,計(jì)算每個(gè)子樹(shù)的路由數(shù)量以確定路由更新產(chǎn)生稀疏子樹(shù)還是密集子樹(shù)。如果路由更新后為密集子樹(shù),處理過(guò)程繼續(xù)到步驟2218。如果路由更新后為稀疏子樹(shù),處理過(guò)程繼續(xù)到步驟2202。
在步驟2202中,子樹(shù)是稀疏的,因此確定為稀疏子樹(shù)模式。處理過(guò)程繼續(xù)到步驟2204。
在步驟2204中,搜索子樹(shù)映射程序418(圖5)中存儲(chǔ)的部分填充的子樹(shù)入口404的列表以確定是否可將新的稀疏子樹(shù)描述符1400c1存儲(chǔ)在前面分配的子樹(shù)入口404中。例如,可將4個(gè)稀疏子樹(shù)描述符1400c1-1400c4存儲(chǔ)在模式4的子樹(shù)入口404中。如果只存儲(chǔ)了3個(gè),子樹(shù)入口404被部分填充并且存儲(chǔ)在部分填充的子樹(shù)入口404的列表中。如果有可用的部分填充的子樹(shù)入口404,處理過(guò)程繼續(xù)到步驟2208。否則,處理過(guò)程繼續(xù)到步驟2206。
在步驟2206中,分配新的子樹(shù)入口404c以便存儲(chǔ)稀疏子樹(shù)描述符1400c1,并且在為新分配的子樹(shù)入口404c中的稀疏子樹(shù)描述符1400c1中存儲(chǔ)的節(jié)點(diǎn)描述符1402c1-1402c3存儲(chǔ)映射程序入口504(圖6B)的子樹(shù)映射程序中分配映射程序入口504c1-504c4。把指向子樹(shù)映射程序418(圖5)中分配的映射程序入口504c1-504c4塊的指針存儲(chǔ)在新子樹(shù)入口404c的指針字段408中。處理過(guò)程繼續(xù)到步驟2208。
在步驟2208中,從子樹(shù)入口404c中指針字段408中存儲(chǔ)的指針和子樹(shù)入口404c中模式字段1404中存儲(chǔ)的模式來(lái)確定稀疏子樹(shù)描述符1400c1的子樹(shù)映射程序中第一個(gè)映射程序入口504c1的位置。處理過(guò)程繼續(xù)到步驟2210。
在步驟2210中,將稀疏子樹(shù)的路由入口存儲(chǔ)在子樹(shù)映射程序418b中的映射程序入口504c1-504c4中。處理過(guò)程繼續(xù)到步驟2212。
在步驟2212中,把存儲(chǔ)節(jié)點(diǎn)描述符1402c1-1402c3的稀疏子樹(shù)描述符1400c1存儲(chǔ)在子樹(shù)入口404c中。處理過(guò)程繼續(xù)到步驟2214。
在步驟2214中,映射程序入口504a4中存儲(chǔ)的子樹(shù)入口描述符304(圖4)被修改為索引子樹(shù)入口404c中存儲(chǔ)的新稀疏子樹(shù)描述符1400c1?,F(xiàn)在可以訪問(wèn)映射程序入口504c4中存儲(chǔ)的h2的路由入口。處理過(guò)程繼續(xù)到步驟2216。
在步驟2216中,不能再訪問(wèn)映射程序入口504b1-504b3和稀疏子樹(shù)描述符1400b。將映射程序入口504b1-504b3放置在子樹(shù)映射程序418b的映射程序入口504(圖6B)的空閑列表中并且分配用來(lái)存儲(chǔ)其它路由。在部分填充的子樹(shù)入口的列表中更新子樹(shù)入口404b中的第一個(gè)可用位置。處理過(guò)程結(jié)束。
在步驟2218中,從處理器存儲(chǔ)器2400(圖24)中存儲(chǔ)的空閑子樹(shù)入口404的列表分配一個(gè)新的子樹(shù)入口404。分配新的子樹(shù)入口404用來(lái)存儲(chǔ)新的密集子樹(shù)描述符。分配子樹(shù)映射程序418b中的映射程序入口組504(圖6B)用于存儲(chǔ)這些路由。指向若干塊已分配的映射程序入口504(圖6B)的指針存儲(chǔ)在子樹(shù)入口404(圖5)中的指針字段408(圖7)中。處理過(guò)程繼續(xù)到步驟2220。
在步驟2220中,如前面結(jié)合圖6A-B描述的,將新的密集子樹(shù)描述符寫(xiě)入新子樹(shù)入口404中的數(shù)據(jù)字段406。處理過(guò)程繼續(xù)到步驟2222。
在步驟2222中,把密集子樹(shù)的路由入口存儲(chǔ)在由子樹(shù)入口404中的指針字段408中存儲(chǔ)的指針?biāo)R(shí)別的子樹(shù)映射程序418(圖5)中的映射程序入口504(圖6B)中。處理過(guò)程繼續(xù)到步驟2224。
在步驟2224中,修改映射程序入口504a4中存儲(chǔ)的子樹(shù)入口描述符304(圖4)以指向新的子樹(shù)入口404c中存儲(chǔ)的新密集子樹(shù)描述符?,F(xiàn)在可以訪問(wèn)映射程序入口504c4中存儲(chǔ)的h2的路由入口。處理過(guò)程繼續(xù)到步驟2226。
在步驟2226中,把由舊子樹(shù)入口404中的指針字段408中存儲(chǔ)的指針指向的映射程序入口504(圖6B)返回到處理器存儲(chǔ)器2400(圖24)中存儲(chǔ)的映射程序入口的空閑列表。舊的子樹(shù)入口404b添加到處理器存儲(chǔ)器2400(圖24)中存儲(chǔ)的空閑子樹(shù)入口列表中。
已經(jīng)描述了向查詢(xún)表添加路由的過(guò)程。執(zhí)行類(lèi)似的過(guò)程以便從查詢(xún)表刪除路由。例如,從子樹(shù)B2’2008中刪除h2 504c4需要存儲(chǔ)含有路由r6和h1的兩個(gè)節(jié)點(diǎn)描述符的新稀疏子樹(shù)描述符,在模式2的子樹(shù)入口中存儲(chǔ)稀疏子樹(shù)描述符,更新對(duì)應(yīng)的子樹(shù)映射程序并且習(xí)慣映射程序入口504a4中存儲(chǔ)的子樹(shù)入口描述符304(圖4)指向新子樹(shù)入口404中存儲(chǔ)的更新的子樹(shù)描述符。
雖然已經(jīng)參考優(yōu)選實(shí)施例特別給出和描述了本發(fā)明,本領(lǐng)域技術(shù)人員可以理解,在不脫離本發(fā)明所附權(quán)利要求的范圍的情況下可以對(duì)本發(fā)明的形式和細(xì)節(jié)進(jìn)行改變。
權(quán)利要求
1.一種查詢(xún)表,包括第一層映射程序,包括由搜索請(qǐng)求中提供的關(guān)鍵字的第一部分索引的多個(gè)第一存儲(chǔ)單元;和第二層映射程序,包括根據(jù)關(guān)鍵字的第二部分和索引的第一存儲(chǔ)單元之一中存儲(chǔ)的第一子樹(shù)選擇索引的多個(gè)第二存儲(chǔ)單元,發(fā)給查詢(xún)表的單個(gè)搜索請(qǐng)求產(chǎn)生與關(guān)鍵字對(duì)應(yīng)的值,該關(guān)鍵字存儲(chǔ)在一個(gè)映射程序中的一個(gè)位置中。
2.根據(jù)權(quán)利要求1所述的查詢(xún)表,其特征在于第二層映射程序還包括用來(lái)存儲(chǔ)由第一子樹(shù)選擇索引的子樹(shù)描述符的子樹(shù)存儲(chǔ)器;包括第二存儲(chǔ)單元的子樹(shù)映射程序;和根據(jù)所選擇的子樹(shù)描述符和關(guān)鍵字的第二部分為子樹(shù)映射程序提供映射程序索引的子樹(shù)映射程序。
3.根據(jù)權(quán)利要求2所述的查詢(xún)表,其特征在于子樹(shù)描述符還包括子樹(shù)的缺省值;一個(gè)位圖,該位圖包括子樹(shù)中每個(gè)可能的節(jié)點(diǎn)對(duì)應(yīng)的一位;和多個(gè)塊指針,每個(gè)塊指針存儲(chǔ)用來(lái)存儲(chǔ)該值的一組第二存儲(chǔ)單元的基地址。
4.根據(jù)權(quán)利要求3所述的查詢(xún)表,其特征在于位圖中與設(shè)置為“0”的節(jié)點(diǎn)對(duì)應(yīng)的一位表示該節(jié)點(diǎn)與前一個(gè)節(jié)點(diǎn)共享一個(gè)值。
5.根據(jù)權(quán)利要求3所述的查詢(xún)表,其特征在于對(duì)第二存儲(chǔ)單元的索引取決于位圖中在與該節(jié)點(diǎn)對(duì)應(yīng)的位之前存儲(chǔ)的“1”的數(shù)量。
6.根據(jù)權(quán)利要求5所述的查詢(xún)表,其特征在于子樹(shù)的映射程序中存儲(chǔ)的值的數(shù)量取決于位圖中存儲(chǔ)的“1”的數(shù)量。
7.根據(jù)權(quán)利要求3所述的查詢(xún)表,其特征在于一組包括16個(gè)第二存儲(chǔ)單元。
8.根據(jù)權(quán)利要求3所述的查詢(xún)表,其特征在于可能的節(jié)點(diǎn)的數(shù)量是256。
9.根據(jù)權(quán)利要求1所述的查詢(xún)表,進(jìn)一步包括第三層映射程序,該第三層映射程序包括根據(jù)關(guān)鍵字的第三部分和第二存儲(chǔ)單元之一中存儲(chǔ)的第二子樹(shù)選擇索引的多個(gè)第三存儲(chǔ)單元。
10.根據(jù)權(quán)利要求9所述的查詢(xún)表,進(jìn)一步包括第四層映射程序,該第四層映射程序包括根據(jù)關(guān)鍵字的第四部分和第三存儲(chǔ)單元之一中存儲(chǔ)的第三子樹(shù)選擇索引的多個(gè)第四存儲(chǔ)單元。
11.根據(jù)權(quán)利要求9所述的查詢(xún)表,其特征在于關(guān)鍵字為32位,關(guān)鍵字的第一部分為16位,關(guān)鍵字的第二部分為8位和關(guān)鍵字的第三部分為8位。
12.根據(jù)權(quán)利要求10所述的查詢(xún)表,其特征在于關(guān)鍵字為40位,關(guān)鍵字的第一部分為16位,關(guān)鍵字的第二部分為8位,關(guān)鍵字的第三部分為8位和關(guān)鍵字的第四部分為8位。
13.一種提供關(guān)鍵字的最長(zhǎng)前綴匹配的方法,包括步驟利用搜索請(qǐng)求中提供的關(guān)鍵字的第一部分在第一層映射程序中選擇第一位置;和在檢測(cè)索引的第一部分中存儲(chǔ)的第一子樹(shù)選擇時(shí),根據(jù)該關(guān)鍵字的第二部分和第一子樹(shù)選擇在第二層映射程序中選擇第二位置;和響應(yīng)對(duì)關(guān)鍵字的一次搜索請(qǐng)求,轉(zhuǎn)發(fā)與映射之一的一個(gè)位置中存儲(chǔ)的關(guān)鍵字對(duì)應(yīng)的值。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于選擇第二位置的步驟進(jìn)一步包括在子樹(shù)存儲(chǔ)器中選擇由第一子樹(shù)選擇索引的子樹(shù)描述符;根據(jù)所選擇的子樹(shù)描述符和關(guān)鍵字的第二部分確定子樹(shù)映射程序的映射程序索引;和利用映射程序索引在子樹(shù)映射程序中選擇第二存儲(chǔ)單元。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于選擇子樹(shù)描述符的步驟進(jìn)一步包括提供子樹(shù)的缺省值;提供一個(gè)位圖,該位圖包括子樹(shù)中每個(gè)可能的節(jié)點(diǎn)的一位;和提供多個(gè)塊指針,每個(gè)塊指針存儲(chǔ)一組第二存儲(chǔ)單元的基地址。
16.根據(jù)權(quán)利要求15所述的方法,其特征在于位圖中與設(shè)置為“0”的節(jié)點(diǎn)對(duì)應(yīng)的一位表示該節(jié)點(diǎn)與前一個(gè)節(jié)點(diǎn)共享一個(gè)值。
17.根據(jù)權(quán)利要求15所述的方法,其特征在于第二存儲(chǔ)單元的索引取決于位圖中與該節(jié)點(diǎn)對(duì)應(yīng)的位之前所存儲(chǔ)的“1”的數(shù)量。
18.根據(jù)權(quán)利要求17所述的方法,其特征在于子樹(shù)的映射程序中存儲(chǔ)的值的數(shù)量取決于位圖中存儲(chǔ)的“1”的數(shù)量。
19.根據(jù)權(quán)利要求15所述的方法,其特征在于一組包括16個(gè)第二存儲(chǔ)單元。
20.根據(jù)權(quán)利要求15所述的方法,其特征在于可能的節(jié)點(diǎn)數(shù)為256。
21.根據(jù)權(quán)利要求13所述的方法,其特征在于進(jìn)一步包括步驟在檢測(cè)第二位置中存儲(chǔ)的第二子樹(shù)選擇時(shí),根據(jù)關(guān)鍵字的第三部分和第二子樹(shù)選擇來(lái)選擇第三層映射程序中的第三位置。
22.根據(jù)權(quán)利要求21所述的方法,進(jìn)一步包括步驟在檢測(cè)第三位置中存儲(chǔ)的第三子樹(shù)選擇時(shí),根據(jù)關(guān)鍵字的第四部分和第三子樹(shù)選擇來(lái)選擇第四層映射程序中的第四位置。
23.根據(jù)權(quán)利要求21所述的方法,其特征在于關(guān)鍵字為32位,關(guān)鍵字的第一部分為16位,關(guān)鍵字的第二部分為8位和關(guān)鍵字的第三部分為8位。
24.根據(jù)權(quán)利要求22所述的方法,其特征在于關(guān)鍵字為40位,關(guān)鍵字的第一部分為16位,關(guān)鍵字的第二部分為8位,關(guān)鍵字的第三部分為8位和關(guān)鍵字的第四部分為8位。
25.一種查詢(xún)表,包括第一層映射程序,該第一層映射程序包括由搜索請(qǐng)求中提供的關(guān)鍵字的第一部分索引的多個(gè)第一存儲(chǔ)單元;第二層映射程序,該第二層映射程序包括根據(jù)關(guān)鍵字的第二部分和索引的第一存儲(chǔ)單元之一中存儲(chǔ)的第一子樹(shù)選擇來(lái)索引的多個(gè)第二存儲(chǔ)單元;和用于從發(fā)向查詢(xún)表的單個(gè)搜索請(qǐng)求轉(zhuǎn)發(fā)與映射程序之一中的位置中存儲(chǔ)的關(guān)鍵字對(duì)應(yīng)的值的裝置。
26.根據(jù)權(quán)利要求25所述的查詢(xún)表,其特征在于第二層映射程序進(jìn)一步包括存儲(chǔ)由第一子樹(shù)選擇索引的子樹(shù)描述符的子樹(shù)存儲(chǔ)器;包括第二存儲(chǔ)單元的子樹(shù)映射程序;和根據(jù)所選擇的子樹(shù)描述符和關(guān)鍵字的第二部分來(lái)提供子樹(shù)映射程序的映射程序索引的裝置。
27.根據(jù)權(quán)利要求26所述的查詢(xún)表,其特征在于子樹(shù)描述符進(jìn)一步包括子樹(shù)的缺省值;一個(gè)位圖,該位圖包含子樹(shù)中每個(gè)可能的節(jié)點(diǎn)的一位;和多個(gè)塊指針,每個(gè)塊指針存儲(chǔ)一組第二存儲(chǔ)單元的基地址。
28.根據(jù)權(quán)利要求27所述的查詢(xún)表,其特征在于位圖中與設(shè)置為“0”的節(jié)點(diǎn)對(duì)應(yīng)的一位表示該節(jié)點(diǎn)與前一個(gè)節(jié)點(diǎn)共享一個(gè)值。
29.根據(jù)權(quán)利要求27所述的查詢(xún)表,其特征在于第二存儲(chǔ)單元的索引取決于位圖中與該節(jié)點(diǎn)對(duì)應(yīng)的位之前所存儲(chǔ)的“1”的數(shù)量。
30.根據(jù)權(quán)利要求29所述的查詢(xún)表,其特征在于子樹(shù)的映射程序中存儲(chǔ)的值的數(shù)量取決于位圖中存儲(chǔ)的“1”的數(shù)量。
31.根據(jù)權(quán)利要求27所述的查詢(xún)表,其特征在于一組包括16個(gè)第二存儲(chǔ)單元。
32.根據(jù)權(quán)利要求27所述的查詢(xún)表,其特征在于可能的節(jié)點(diǎn)的數(shù)量為256。
33.根據(jù)權(quán)利要求25所述的查詢(xún)表,進(jìn)一步包括第三層映射程序,該第三層映射程序包括根據(jù)關(guān)鍵字的第三部分和第二存儲(chǔ)單元之一中存儲(chǔ)的第二子樹(shù)選擇索引的多個(gè)第三存儲(chǔ)單元。
34.根據(jù)權(quán)利要求33所述的查詢(xún)表,進(jìn)一步包括第四層映射程序,該第四層映射程序包括根據(jù)關(guān)鍵字的第四部分和第三存儲(chǔ)單元之一中存儲(chǔ)的第三子樹(shù)選擇索引的多個(gè)第四存儲(chǔ)單元。
35.根據(jù)權(quán)利要求33所述的查詢(xún)表,其特征在于關(guān)鍵字為32位,關(guān)鍵字的第一部分為16位,關(guān)鍵字的第二部分為8位和關(guān)鍵字的第三部分為8位。
36.根據(jù)權(quán)利要求35所述的查詢(xún)表,其特征在于關(guān)鍵字為40位,關(guān)鍵字的第一部分為16位,關(guān)鍵字的第二部分為8位,關(guān)鍵字的第三部分為8位和關(guān)鍵字的第四部分為8位。
37.一種提供IP地址的最長(zhǎng)前綴匹配的查詢(xún)表,包括第一層映射程序,包括由搜索請(qǐng)求中提供的IP地址的第一部分索引的多個(gè)第一存儲(chǔ)單元;和第二層映射程序,包括根據(jù)IP地址的第二部分和索引的第一存儲(chǔ)單元之一中存儲(chǔ)的第一子樹(shù)選擇索引的多個(gè)第二存儲(chǔ)單元,發(fā)給查詢(xún)表的單個(gè)搜索請(qǐng)求產(chǎn)生與IP地址對(duì)應(yīng)的最長(zhǎng)前綴匹配,該最長(zhǎng)前綴匹配存儲(chǔ)在一個(gè)映射程序中的一個(gè)位置中。
38.根據(jù)權(quán)利要求37所述的查詢(xún)表,其特征在于第二層映射程序進(jìn)一步包括用來(lái)存儲(chǔ)由第一子樹(shù)選擇索引的子樹(shù)描述符子樹(shù)存儲(chǔ)器;包括第二存儲(chǔ)單元的子樹(shù)映射程序;和根據(jù)所選擇的子樹(shù)描述符和IP地址的第二部分為子樹(shù)映射程序提供映射程序索引的映射程序地址邏輯。
39.根據(jù)權(quán)利要求38所述的查詢(xún)表,其特征在于子樹(shù)描述符進(jìn)一步包括子樹(shù)的缺省值;一個(gè)位圖,該位圖包括子樹(shù)中每個(gè)可能的節(jié)點(diǎn)對(duì)應(yīng)的一位;和多個(gè)塊指針,每個(gè)塊指針存儲(chǔ)用來(lái)存儲(chǔ)最長(zhǎng)前綴匹配的一組第二存儲(chǔ)單元的基地址。
40.根據(jù)權(quán)利要求39所述的查詢(xún)表,其特征在于位圖中與設(shè)置為“0”的節(jié)點(diǎn)對(duì)應(yīng)的一位表示該節(jié)點(diǎn)與前一個(gè)節(jié)點(diǎn)共享塊指針。
41.根據(jù)權(quán)利要求39所述的查詢(xún)表,其特征在于對(duì)第二存儲(chǔ)單元的索引取決于位圖中在與該節(jié)點(diǎn)對(duì)應(yīng)的位之前存儲(chǔ)的“1”的數(shù)量。
42.根據(jù)權(quán)利要求41所述的查詢(xún)表,其特征在于子樹(shù)的映射程序中存儲(chǔ)的值的數(shù)量取決于位圖中存儲(chǔ)的“1”的數(shù)量。
43.根據(jù)權(quán)利要求39所述的查詢(xún)表,其特征在于一組包括16個(gè)第二存儲(chǔ)單元。
44.根據(jù)權(quán)利要求39所述的查詢(xún)表,其特征在于可能的節(jié)點(diǎn)的數(shù)量為256。
45.根據(jù)權(quán)利要求37所述的查詢(xún)表,進(jìn)一步包括第三層映射程序,該第三層映射程序包括根據(jù)IP地址的第三部分和第二存儲(chǔ)單元之一中存儲(chǔ)的第二子樹(shù)選擇索引的多個(gè)第三存儲(chǔ)單元。
46.根據(jù)權(quán)利要求45所述的查詢(xún)表,進(jìn)一步包括第四層映射程序,該第四層映射程序包括根據(jù)IP地址的第四部分和第三存儲(chǔ)單元之一中存儲(chǔ)的第三子樹(shù)選擇索引的多個(gè)第三存儲(chǔ)單元。
47.根據(jù)權(quán)利要求45所述的查詢(xún)表,其特征在于IP地址為32位,IP地址的第一部分為16位,IP地址的第二部分為8位和IP地址的第三部分為8位。
48.根據(jù)權(quán)利要求46所述的查詢(xún)表,其特征在于IP地址為40位,IP地址的第一部分為16位,IP地址的第二部分為8位,IP地址的第三部分為8位和IP地址的第四部分為8位。
全文摘要
一種為搜索請(qǐng)求中提供的關(guān)鍵字提供最長(zhǎng)前綴匹配的查詢(xún)表。在發(fā)到查詢(xún)表的單個(gè)搜索請(qǐng)求中提供搜索關(guān)鍵字。查詢(xún)表根據(jù)該關(guān)鍵字的逐個(gè)部分對(duì)結(jié)果值進(jìn)行多層搜索。
文檔編號(hào)G11C15/00GK1435031SQ00818946
公開(kāi)日2003年8月6日 申請(qǐng)日期2000年12月8日 優(yōu)先權(quán)日1999年12月10日
發(fā)明者大衛(wèi)·A·布朗 申請(qǐng)人:睦塞德技術(shù)公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
常山县| 贵溪市| 岳池县| 晋江市| 卢龙县| 岑溪市| 玛多县| 保亭| 鞍山市| 宝应县| 隆林| 五华县| 旺苍县| 水城县| 潜江市| 湖口县| 玉环县| 都匀市| 东至县| 昌平区| 嵩明县| 大悟县| 旬阳县| 肇州县| 利津县| 屯留县| 宁南县| 张北县| 依安县| 临海市| 太原市| 开化县| 临西县| 明水县| 镇康县| 普陀区| 兴义市| 克山县| 华池县| 西畴县| 财经|