專利名稱:最長匹配地址查詢的方法和裝置的制作方法
技術(shù)領(lǐng)域:
因特網(wǎng)是由路由器連接的一組網(wǎng)絡(luò)。路由器維護(hù)表示每個可能的目的網(wǎng)絡(luò),即接收的數(shù)據(jù)包應(yīng)被轉(zhuǎn)發(fā)到的下一跳的路由表。下一跳可以是另一個路由器或最終的目的地。
背景技術(shù):
在路由器中的端口接收的網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)包包括一個IP目的地址。該IP目的地址是該IP數(shù)據(jù)包的最終目的地。目前,存在兩種版本的IP,IP版本4(“IPv4”)和IP版本6(“IPv6”)。IPv4提供包含在用來存儲IP目的地址的數(shù)據(jù)包中IP首部中的32位字段。根據(jù)存儲在IP首部中的IP目的地址,如果目的地在本地網(wǎng),路由器轉(zhuǎn)發(fā)接收到的與下一跳路由器或最終目的地相連的數(shù)據(jù)包。
一個32位的IPv4目的地址提供40億個可能的路由。一個互連網(wǎng)路由器通常存儲40億個可能的路由中的5萬個路由。然而,存儲的路由數(shù)量會隨著互連網(wǎng)的發(fā)展和IPv6的普及而增加。
起初,IP地址空間分為A,B和C三類IP地址。每個IP地址空間分為網(wǎng)絡(luò)地址和主機地址。A類可容納126個網(wǎng)絡(luò),每個網(wǎng)絡(luò)可包含16,000,000臺主機。B類可容納16382個網(wǎng)絡(luò),每個網(wǎng)絡(luò)可包含64,000臺主機,以及C類可容納2,000,000個網(wǎng)絡(luò),每個網(wǎng)絡(luò)可包含256臺主機。然而,將IP地址空間劃分為不同的類減少了可用IP地址的數(shù)量。C類只允許每個網(wǎng)絡(luò)最多256臺主機對于大多數(shù)組織來說太少了。因此,大多數(shù)組織分配到一個B類地址,多達(dá)64,000個主機地址,這些地址即使該組織用不了也不能由其它組織使用。具有B類IP地址的組織的主機都在16位最高有效位(“MSBs”)中存儲相同的網(wǎng)絡(luò)地址,例如27.32.xx.xx。
引入無級域間路由(“CIDR”)以便釋放未使用的IP主機地址。剩余的未使用網(wǎng)絡(luò)分配給規(guī)模不同的組織。一個需要500個地址的組織得到500個連續(xù)的地址。例如,一個組織可以分配到以128.32.xx為起始的500個可用地址。自從引入了無級域間路由,增加了存儲在路由器中的路由數(shù)量。無級域間路由需要最長前綴匹配來尋找相應(yīng)路由來代替為找到相應(yīng)的IP目的地址的下一跳而尋找匹配的網(wǎng)絡(luò)地址。例如,因為128.32.4.xx可能已經(jīng)分配給其它需要不同下一跳的組織,所以在B類IP地址的16MSB,例如128.xx.xx之后,不再停止尋找。
一種用來查詢關(guān)鍵字最長前綴匹配的方法是使用二叉樹搜索。二叉樹搜索與輸入的32位逐位匹配到32層,需要32次搜索才能找到與32位關(guān)鍵字匹配的入口。另一種搜索匹配的方法是使用Patricia樹。如果二叉樹沒有入口的葉子,Patricia樹減少所需的搜索次數(shù)。
Brodnick等人于1998年5月11日提交的題為“快速路由查詢的方法和系統(tǒng)”,序號為PCT/SE98/00854的PCT申請中描述了有效地搜索與IP目的地址有關(guān)的下一跳的另一種方法。Brodnick描述的方法通過不再存儲重復(fù)路由來減少所存儲的下一跳的數(shù)量。通過減少下一跳的數(shù)量,減小了對內(nèi)存的需求,因此路由查詢表可以存儲在快速超高速緩沖存儲器中。
Brodnick等人將二叉樹劃分為三層。將二叉樹劃分為三層使搜索次數(shù)減少到三。第一層中的索引入口表示搜索是否可以利用從入口獲得的路由在第一層結(jié)束,或者該搜索必須利用IP目的地址另外的部分將繼續(xù)到下一層。
圖1A說明了表示二叉樹第一層的現(xiàn)有技術(shù)的64K(65536)位表。64K位表30代表在深度16層的二叉樹的葉子或節(jié)點44,每個節(jié)點44對應(yīng)一位。位表被劃分為長度為16的位屏蔽。在64K位表中共有212=4096個位屏蔽。圖1A中顯示了一個位屏蔽。如果有子樹或路由索引存儲在與節(jié)點44對應(yīng)的指針數(shù)組中,則位表30中的一位賦置為“1”。如果該節(jié)點與前一節(jié)點44共享路由入口,則位表30中的一位賦置為“0”。
圖1B說明了在超高速緩沖存儲器中實現(xiàn)查詢表的當(dāng)前技術(shù)。查詢表包括碼字?jǐn)?shù)組36,基索引數(shù)組34和映射表40。圖1B中還顯示了32位IP地址38。針對位表30(圖1A)中的每個位屏蔽,將碼字46存儲在碼字?jǐn)?shù)組36中。碼字46包括一個6位的值46a和一個10位的位移46b。針對碼字?jǐn)?shù)組36的數(shù)組中的每四個碼字46,將基索引42存儲在基索引數(shù)組34中。
碼字?jǐn)?shù)組36,基索引數(shù)組34和映射表40用來在指針數(shù)組(未顯示)中選擇指針。指針存儲一個路由索引或一個索引以便執(zhí)行進(jìn)一步的搜索。
通過在碼字?jǐn)?shù)組36中選擇碼字46和在基索引數(shù)組34中選擇基索引42來在指針數(shù)組中選擇一組指針。利用IP地址38的前12位50來選擇碼字46。利用IP地址38的前10位來選擇基索引42。利用映射表32在一組指針中選擇正確的指針。
所選碼字36中10位的值46b作為到映射表32的索引。映射表32將一個位屏蔽中的位數(shù)映射到4位的位移。該位移指定在指針數(shù)組中所選的一組指針中的指針。10位的值46b選擇映射表32中的行,并且IP地址52的位1916選擇4位的位移54。
這樣,搜索指針需要下面的超高速緩沖存儲器訪問(1)讀取16位碼字46;(2)讀取16位基地址42;(3)從映射表32中讀取4位位移54;(4)從指針?biāo)饕x取指針,其中指針?biāo)饕腔刂?2,碼字位移46a和4位位移54之和。
二叉樹的每一層需要同樣的存儲器訪問。這樣,3層的搜索需要訪問存儲器12次。
發(fā)明內(nèi)容
David A.Brown提交的代理案編號2037.2004-001,題為“長匹配地址查詢的方法和裝置”描述了用來執(zhí)行多層搜索符合關(guān)鍵字的值的查詢表。能夠存儲在查詢表中的路由索引的數(shù)量由查詢表中存儲單元的數(shù)量來限制。
根據(jù)本發(fā)明的原理,給出包括第一查詢單元和第二查詢單元的查詢表。第一查詢單元接收關(guān)鍵字并且通過第一單元中的多層搜索提供第一結(jié)果。第二查詢單元接收關(guān)鍵字并且通過第二單元中的多層搜索提供第二結(jié)果。第一查詢單元和第二查詢單元二者都并行地接收關(guān)鍵字,但根據(jù)第一結(jié)果和第二結(jié)果,只有一個單元提供只存儲在一個查詢單元中的關(guān)鍵字的最終結(jié)果。
根據(jù)存儲在查詢表中的最終結(jié)果的總數(shù)將最終結(jié)果分配到表中。關(guān)鍵字可以是IP地址,最終結(jié)果是IP地址的路由索引。
由關(guān)鍵字索引的第一查詢單元中的第一存儲單元存儲最終結(jié)果,由關(guān)鍵字索引的第二查詢單元中的第二存儲單元存儲最終結(jié)果存儲在第一查詢單元的指示。第一查詢單元和第二查詢單元都包括多個映射程序?qū)硬⑶颐恳粋€映射程序?qū)影ㄓ糜诖鎯Y(jié)果的存儲單元。
在一個實施例中,把與存儲在第一查詢單元中的多個映射程序?qū)拥娜魏我粚又械膯卧械年P(guān)鍵詞對應(yīng)的最終結(jié)果轉(zhuǎn)發(fā)到第二查詢單元,并由第一查詢單元提供。
在另一個實施例中,由存儲最終結(jié)果的查詢單元提供與該關(guān)鍵字對應(yīng)的最終結(jié)果。
圖1A示出代表二叉樹第一層的現(xiàn)有技術(shù)的位表;圖1B示出在超高速緩沖存儲器中實現(xiàn)的現(xiàn)有技術(shù)的查詢表;圖2A示出根據(jù)本發(fā)明原理的最長匹配前綴查詢表;圖2B示出存儲在圖2A所示的查詢表中的路由索引的二叉樹表示;圖3示出根據(jù)本發(fā)明原理的40位關(guān)鍵字的最長匹配前綴查詢表;圖4示出能夠存儲在圖2A所示的直接映射的映射程序的映射程序入口的類型;圖5示出對應(yīng)圖2B所示的映射程序?qū)? 112b中的節(jié)點的映射程序;圖6A是子樹的二叉樹表示;圖6B示出對應(yīng)圖6A所示的子樹底層中的節(jié)點的圖5所示的數(shù)據(jù)字段中存儲的密集子樹描述符。
圖7示出圖5所示的ptr字段;圖8示出圖5所示的映射程序地址邏輯;圖9是說明搜索最長匹配的步驟的流程圖;圖10A示出提供深度擴(kuò)展的實施例;
圖10B示出圖10A所示的實施例中的一個查詢表;圖10C示出通過提供深度擴(kuò)展來增加可用于存儲值的映射程序入口數(shù)量的另一個實施例;圖10D示出圖10C所示的實施例中的副查詢表;圖11A-B示出在圖10A和10C所示查詢表中的映射程序入口中圖2B所示路由索引的二叉樹表示中節(jié)點分配的二叉樹表示。
圖12是說明在圖10A和10C所示的查詢表中的映射程序入口中分配值的方法的流程圖;圖13是說明搜索與圖10C所示的查詢表中一個映射程序入口中存儲的搜索關(guān)鍵字對應(yīng)的值的方法的流程圖;圖14是說明搜索與圖10A所示的查詢表中一個映射程序入口中存儲的搜索關(guān)鍵字對應(yīng)的值的方法的流程圖;圖15示出由第一映射程序?qū)铀饕牡诙成涑绦驅(qū)又邢∈枳訕浜兔芗訕涞亩鏄浔硎荆粓D16A-C示出在圖5所示子樹入口和圖4所示子樹入口中數(shù)據(jù)字段和指針字段的修改以便在子樹入口中允許存儲多個稀疏子樹描述符;圖17示出圖8所示位移邏輯中稀疏模式子樹邏輯以選擇稀疏居住子樹中節(jié)點的塊位移;圖18示出圖17中位移邏輯中所示的稀疏模式邏輯;圖19A-D示出在稀疏居住子樹中為節(jié)點選擇塊位移;圖20是說明圖8所示指針邏輯中稀疏模式基本選擇邏輯的方框圖;圖21示出在子樹存儲器中存儲的密集子樹描述符和稀疏子樹描述符;圖22是說明向為稀疏居住子樹和密集居住子樹中的節(jié)點存儲路由的子樹映射程序中的映射程序入口提供映射程序地址的方法的流程圖;圖23示出將要加到查詢表的新路由的二叉樹表示;圖24示出更新處理器存儲器中存儲的路由;圖25示出查詢表中存儲的圖23所示的新路由;圖26是說明向圖25所示查詢表中增加新路由的步驟的流程圖。
本發(fā)明前面所述的及其它目的,特征和優(yōu)點將通過下面參考本發(fā)明實施例的具體描述更加顯而易見,不同附圖中的相同部分用同一參考符號表示。附圖不必放大,強調(diào)只起說明本發(fā)明原理的作用。
具體實施例方式
下面描述本發(fā)明的優(yōu)選實施例。密集模式圖2A示出根據(jù)本發(fā)明原理的最長匹配前綴查詢表100。查詢表100提供對應(yīng)關(guān)鍵字104的路由索引102。路由索引102用來訪問對應(yīng)IP目的地址的下一跳。在圖2A所示的實施例中,關(guān)鍵字104為32位,但是關(guān)鍵字104不必限制在32位。查詢表100包括3個映射程序106a-c。每個映射程序106a-c包括獨立的地址存儲器。對應(yīng)關(guān)鍵字104的路由索引102或缺省路由索引存儲在映射程序106a-c之一的一個單元中。如果需要搜索多個映射程序,來自每個映射程序的映射程序輸出110a-c存儲在延遲存儲器150a-c中,直到所有映射程序106a-c已訪問了關(guān)鍵字。
多路復(fù)用器108選擇轉(zhuǎn)發(fā)到多路復(fù)用器108輸入端中的一個映射程序輸出110a-c作為路由索引102。根據(jù)映射程序輸出110a-c的最高有效位(“MSB”)來選擇映射程序輸出110a-c。僅當(dāng)映射程序輸出110a-c包括路由索引102時,將映射程序輸出110a-c的MSB置為“1”。
圖2B說明了圖2A所示的查詢表100中映射程序106a-c中存儲的入口的二叉樹表示。結(jié)合圖2A來描述圖2B。32位關(guān)鍵字104可以表示為32層二叉樹。二叉樹實現(xiàn)需要32次搜索,以便按位向下搜索到32層。為減少搜索次數(shù),將32層的二叉樹分為每個映射程序?qū)?12a-c對應(yīng)一個映射程序106a-c(圖2A)的3個映射程序?qū)?12a-c。映射程序?qū)? 112a包括32層二叉樹的前16層。然而,為簡單起見,圖2B中只顯示了16層中的5層。映射程序?qū)? 112b包括32層二叉樹接下來的8層,圖2B顯示了8層中的3層。映射程序?qū)?包括32層二叉樹的最后8層,圖1B顯示了8層中的3層。每個映射程序?qū)?12a-c包括多個節(jié)點。將32層這樣分配,使映射程序?qū)? 112a中包括16層(關(guān)鍵字104的16MSB),映射程序?qū)? 112b中包括8層以及映射程序?qū)?中包括8層對當(dāng)前存儲器技術(shù)顯然是最適宜的;然而,本發(fā)明不受這種配置的限制。
取代對關(guān)鍵字104的前16位進(jìn)行16次分別的逐位搜索,而是將與關(guān)鍵字104的前16位有關(guān)的路由索引102存儲在映射程序106a中(圖2A)。映射程序106a(圖2A)直接由關(guān)鍵字104的前16位MSBs索引。根據(jù)前一個映射程序106a是否存儲了用于訪問與關(guān)鍵字104有關(guān)的下一跳信息的路由索引102來搜索接下來的映射程序106b。
如圖2B所示,映射程序?qū)? 112a所示的節(jié)點或葉子包括分別標(biāo)為r0和r1的兩個路由114,116,以及分別標(biāo)為s0和s1的指向映射程序?qū)? 112b中1304和13023的兩個指針。對應(yīng)每個路由114,116的路由索引102存儲在L1映射程序106a中。另外,為子樹索引1304存儲L2映射程序106b的地址指針120,為子樹索引13023存儲L2映射106b的地址指針(未示出)。在映射程序106a中的映射程序入口1404中為子樹索引1304存儲的地址指針120表示為了尋找與關(guān)鍵字104有關(guān)的路由索引102所需的下一層的搜索。
樹中任何節(jié)點的值可以通過跟蹤從根114開始的路徑來確定。所示二叉樹中的每個節(jié)點有兩個子節(jié)點,右子節(jié)點和左子節(jié)點。如果父節(jié)點為“1”,選擇右子節(jié)點。如果父節(jié)點為“0”,選擇左子節(jié)點。跟蹤從根114到節(jié)點116的路徑,對于所有MSB置為“010”的關(guān)鍵字,r1作為路由索引102存儲在L1映射程序106a中。跟蹤從根114到s0節(jié)點1304的路徑,對于所有MSBs置為“00011”的關(guān)鍵字,s0存儲在L1映射程序106a中。
L1映射106a是直接映射的映射程序并且存儲映射程序?qū)? 112a的底層的每個底層節(jié)點或葉子的路由索引102。映射程序?qū)? 112a的底層是32層二叉樹的第16層。第16層有64K個節(jié)點。但是,為了說明的目的,所示映射程序?qū)? 112a的底層作為32層二叉樹的第五層顯示。L1映射程序106a所示的路由索引102對應(yīng)映射程序?qū)? 112a的第五層節(jié)點1301-13032。跟蹤從根節(jié)點114到第五層節(jié)點1301,1302,1303的路徑,路由索引102為r0。因此r0存儲在L1映射程序106a的位置1401,1402,1403中;即在索引00000,00001和00010。節(jié)點1304存儲子樹索引s0,因此s0存儲在L1映射程序106a中地址為00011的位置1404。類似地,第五層節(jié)點1305-1308的路由索引102是r0,因此r0存儲在L1映射程序106a中地址為00100,00101,00110和00111的位置1405,1406,1407,1408。對應(yīng)第五層節(jié)點1309-13012的路由索引102是r1,因此r1存儲在L1映射程序106a中地址為01000和01001的位置1409,14010。
在L1映射程序106a的每個位置存儲直接分配給第五層節(jié)點3001-30032或通過第五層節(jié)點3001-32的父節(jié)點分配或指向下一個映射程序106b-c的地址指針的路由索引102。映射程序?qū)? 106c包括在32層二叉樹底層的節(jié)點138的主節(jié)點h0和在節(jié)點140的主節(jié)點h1。對主節(jié)點的搜索需要搜索關(guān)鍵字104的所有位。如圖2A所示,h0的路由索引102存儲在L3映射程序106c中的位置1464中。與L1映射程序106a不同,L2映射程序106b和L3映射程序106c不是直接映射。
在映射程序106b和106c中,不為每個可能的輸入而存儲路由索引102。僅當(dāng)節(jié)點的路由索引102與映射程序106b-c中存儲的前一個路由索引102不同時才存儲路由索引102。請看映射程序?qū)? 112b中所示的第一子樹A中的第三層節(jié)點,節(jié)點1321和節(jié)點1322的路由索引102是r0,因此r0對應(yīng)的路由索引存儲在L2映射程序106b中的節(jié)點1321和節(jié)點1322對應(yīng)的位置1421中。節(jié)點1322的子樹索引存儲在位置1422中。與第三層節(jié)點1324和第三層節(jié)點1325和1326有關(guān)的路由索引102為r0,與存儲前一個節(jié)點1322的s0不同,r0存儲在L2映射程序106b中的下一個位置1423。因為節(jié)點1327不與前一節(jié)點1326共享同一路由,所以對應(yīng)節(jié)點1327的路由r2存儲在L2映射程序106b中的位置1424中。為下一個第三層的節(jié)點1327存儲子樹索引s3,因此,s3存儲在L2映射程序106b中的位置1425中。由于僅當(dāng)與前一節(jié)點的路由不同時才存儲路由索引,因此減少了用于存儲路由索引102所需的內(nèi)存。如圖所示,只需要L2映射程序106b中的5個位置來存儲映射層2 112b中第一子樹A的8個第三層節(jié)點1321-8對應(yīng)的路由索引。對于非直接映射106b、106c將在后面結(jié)合圖5詳細(xì)描述。
圖3說明了根據(jù)本發(fā)明原理的對應(yīng)40位關(guān)鍵字210的最長匹配前綴查詢表200。在一個實施例中,40位關(guān)鍵字包括8位前綴和32位IP地址。8位前綴可以是與32位IP地址有關(guān)的虛擬專用網(wǎng)(“VPN”)的標(biāo)識符。查詢表200包括4個映射程序106a-d。如結(jié)合圖2A所描述過的,映射程序106a是直接映射的映射程序。映射程序106b-d是間接映射。映射程序106a存儲路由索引102或?qū)?yīng)40位關(guān)鍵字210的16個MSB的L2映射程序106b的子樹索引。這樣,L1映射程序具有64K個可能的位置,第一映射程序?qū)?12a(圖2B)的64K個節(jié)點中的每一個節(jié)點對應(yīng)一個位置。存儲在L1映射程序106a中對應(yīng)位置的L1映射程序入口數(shù)據(jù)220a轉(zhuǎn)發(fā)到管道208和L2間接映射程序106b。如果L1映射程序入口數(shù)據(jù)220a表明下一層的搜索需要利用關(guān)鍵字210b接下來的8位,那么根據(jù)關(guān)鍵字210b接下來的8位和L1映射程序入口數(shù)據(jù)220a在L2間接映射程序106b中執(zhí)行搜索。
第二層搜索的結(jié)果提供在轉(zhuǎn)發(fā)到管道208和L3間接映射程序106c的L2映射程序入口數(shù)據(jù)220b上。根據(jù)關(guān)鍵字210c接下來的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來確定是否在L4間接映射程序106d中執(zhí)行第四層搜索。
第四層的搜索結(jié)果提供在L4映射程序入口數(shù)據(jù)220d上。與關(guān)鍵字210的最長匹配前綴有關(guān)的路由索引102只存儲在映射106a-d其中一個的一個位置。因此,轉(zhuǎn)發(fā)到管道208的路由索引102只包含在映射程序入口數(shù)據(jù)220a-d之一中。如果在映射程序106a-d的其中一個中找到路由索引102,例如在106b中,則不需要對余下的映射程序106c-d進(jìn)行搜索和訪問。管道208包括用來選擇映射程序入口數(shù)據(jù)220a-d之一中包含的路由索引102的多路復(fù)用器108(圖2A)。例如,映射程序入口數(shù)據(jù)220a-d的MSB能夠提供是否包含路由索引的指示。
通過將管道208與映射程序106a-d結(jié)合使用,可以并行執(zhí)行對具有不同關(guān)鍵字210的最長匹配前綴表200的多重搜索。管道208通過存儲與40位關(guān)鍵字210有關(guān)的每個映射程序106a-d的映射程序入口數(shù)據(jù)220a-d,允許并行執(zhí)行40位查詢表200的多重搜索,直到映射106a-d的每個搜索都已完成,如果必要,尋找對應(yīng)40位關(guān)鍵字210的路由索引。因此,對應(yīng)所接收的IP地址的路由索引的搜索請求通過對直接映射的映射程序106a執(zhí)行一次內(nèi)存訪問來發(fā)送給查詢表200。對應(yīng)于另一個關(guān)鍵字的路由索引的后繼搜索可以在直接映射的映射程序106a的下一個內(nèi)存訪問循環(huán)時發(fā)送給查詢表200。
圖4說明了能夠存儲在圖3所示的直接映射的映射程序106a中的映射程序入口的類型。圖2B所示的二叉樹中任何節(jié)點對應(yīng)的映射程序入口能夠存儲非入口300,路由入口302或子樹入口描述符304。映射程序入口300,302,304中每一種類型包括一個子樹標(biāo)記306。子樹標(biāo)記306的狀態(tài)表示映射程序入口是否為子樹入口描述符304。如果子樹標(biāo)記306置為“1”,映射程序入口是子樹描述符304并且包括子樹索引312。子樹索引312是下一個非直接映射的映射程序106b-d中存儲的子樹入口描述符304的地址。子樹入口將在后面結(jié)合圖4進(jìn)行描述。如果子樹標(biāo)記306為“0”,將檢查非入口標(biāo)記314來確定映射程序入口是非入口300還是路由入口302。如果非入口標(biāo)記314是“0”,該入口則是非入口300。如果非入口標(biāo)記314為“1”,該入口則是路由入口302,并且在路由索引字段310存儲中與關(guān)鍵字104有關(guān)的路由索引102(圖3)。多路復(fù)用器108(圖2A)利用子樹標(biāo)記306來選擇包括路由索引102(圖3)的映射程序入口數(shù)據(jù)220a-d。
圖5說明了對應(yīng)圖2B所示的映射層2 112b中的節(jié)點的映射程序106b。映射106b包括子樹內(nèi)存400,映射程序地址邏輯402和子樹映射程序418。把由存儲在映射程序106a中的關(guān)鍵字210a的第一部分選擇的子樹索引312轉(zhuǎn)發(fā)到子樹內(nèi)存400。子樹內(nèi)存400包括由子樹索引312選擇的子樹入口404。子樹入口404包括數(shù)據(jù)字段406和指針字段408。
返回圖2B,子樹入口404對應(yīng)映射程序?qū)? 112b所示的一個子樹的底層。如果映射程序?qū)? 112b有8層,每個子樹(未示出)的底層具有最多256條路由,每個節(jié)點一個路由。
繼續(xù)到圖5,子樹入口404提供對與子樹底層上的每個節(jié)點對應(yīng)的256個可能的路由索引102(圖3)的訪問。路由索引102(圖3)存儲在子樹映射程序418中。為提供對256個可能的路由索引的訪問,密集子樹描述符存儲在數(shù)據(jù)字段406中。數(shù)據(jù)字段406有256位寬,為在子樹底層的每個節(jié)點提供一位。數(shù)據(jù)字段將在后面結(jié)合圖6A和圖6B詳細(xì)描述。指針字段408有256位寬,允許存儲16個16位指針,每個指針存儲子樹映射程序418中16個相鄰映射程序入口的基地址,以便提供對256個路由索引的訪問。因此,指針字段408可以為子樹底層中的每個節(jié)點間接地提供到子樹映射程序418中的映射程序入口的指針。將結(jié)合圖6詳細(xì)描述指針字段408。
把存儲在數(shù)據(jù)字段406的密集子樹描述符中的子樹數(shù)據(jù)412和存儲在指針字段408中的子樹指針414轉(zhuǎn)發(fā)到映射程序地址邏輯402。映射程序地址邏輯402還接收關(guān)鍵字210b的下一部分(接下來的8位)。
映射程序地址邏輯402根據(jù)與子樹有關(guān)的關(guān)鍵字212b接下來的8位,子樹數(shù)據(jù)412和子樹指針414來確定與子樹底層中的節(jié)點有關(guān)的映射程序入口的映射程序地址416。映射程序地址416在子樹映射程序418中選擇映射程序入口。子樹映射程序418包括直接映射的映射程序106a的與結(jié)合圖4所述類型相同的映射程序入口。映射程序數(shù)據(jù)入口220b的內(nèi)容確定是否需要后繼搜索。如果映射程序入口數(shù)據(jù)220b包括表明在下一個映射層112c(圖2B)還有另一個子樹入口404的子樹索引312(圖4),則需要后繼搜索。
關(guān)鍵字210b的第二部分選擇所選子樹底層中的節(jié)點。子樹指針414選擇與子樹中的節(jié)點有關(guān)的基地址,子樹數(shù)據(jù)412選擇與基地址有關(guān)的映射入口模塊中的位移。映射程序地址邏輯402將結(jié)合圖7在后面描述。
圖6A是子樹的二叉樹表示。所示子樹包括5層。該子樹包括三個路由索引r1,r2和r3以及兩個子樹索引s0和s1。子樹底層上有32個節(jié)點5001-50032。下面的表1顯示了與底層中的每個節(jié)點5001-50032有關(guān)的路由索引或子樹索引。
子樹位 路由/子樹00000r000001r000010r000011r000100r100101r100110r000111r001000r201001s001010r201011r201100r201110r201111r21xxxxr3表1圖6說明了對應(yīng)圖6A所示的子樹底層中的節(jié)點的圖5所示的數(shù)據(jù)字段406中存儲的密集子樹描述符。數(shù)據(jù)字段406包括32位,圖6A所示的子樹底層中的每個節(jié)點500對應(yīng)一位。位5021-50232在數(shù)據(jù)字段406中是這樣分配的如果要使用前一個節(jié)點的路由索引,那么數(shù)據(jù)字段中的一位設(shè)定為‘0’,如果使用存儲在子樹映射程序418(圖5)中的下一個路由索引,那么設(shè)定‘1’遞增到下一個映射入口地址。除非指定了路由,否則數(shù)據(jù)字段402中的第一位選擇存儲在映射程序入口5041中的缺省路由r0。這樣,由于沒有指定的路由,把位5021設(shè)定為‘0’來選擇缺省路由。為接下來三個節(jié)點5002-5004選擇映射程序入口5041中存儲的缺省路由r0,因此,在數(shù)據(jù)字段406中的對應(yīng)位5022-5024被設(shè)定為“0”,以使用5021使用的前一個路由索引。在節(jié)點5005存在路由改變。
節(jié)點5006共享用于映射程序入口5042中存儲的節(jié)點5005的路由r1。因此位5025是‘1’表示路由改變,以便在子樹映射程序418(圖5)中選擇映射程序入口5042。位5026是‘0’表示把5025中存儲的路由索引用于該節(jié)點。不為節(jié)點5007提供路由,因此,存在著路由變化,并且在位5027中存儲‘1’來表示需要在子樹映射程序418(圖5)中的映射程序入口5043存儲缺省路由r0。
節(jié)點5008與前一個節(jié)點5007共享同一個路由,在子樹映射程序418(圖5)中不需要新的映射程序入口。對應(yīng)節(jié)點5008的位5028設(shè)定為“0”。節(jié)點5009與前一個節(jié)點5008具有不同的路由,因此在子樹映射程序418(圖5)中需要新的映射程序入口。對應(yīng)節(jié)點5009的位5029設(shè)定為“1”,并且將存儲r2的映射程序入口5044添加到下一個相鄰存儲單元中的子樹映射程序418(圖5)。
節(jié)點50010與前一個節(jié)點5009具有不同的路由,在子樹映射程序418(圖5)中需要新的路由入口。對應(yīng)節(jié)點50010的位50210設(shè)定為“1”,并且將存儲s0的映射程序入口5045添加到下一個相鄰存儲單元中的子樹映射程序418(圖5)。
節(jié)點50011與前一個節(jié)點50010具有不同的路由,在子樹映射程序418(圖5)中需要新的映射程序入口。對應(yīng)節(jié)點50011的位50211設(shè)定為“1”,并且將存儲r2的映射程序入口5046添加到下一個相鄰存儲單元中的子樹映射程序418(圖5)。
節(jié)點50012和50013共享與前一個節(jié)點50011相同的路由,在子樹映射程序418(圖5)中不需要新的映射程序入口。在數(shù)據(jù)字段406中把對應(yīng)于節(jié)點50012的位50212和對應(yīng)于節(jié)點50013的位50213設(shè)定為‘0’。
節(jié)點50014與前一個節(jié)點50013具有不同的路由,在子樹映射程序418(圖5)中需要新的映射程序入口。數(shù)據(jù)字段406中對應(yīng)節(jié)點50014的位50214設(shè)定為‘1’,并且把存儲s1的映射程序入口5047添加到下一個相鄰存儲單元中的子樹映射程序418(圖5)。節(jié)點50015與前一個節(jié)點50014具有不同的路由,在子樹映射程序418(圖5)中需要新的映射程序入口。數(shù)據(jù)字段406中對應(yīng)節(jié)點50015的位50215設(shè)定為‘1’,并且將存儲r2的映射程序入口5048添加到下一個相鄰存儲單元中的子樹映射程序418(圖5)。節(jié)點50016與前一個節(jié)點50015共享同一個路由,在子樹映射程序418(圖5)中不需要新的映射程序入口。
節(jié)點50017與前一個節(jié)點50016具有不同的路由,在子樹映射程序418(圖5)中需要新的映射程序入口。將數(shù)據(jù)字段406中對應(yīng)節(jié)點50017的位50217設(shè)定為‘1’,并且將存儲r3的映射程序入口5049添加到下一個相鄰存儲單元中的子樹映射418(圖5)。
節(jié)點50018-50032全部與前一個節(jié)點50017共享相同的路由,在子樹映射程序418(圖5)中不需要新的映射程序入口。將對應(yīng)的位50218-50232設(shè)定為‘0’。這樣就需要9個映射程序入口5041-9來存儲32個節(jié)點5001-50032的路由入口302(圖4)或子樹入口304(圖4)。
通過計算在數(shù)據(jù)字段406中存儲的密集子樹描述符中存儲的‘1’的數(shù)量在子樹映射程序418(圖5)中索引與節(jié)點5001-50032對應(yīng)的映射程序入口5041-5049。例如,為尋找對應(yīng)節(jié)點50028的映射程序入口5041-5049,計算數(shù)據(jù)字段406的位5021-50228中存儲‘1’的數(shù)量。‘1’的數(shù)量是8,并且對應(yīng)的映射程序入口是從缺省路由開始的第八個位置,即映射程序入口5049。
僅當(dāng)路由發(fā)生變化時才存儲映射程序入口的方法減少了子樹映射程序418(圖5)中每個子樹映射程序入口5041-5049的數(shù)量。
圖7說明了圖5所示的指針字段408。指針字段408包括用于存儲子樹映射程序418(圖5)中幾組16個相鄰映射程序入口位置5041-50416組(圖6B)的基地址的塊基地址字段6001,6002。在16個相鄰映射程序入口的組6021,6022的子樹映射程序418(圖5)中分配內(nèi)存。8層的子樹可以具有多達(dá)256個不同路由,需要16個組6021,6022來存儲所有256個路由。根據(jù)子樹的路由數(shù)量來確定所需組602的數(shù)量。通過從塊基地址的空閑列表中(未顯示)刪除塊基地址6021,6022來將組602分配給特定的子樹。為內(nèi)存提供地址空閑列表的方法是已知的技術(shù)。
通過分配16個映射程序入口5041-16的內(nèi)存塊,由于所分配的16個位置是相鄰的,所以子樹映射程序418(圖5)中的內(nèi)存易于管理。
圖8說明了圖5所示的映射程序地址邏輯402。映射程序地址邏輯402包括位移邏輯700,指針邏輯702和加法器邏輯704。位移邏輯700包括節(jié)點選擇邏輯706和“1”計數(shù)邏輯708。指針邏輯包括基地址選擇邏輯710。
節(jié)點選擇邏輯706選擇在子樹數(shù)據(jù)412中對應(yīng)8位關(guān)鍵字210b的節(jié)點500(圖6B)。相應(yīng)的節(jié)點數(shù)通過節(jié)點選擇718轉(zhuǎn)發(fā)到‘1’計數(shù)邏輯708?!?’計數(shù)邏輯708累計子樹數(shù)據(jù)字段406中存儲的‘1’的數(shù)量,直到與所選節(jié)點500對應(yīng)的位?!?’的數(shù)量通過塊選擇712轉(zhuǎn)發(fā)到指針邏輯702并且通過塊位移714轉(zhuǎn)發(fā)到加法器邏輯704。
需要8位寬的計數(shù)字段的256位子樹數(shù)據(jù)字段406中最大可存儲256個“1”。8位計數(shù)字段分為兩個字段,提供塊選擇712的4個MSB和提供塊位移714的4個最低有效位(“LSB”)。
例如,如果8位的關(guān)鍵字210b為‘01000100’,為選擇節(jié)點數(shù)68并且共有27個“1”存儲在子樹數(shù)據(jù)42的前68位,計數(shù)結(jié)果為IC Hex(0001 1100),MSB(0001);即塊選擇714選擇塊6021(圖6)和LSB(1100);即基塊位移選擇映射程序入口50411(圖6),即塊5021中的第12個入口。
基地址選擇邏輯710根據(jù)從位移邏輯700轉(zhuǎn)發(fā)的塊選擇712從子樹指針414中選擇基地址716。加法器邏輯704將從位移邏輯700轉(zhuǎn)發(fā)的塊位移714累加到基地址716,并且提供映射程序地址416。映射程序地址416是映射程序106b-d中映射程序入口504(圖6B)的索引。
圖9是根據(jù)本發(fā)明原理用于在查詢表200中搜索關(guān)鍵字210(圖3)的最長匹配前綴的步驟的流程圖。
在步驟800中,把關(guān)鍵字210a(圖3)的第一部分作為索引轉(zhuǎn)發(fā)到映射程序106a。處理過程繼續(xù)到步驟802。
在步驟802中,由關(guān)鍵字210a(圖3)的第一部分索引的第一層映射程序中的映射程序入口504(圖6B)中存儲的映射程序入口數(shù)據(jù)220a(圖3)確定是否需要繼續(xù)對下一層進(jìn)行搜索。如果需要,處理過程繼續(xù)到步驟804。否則,第一層映射程序中索引的映射程序入口504(圖6B)中的路由入口302(圖4)存儲該關(guān)鍵字的最長前綴路由并且處理過程繼續(xù)到步驟808。
在步驟804,搜索下一層映射程序106b-d。下一層映射程序的索引取決于前一層映射程序中索引的映射程序入口504(圖6B)中子樹入口描述符304(圖4)中存儲的子樹索引312和關(guān)鍵字210b-d的下一部分。處理過程繼續(xù)到步驟806。
在步驟806中,下一層映射程序中的索引映射程序入口504(圖6B)存儲該關(guān)鍵字對應(yīng)的最長前綴路由索引或表示需要進(jìn)一步搜索的子樹索引。如果需要進(jìn)一步搜索,處理過程繼續(xù)到步驟804。否則,處理過程繼續(xù)到步驟808。
在步驟808,把映射程序106a-d之一中的一個映射程序入口504(圖6B)中存儲的路由索引102(圖3)作為路由索引102(圖3)從查詢表200轉(zhuǎn)發(fā)。處理過程結(jié)束。深度擴(kuò)展能夠存儲在圖3所示查詢表200中的路由索引102(圖3)的數(shù)量受子樹映射程序418(圖5)中可用映射程序入口504(圖6B)的數(shù)量的限制。例如,如果每個子樹映射程序418(圖5)包括128K個映射程序入口并且在查詢表中有兩個子樹映射程序418(圖5),那么查詢表200中最多可以存儲256K個路由索引102(圖3)。具有128K個映射程序入口的子樹映射程序418(圖5)需要一個17位的索引。具有512K個映射程序入口的子樹映射程序418(圖5)需要一個19位的索引。查詢表200中2個512K的子樹映射程序418(圖5)為32位IPv4目的地址的40億個可能的路由索引102(圖3)中1百萬個提供了存儲空間。
通過提供多個查詢表200可以增加用于存儲路由索引102(圖3)的映射程序入口504(圖6B)的數(shù)量。可以在多個查詢表中并行地搜索與查詢表200之一中的子樹映射程序418(圖5)中的映射程序入口504(圖6B)中存儲的搜索關(guān)鍵字對應(yīng)的值。
圖10A說明了深度擴(kuò)展的實施例。示出兩個查詢表,一個為主查詢表200a,另一個為副查詢表200b。但是,查詢表的數(shù)量不只限于所示的兩個,可以增加一個以上的副查詢表200b。
以相同的搜索關(guān)鍵字210并行搜索查詢表200a-d中的每一個。對應(yīng)于搜索關(guān)鍵字210的路由索引102(圖3)存儲在查詢表200a-d之一中的子樹映射程序418(圖5)中,或查詢表200a和200b二者中的直接映射程序106a中。在完成對查詢表200a和200b的并行搜索后,找到最終路由索引900。
圖10B說明了圖10A所示實施例中的查詢表200a中的一個。查詢表200a-b中的每一個包括映射程序106a-d和已經(jīng)結(jié)合圖3針對查詢表200描述過的管道208,以及驅(qū)動器邏輯902。查詢表200a為與搜索關(guān)鍵字對應(yīng)的路由索引在映射程序106a-d中執(zhí)行多層搜索。每一層的搜索結(jié)果通過映射程序入口數(shù)據(jù)220a-d轉(zhuǎn)發(fā)到管道208。管道208再將搜索結(jié)果904轉(zhuǎn)發(fā)到驅(qū)動器邏輯902。每個查詢表200a-b中映射程序106a中的映射程序入口504(圖6B)存儲子樹入口304(圖4),但只有主查詢表200a的映射程序106a存儲路由入口302(圖4)。副查詢表200b中映射程序106a中的映射程序入口504(圖6B)代替路由入口302存儲非入口300(圖4)。將映射程序106a中的路由索引集中在一個查詢表避免了為提供最終路由索引900的查詢表的選擇過程。這導(dǎo)致了副查詢表200b中不能用于存儲路由索引而只允許存儲相同查詢表的64K內(nèi)存配置成主查詢表或結(jié)合圖3所述的副查詢表。在另一個實施例中,可以提供沒有映射程序106a的副查詢設(shè)備。如果路由索引102(圖3)存儲在映射程序106a中的路由入口302(圖4),那么搜索在主查詢表200a中的映射程序106a中結(jié)束。
如圖10A所示,主查詢表200a和副查詢表200b共享最終路由索引900。存儲了最終路由索引900的查詢表200a,200b提供路由索引102(圖3)。如果每個查詢表200a,200b是獨立的設(shè)備,共享最終路由索引900減小了每個設(shè)備的外部引腳數(shù)量。只有查詢表200a,200b中的一個隨時驅(qū)動最終路由索引。
為避免兩個查詢表200a,200b中存儲與搜索關(guān)鍵字210有關(guān)的路由索引而會使兩個查詢表同時驅(qū)動最終路由索引900的錯誤狀態(tài),每個查詢表200a,200b存儲一個設(shè)備代碼。3位的設(shè)備代碼允許擴(kuò)展的查詢表包括8個設(shè)備。
驅(qū)動器邏輯902確定搜索結(jié)果904是否包括路由索引102(圖3)。如果包括,查詢表200a中的驅(qū)動器邏輯902發(fā)出試圖通過總線請求信號(未示出)驅(qū)動最終路由索引900的信號。如果兩個或更多的查詢表200a,200b同時發(fā)出試圖驅(qū)動路由索引信號的信號,那么由具有最低設(shè)備代碼的查詢表200a,200b中提供路由索引。通過使用總線請求信號來解決總線沖突的方法是熟知的技術(shù)。
圖10C說明了用來提供深度擴(kuò)展以增加可用于存儲與搜索關(guān)鍵字210對應(yīng)的值的映射程序入口數(shù)量的另一個實施例。在圖10C所示的實施例中,提供兩個查詢表200c-d來存儲值,主表200c和副表200d。但是查詢表的數(shù)量不只限于所示的兩個,可以通過加入更多的副表200d來增加映射程序入口的數(shù)量。在查詢表200c-d中并行執(zhí)行對與搜索關(guān)鍵字[390]210對應(yīng)的查詢表200c-d之一中的映射程序入口中所存儲的值的搜索。
圖10D說明了圖10C所示的實施例中的副表200d。每個查詢表包括結(jié)合圖3針對查詢表200描述的映射程序106a-d。每個查詢表200c-d中映射程序106a中的映射程序入口存儲子樹入口304(圖4)。每個查詢表200c-d將映射程序106a中映射程序入口504(圖6B)里存儲的子樹入口描述符304(圖4)中存儲的子樹索引312轉(zhuǎn)發(fā)到下一個映射程序106b-d。但是,路由索引102(圖3)只存儲在主查詢表200c的映射程序106a中。無入口存儲在副查詢表200d中的映射程序106a中以避免在一個以上的查詢表200b,200d中存儲與該關(guān)鍵字對應(yīng)的路由索引。
副查詢表200d中的多層搜索結(jié)果904轉(zhuǎn)發(fā)到最終索引邏輯1004。最終索引邏輯1004將多層搜索結(jié)果904或從主查詢表200c轉(zhuǎn)發(fā)來的輸入結(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所示,主查詢表200c和副查詢表200d通過標(biāo)有輸入結(jié)果1000a的公共總線相連。路由索引102(圖3)只通過輸出結(jié)果1002a從副查詢表200d轉(zhuǎn)發(fā)。如果有一個以上的副查詢表200d,最后一個副查詢表提供擴(kuò)展查詢表的路由索引102(圖3)。本實施例可以避免實現(xiàn)結(jié)合圖10A所述的多驅(qū)動器最終路由索引900的出現(xiàn),但需要更多用于輸入結(jié)果1000a的設(shè)備外部引腳。
圖11A-B說明了在查詢表200a-b(圖10A)或200c-d(圖10C)中分配圖2B所示路由的二叉樹表示。
圖11A說明了主查詢表200a(圖10A)或200c(圖10C)中存儲的路由的二叉樹表示。主查詢表200a中不包括圖2B所示路由的二叉樹表示中所示的子樹B。節(jié)點1301-13022和13024-32在結(jié)合圖3所述的查詢表200a中的映射程序106a中編碼。如果存儲在主查詢表200a中,那么在那里索引子樹B的節(jié)點用“X”圖形化地表示為已修剪子樹。在主查詢表200a中對應(yīng)節(jié)點13023的映射程序入口504(圖6B)不再存儲指向子樹B的子樹索引312(圖4)。取而代之的是非入口300(圖4)存儲在主查詢表200a中對應(yīng)節(jié)點13023的映射程序入口504(圖6B)中,以表示對應(yīng)節(jié)點13023的映射程序入口存儲在另一個副查詢表200b的子樹映射程序418(圖5)中。
圖11B說明了存儲在副查詢表200b(圖10A)或200d(圖10C)中子樹映射程序418(圖5)中的映射程序入口504(圖6B)的路由的二叉樹表示。與圖2B所示二叉樹表示不同,存儲在副查詢表200b中的路由的二叉樹表示不包括子樹A。因此,節(jié)點1301-1303和1305-13032以如結(jié)合圖2B所述的那樣進(jìn)行編碼。對應(yīng)副查詢表200b中節(jié)點1304的映射程序入口504(圖6B)不再存儲指向子樹A的子樹索引312(圖4)。取而代之的是對應(yīng)副查詢表200b中節(jié)點1304的映射程序入口存儲非入口300(圖4)以表示對應(yīng)節(jié)點1304的映射程序入口存儲在另一個查詢表中。子樹A對應(yīng)的子樹索引和主機138(圖11A)對應(yīng)的路由索引存儲在主查詢表200a中,并且子樹B對應(yīng)的子樹索引和主機140(圖11A)對應(yīng)的路由索引存儲在副查詢表200b中。副查詢表200b,200d只存儲子樹的結(jié)果;就是說,副查詢表200b,200d不存儲第一層映射程序106a中的結(jié)果。
參考圖11A和圖11B,利用關(guān)鍵字210a的第一部分對主映射程序?qū)? 1102a(圖3)或副映射程序?qū)? 1104a中任何節(jié)點1309-13012的搜索產(chǎn)生了主查詢表200a,200c中映射程序106a中映射程序入口504(圖6B)中路由入口302(圖4)中存儲的r1 116以及副查詢表200b,200d中映射程序106a中映射程序入口504(圖6B)中存儲的非入口300(圖4)。主查詢表200a,200c中存儲的路由入口302(圖4)通過輸入結(jié)果1000a轉(zhuǎn)發(fā)到副查詢表200b,200d并且通過輸出結(jié)果1002a由副查詢表200b,200d轉(zhuǎn)發(fā)。
利用關(guān)鍵字210a的第一部分對節(jié)點1304的搜索產(chǎn)生了主查詢表200a中映射程序106a的映射程序入口504(圖6B)中子樹入口描述符304(圖4)中存儲的子樹A的子樹索引312(圖4)。子樹索引312轉(zhuǎn)發(fā)到主查詢表200a中的映射程序106b來繼續(xù)對主查詢表200a中存儲的路由入口302(圖4)進(jìn)行搜索。
利用關(guān)鍵字210的第一部分對節(jié)點13023的搜索產(chǎn)生主查詢表200a中映射程序106a的映射程序入口504(圖6B)中存儲的非入口300(圖4)以及副查詢表200b中映射程序106a的映射程序入口504(圖6B)中存儲子的樹入口描述符304(圖4)。因此,繼續(xù)利用關(guān)鍵字210b的下一部分在副查詢表200b的映射程序106b中搜索路由入口302(圖4)。
圖12是說明圖10A所示查詢表200a-b中映射程序入口504(圖6B)中存儲的路由入口302(圖4)的分配方法的流程圖。同樣的方法用于圖10C所示的查詢表200c-d。在查詢表200a-b中存儲之前,最初由處理器(未示出)在存儲器中存儲映射程序入口中要存儲的路由入口302(圖4)。
當(dāng)路由入口302(圖4)存儲在存儲器中時,計算每個查詢表200a-b(圖10A)中要存儲的路由入口302(圖4)的數(shù)量。映射程序?qū)? 1104a(圖11B)的路由入口302(圖4)存儲在查詢表200a的映射程序106a中。映射程序?qū)? 1104a(圖11B)的子樹入口304(圖4)存儲在每個查詢表200a-200b的映射程序106a中。
在步驟1200中,為確定如何在查詢表200a-b(圖10A)中分配路由入口302(圖4),需要計算每個查詢表200a-200b(圖10A)中映射程序106a的每個子樹入口304(圖4)中要存儲的路由入口302(圖4)的數(shù)量。當(dāng)確定了存儲路由入口302(圖4)所需的映射程序入口504(圖6B)的總數(shù)之后,處理過程繼續(xù)到步驟1202。
在步驟1202中,將要存儲的子樹的映射程序入口504(圖6B)的總數(shù)除以查詢表200a-b(圖10A)的數(shù)量以確定存儲在每個查詢表200a-b(圖10A)中的路由入口302(圖4)的數(shù)量。處理過程繼續(xù)到步驟1204。
在步驟1204中,在所選查詢表200a-b中子樹映射程序418(圖5)的映射程序入口504(圖6B)中存儲路由入口302(圖4)。處理過程繼續(xù)到步驟1206。
在步驟1206中,如果在所選查詢表200a-b中子樹映射程序418(圖5)的映射程序入口504(圖6B)中存儲的路由入口的數(shù)量小于1/n,其中n表示可用查詢表200a-b(圖10A)的數(shù)量,那么處理過程繼續(xù)到步驟1024。否則,所選查詢表200a-b已經(jīng)存儲了映射程序入口總數(shù)的1/n,并且處理過程繼續(xù)到步驟1208。
在步驟1208中,所選查詢表200a-b存儲映射程序入口總數(shù)的1/n,因為相應(yīng)子樹的路由索引不存儲在當(dāng)前所選的查詢表中,所以任何剩余子樹節(jié)點的非入口300(圖4)存儲在所選擇的查詢表200a-b中。處理過程繼續(xù)到步驟1210。
在步驟1210中,如果已經(jīng)存儲了全部路由入口,處理過程結(jié)束。否則,處理過程繼續(xù)到步驟1212。
在步驟1212中,選擇下一個查詢表200a-b(圖10A)。處理過程繼續(xù)到步驟1204。
在搜索對應(yīng)于IP地址的路由索引之前,在查詢表200a-b(圖10A)中分配路由入口。搜索是在查詢表200a-b(圖10A)中的每一個中并行執(zhí)行的。用查詢表200a-b(圖10A)中的一個來描述實現(xiàn)對每個查詢表并行搜索的方法。
圖13是說明利用搜索關(guān)鍵字搜索與圖10C所示的查詢表200c-d中的任何一個存儲的搜索關(guān)鍵字對應(yīng)值的方法的流程圖。
在步驟1300中,查詢表200c-d(圖10C)中的每一個接收搜索關(guān)鍵字210。查詢表200c-d中的每一個中的映射程序106a搜索于關(guān)鍵字210a的第一部分對應(yīng)的值。處理過程繼續(xù)到步驟1302。
在步驟1302中,讀取映射程序106a中映射程序入口504(圖6B)中存儲的入口。主查詢表200c中的映射程序入口504(圖6B)可以存儲非入口300(圖4),路由入口302(圖4)或子樹入口描述符304(圖4)。副查詢表200d中的映射程序入口504可以存儲非入口300(圖4)和子樹入口描述符304(圖4)。如果相應(yīng)的查詢表200中的映射程序入口存儲路由入口302(圖4),該入口則是有效值,不需要進(jìn)一步搜索查詢表200c-d中的后繼映射程序106b-d,處理過程繼續(xù)到步驟1310。否則,處理過程繼續(xù)到步驟1304。
在步驟1304中,如果入口存儲了子樹入口描述符304(圖4),那么需要進(jìn)一步搜索查詢表200c-d并且處理過程繼續(xù)到步驟1306。否則,該入口存儲非入口,表示不需要進(jìn)一步的搜索,處理過程繼續(xù)到步驟1310。
在步驟1306中,在所選子樹中繼續(xù)搜索。根據(jù)關(guān)鍵字210b-d的下一部分和從上一層的搜索得到的子樹索引312(圖4)來搜索下一層映射程序106b-d(圖3)。處理過程繼續(xù)到步驟1308。
在步驟1308中,根據(jù)從當(dāng)前層映射程序106b-d中搜索得到的映射程序入口來確定是否繼續(xù)執(zhí)行搜索。如果映射程序入口504(圖6B)存儲了子樹入口描述符304(圖4),搜索繼續(xù)到下一層映射程序106b-d并且處理過程繼續(xù)到步驟1306。如果映射程序入口504(圖6B)沒有存儲子樹入口描述符304(圖4),則不需要作進(jìn)一步搜索,處理過程繼續(xù)到步驟1310。
在步驟1310中,把搜索結(jié)果與從另一個查詢表接收的輸入結(jié)果作比較。例如,如果查詢表是副查詢表200d,那么把從主查詢表200c中搜索產(chǎn)生的輸入結(jié)果通過輸入結(jié)果1000a轉(zhuǎn)發(fā)到查詢表200d,并且與副查詢表200d的搜索結(jié)果作比較。處理過程繼續(xù)到步驟1312。
在步驟1312中,如果輸入結(jié)果1000a與當(dāng)前查詢表200d中的搜索結(jié)果不同,處理過程繼續(xù)到步驟1314。如果輸入結(jié)果1000a與當(dāng)前查詢表200d中的搜索結(jié)果相同,在分開的查詢表200c-d中的映射程序入口504(圖6B)中已經(jīng)存儲這兩個有效的結(jié)果。不應(yīng)該相同的關(guān)鍵字210來存儲兩個有效結(jié)果,處理過程繼續(xù)到步驟1316。
在步驟1314中,檢查輸入結(jié)果1000a來確定它是否有效。如果輸入結(jié)果1000a是路由入口302(圖4),那么它是有效的。如果輸入結(jié)果1000a是非入口300(圖4)或子樹入口描述符304(圖4),那么它是無效的。子樹入口描述符304(圖4),路由入口302(圖4)和非入口300(圖4)已經(jīng)結(jié)合圖4描述過了。如果輸入結(jié)果1000a無效,處理過程繼續(xù)到步驟1318。否則,處理過程繼續(xù)到步驟1320。
在步驟1318中,輸入結(jié)果1000a有效,而從當(dāng)前查詢表200d中搜索得到的結(jié)果無效。輸入結(jié)果1000a通過輸出結(jié)果1002a從當(dāng)前查詢表200d轉(zhuǎn)發(fā)。如果當(dāng)前查詢表200d是最后一個查詢表,那么輸入結(jié)果1000a作為路由索引102(圖3)轉(zhuǎn)發(fā),或者作為輸入結(jié)果1000a轉(zhuǎn)發(fā)到下一個查詢表。處理過程結(jié)束。
在步驟1316中,在不同的查詢表中存儲關(guān)鍵字的兩個有效的結(jié)果值。在查詢表200c-d中存儲路由入口期間發(fā)生錯誤時,生成錯誤代碼以便能夠糾錯。處理過程結(jié)束。
在步驟1320中,來自當(dāng)前查詢表200d的搜索結(jié)果和輸入結(jié)果1000a都無效。即使無效,也將當(dāng)前查詢表200d的搜索結(jié)果作為輸入結(jié)果1000a轉(zhuǎn)發(fā)到下一個查詢表。處理過程結(jié)束。
圖14是說明搜索與圖10A所示的查詢表200a-b之一中存儲的搜索關(guān)鍵字對應(yīng)的值的方法的流程圖。
在步驟1340中,在兩個查詢表200a-b中的第一層映射程序106a搜索與關(guān)鍵字210a的第一部分對應(yīng)的值。處理過程繼續(xù)到步驟1342。
在步驟1342中,如果利用關(guān)鍵字210a的第一部分搜索第一層映射程序106a后找到了有效的結(jié)果值,則處理過程繼續(xù)到步驟1352。否則,處理過程繼續(xù)到步驟1344。
在步驟1344中,如果利用關(guān)鍵字210a的第一部分搜索第一層映射程序106a得到的值是子樹入口描述符304(圖4),處理過程繼續(xù)到步驟1346。否則,當(dāng)前查詢表中不存儲關(guān)鍵字的有效值,處理過程結(jié)束。
在步驟1346中,繼續(xù)在以搜索上一層映射程序期間找到的子樹入口描述符304(圖4)中標(biāo)識的子樹中搜索有效值。根據(jù)關(guān)鍵字210b-c的下一部分和從搜索下一層得到的子樹選擇在下一層映射程序中搜索一個值。處理過程繼續(xù)到步驟1348。
在步驟1348中,搜索結(jié)果確定是否需要對下一層進(jìn)行搜索。從當(dāng)前搜索得到的入口可以存儲路由入口302,非入口300(圖4)或子樹入口描述符304(圖4)。如果入口存儲了子樹入口描述符304(圖4),則需要進(jìn)一步的搜索并且處理過程繼續(xù)到步驟1346。如果入口沒有存儲子樹入口描述符304(圖4),處理過程繼續(xù)到步驟1350。
在步驟1350中,如果入口存儲了路由索引102(圖3),處理過程繼續(xù)到步驟1352。否則,將入口存儲在另一個查詢表中。處理過程結(jié)束。
在步驟1352中,與該關(guān)鍵字對應(yīng)的有效值存儲在當(dāng)前查詢表中。有效值作為對應(yīng)于該關(guān)鍵字的路由索引102(圖3)轉(zhuǎn)發(fā)。處理過程結(jié)束。稀疏模式返回圖5,子樹入口404對多達(dá)256個可能的路由索引中的每一個提供訪問,256個節(jié)點字樹中每個節(jié)點一個。路由索引存儲在子樹映射程序418(圖5)中的映射程序入口5041-504n中。根據(jù)子樹入口404中數(shù)據(jù)字段406中存儲的密集子樹描述符和指針字段408中存儲的子樹指針確定在子樹映射程序418(圖5)中映射程序入口504(圖6B)的映射程序地址416。密集子樹描述符的格式已經(jīng)結(jié)合圖6A-6B描述過了。密集子樹描述符為256個節(jié)點的子樹中每個節(jié)點存儲一個節(jié)點位502(圖6B)。但是,所有子樹針對256個節(jié)點中的每一個具有不同的路由索引,例如,一個子樹可能只有一個路由索引。
圖15說明了由第一映射程序?qū)?12a中的子樹入口304索引的第二層映射程序?qū)?12b中稀疏子樹A和密集子樹B的二叉樹表示。映射程序106a中s1的子樹入口描述符304(圖4)存儲子樹A的子樹入口404的子樹索引312。映射程序106a中s0的子樹入口描述符304(圖4)存儲子樹B的子樹入口404的子樹索引312。
密集集中子樹B有11個路由索引;即,r6-r16和6個子樹入口;即,s2-s7。與存儲路由入口302(圖4)的映射程序入口504(圖6B)和子樹B的子樹入口304(圖4)對應(yīng)的映射程序地址416在密集子樹描述符中的編碼已經(jīng)結(jié)合圖6B描述過了。
稀疏集中子樹存儲兩個路由索引;即r1和r2。如果它們存儲在密集子樹描述符中,那么整個子樹入口404用來提供映射程序入口504(圖6B)的三個映射程序地址416;即,r0,r1和r2。
查詢表200中存儲的路由數(shù)量可以通過對多個稀疏子樹描述符的其中一個稀疏子樹描述符編碼以及對子樹入口404中密集子樹描述符中的密集集中子樹描述符編碼來增加。
密集集中子樹有16個或更多個映射程序入口504(圖6B),子樹入口404中的數(shù)據(jù)字段406存儲結(jié)合圖6A-6B所述的密集子樹描述符。稀疏集中子樹有15個或更少個映射程序入口504(圖6B);子樹入口404中的數(shù)據(jù)字段存儲了多個稀疏子樹描述符。通過提供在稀疏子樹描述符中存儲稀疏集中子樹的能力,子樹存儲器400可以存儲更多的子樹并且查詢表200中可以存儲更多的路由入口。
圖16A-C說明了對圖5所示子樹入口404中數(shù)據(jù)字段406和指針字段408以及圖4所示子樹入口描述符304(圖4)的更改,以便允許在子樹入口404中存儲多個稀疏子樹描述符。
轉(zhuǎn)到圖16A,以稀疏模式配置的子樹入口404中的數(shù)據(jù)字段406包括多個稀疏子樹描述符14001-1400n來代替結(jié)合圖6B所述的子樹的每個節(jié)點對應(yīng)一位的密集子樹描述符。每個稀疏子樹描述符14001-1400n包括一個節(jié)點描述符14021-1402n。一個節(jié)點描述符14001-1402n是代表子樹中完全已編碼路由的一個9位值。節(jié)點描述符14021-1402n描述了子樹中一個節(jié)點或多個節(jié)點。
轉(zhuǎn)到圖16B,為支持存儲稀疏子樹描述符,在子樹入口404的指針字段408增加模式字段1404。指針字段408還存儲塊基地址6001和塊基地址6002,每個塊包括16個為每個子樹入口404提供總共32個映射程序地址416的已分配映射程序地址416。模式字段1404存儲模式值。模式字段1404中存儲的模式值表示子樹入口404中存儲的稀疏子樹描述符14001-1400n的數(shù)量和每個稀疏子樹描述符14001-1400n中存儲的節(jié)點描述符14021-1402n的數(shù)量。表2說明了每個模式對應(yīng)的子樹入口404的配置。
表2參見表2,例如,如果設(shè)置子樹入口404中指針字段408的模式字段1404中存儲的模式值為“4”,那么子樹入口404中的每個稀疏子樹描述符1400存儲5到7個節(jié)點描述符14021-1402n。每個節(jié)點描述符14021-1402n存儲9位。通過每個稀疏子樹描述符14001-1400n的節(jié)點描述符14021-1402n的數(shù)量乘以9(每個節(jié)點描述符14021-1402n的位數(shù))來計算存儲在稀疏子樹描述符1400中的總位數(shù)。計算模式4的每個稀疏子樹描述符1400的位數(shù)后,具有7個節(jié)點描述符1402的稀疏子樹描述符1400存儲63位(7個節(jié)點描述符×9位=63)。
數(shù)據(jù)字段406中的位數(shù)除以稀疏子樹描述符14001-1400n的位數(shù)可以計算出每個子樹入口404的稀疏子樹描述符1400的數(shù)量。對于模式4,數(shù)據(jù)字段406中的位數(shù)為256并且稀疏子樹描述符中的位數(shù)為63。因此稀疏子樹描述符14001-1400n的數(shù)量為4(int(256/63)=4)。
每個子樹的節(jié)點數(shù)乘以每個子樹入口404的子樹數(shù)量可以得到每個子樹入口404的節(jié)點描述符14021-1402n的總數(shù)。計算模式4,如果在稀疏子樹描述符14001-1400n中存儲了7個節(jié)點描述符14021-1402n,那么每個子樹入口404的節(jié)點描述符1402的數(shù)量為28(7×4=28),并且如果每個子樹描述符14001-1400n有5個節(jié)點描述符1402,則結(jié)果為20(5×4=20)。
表2中的映射程序入口列表示子樹入口404使用了多少子樹映射程序418(圖5)中的映射程序入口504(圖6B)。通過將每個子樹的節(jié)點加1并通過乘以稀疏子樹描述符中的子樹數(shù)量來計算映射程序值。每個子樹節(jié)點加1是因為需要比每個子樹節(jié)點數(shù)量多1個映射程序入口,以便存儲子樹的缺省入口。
參見表2中模式4的一行,如果每個稀疏子樹描述符1400有7個節(jié)點描述符1402,那么每個子樹入口404需要32((7+1)×4=32)個映射程序入口,并且如果每個稀疏子樹描述符1400有5個節(jié)點描述符1402,那么每個稀疏子樹描述符1400需要24((5+1)×4=24)個節(jié)點描述符1402。因為在16個塊遞增中分配了子樹映射程序418(圖5)中的映射程序地址416,所以選擇每個子樹節(jié)點的數(shù)量和每個子樹入口404的子樹數(shù)量,以便每個子樹入口404的節(jié)點描述符的最大數(shù)量不超過30。通過在指針字段408中存儲兩個塊基地址6001,6002來提供32個映射程序地址416。
轉(zhuǎn)到圖16C,子樹存儲器400中的每個子樹入口404可以配置成如結(jié)合圖6B所述的密集模式或稀疏模式。通過提供表示子樹入口404是否以密集模式或稀疏模式編碼的標(biāo)志,將結(jié)合圖4所述的子樹映射程序418(圖5)中存儲的密集模式的子樹入口描述符304(圖4)修改為稀疏模式。類型字段1406提供指示符。
類型字段1406的狀態(tài)表示子樹入口404是按密集模式還是按稀疏模式配置。如果子樹入口404以稀疏模式配置,那么稀疏子樹描述符選擇字段1408中存儲的值和子樹索引312用于選擇稀疏子樹描述符1400。稀疏子樹描述符選擇1408將結(jié)合圖16在后面作詳細(xì)描述。
圖17說明了用于提供塊位移714來選擇稀疏集中子樹的節(jié)點的映射程序入口504(圖6B)的圖8所示的位移邏輯700中稀疏模式邏輯1502。稀疏模式邏輯1502根據(jù)子樹入口404中稀疏子樹描述符1400存儲的節(jié)點描述符1402來提供塊位移714。位移邏輯700還包括密集模式邏輯1500。密集模式邏輯1500包括節(jié)點選擇706和用來提供密集集中子樹中用于路由的塊位移714的“1”計數(shù)邏輯708。密集模式邏輯1500已經(jīng)結(jié)合圖8描述過了。
如果類型字段1406的狀態(tài)表示子樹入口404以稀疏模式配置,那么來自子樹入口404的子樹數(shù)據(jù)412轉(zhuǎn)發(fā)到稀疏模式邏輯1502。結(jié)合圖18描述稀疏模式子樹邏輯1502。
圖18說明了圖17中位移邏輯700所示的稀疏模式邏輯1502。稀疏模式邏輯1502包括子樹選擇邏輯1600,多路復(fù)用器1602,內(nèi)容可編址存儲器(“CAM”)1606以及轉(zhuǎn)換邏輯1604。所選子樹入口404中的數(shù)據(jù)字段406中存儲的稀疏子樹描述符14001-1400n通過子樹數(shù)據(jù)412轉(zhuǎn)發(fā)到位移邏輯700。位移邏輯700將稀疏子樹描述符14001-1400n轉(zhuǎn)發(fā)到稀疏模式邏輯1502中的多路復(fù)用器1602。由子樹選擇邏輯1600生成的選擇1614來選擇子樹數(shù)據(jù)412中的一個稀疏子樹描述符14001。
子樹選擇邏輯1600根據(jù)從前一個映射程序?qū)舆x擇的映射程序入口轉(zhuǎn)發(fā)的稀疏子樹描述符選擇1408的狀態(tài)和所選子樹入口404中的指針字段408中存儲的模式1404生成選擇1614,以便選擇稀疏子樹描述符14001。表3說明了所選稀疏子樹描述符14001和從多路復(fù)用器1602通過所選擇的稀疏子樹描述符1610從對應(yīng)模式4的子樹入口404的多路復(fù)用器1602轉(zhuǎn)發(fā)的相應(yīng)的子樹數(shù)據(jù)位412。參見表2中模式4的一行,在模式4中,子樹入口404可以存儲4個稀疏子樹描述符。這4個稀疏子樹描述符中的每一個可以以子樹入口404的模式4存儲。這4個稀疏子樹描述符1400中的每一個有63位并且可以存儲7到5個節(jié)點描述符1402。因此,這4個稀疏子樹描述符1400中的每一個從63位的邊界開始。第一個稀疏子樹描述符14001存儲在數(shù)據(jù)字段406的位620,第二個稀疏子樹描述符14002存儲在數(shù)據(jù)字段406的位12563,第三個稀疏子樹描述符14003存儲在數(shù)據(jù)字段406的位188126以及第四個稀疏子樹描述符14004存儲在數(shù)據(jù)字段406的位251189。稀疏子樹描述符選擇1408選擇數(shù)據(jù)字段406中的相應(yīng)位。例如,看表3,如果稀疏子樹描述符選擇1408是“0001”,那么選擇第二個稀疏子樹描述符14002并且通過多路復(fù)用器1602將256位子樹數(shù)據(jù)412的位12563從所選擇的稀疏子樹描述符1610轉(zhuǎn)發(fā)到轉(zhuǎn)換邏輯1604。
表3子樹存儲器400中的每個子樹入口404可以配置成稀疏模式或密集模式。以稀疏模式配置的每個子樹入口404可以配置為能夠通過模式1404存儲每個稀疏子樹描述符1400的不同數(shù)量的節(jié)點描述符1402。以稀疏模式配置的子樹入口404中所有稀疏子樹描述符1400存儲每個稀疏子樹描述符1400相同數(shù)量的節(jié)點描述符1402。
可以對節(jié)點描述符1402編碼以表示子樹中的多個節(jié)點。節(jié)點描述符1402表示的多個8位節(jié)點通過屏蔽8位中的一些位來識別。為取代利用每個節(jié)點描述符1402存儲屏蔽位,使用9位節(jié)點描述符1402對節(jié)點描述符1402表示的8位寬的節(jié)點進(jìn)行完全編碼。使用運行比特長度編碼來以9位寬的節(jié)點描述符1402對8位寬的節(jié)點編碼。運行比特長度編碼可以識別8位節(jié)點中的哪些位被屏蔽了。
轉(zhuǎn)換邏輯1604將所選稀疏子樹描述符1400中存儲的9位寬的節(jié)點描述符14021-1402n轉(zhuǎn)換為包括置為“X”位(任意值)的8位CAM值1612并且將8位CAM值1612裝載到CAM 1606。表4顯示了通過轉(zhuǎn)換邏輯1604將9位節(jié)點描述符1402轉(zhuǎn)換為8位CAM值1612的例子。
表49位代碼列說明了節(jié)點描述符1402中存儲的值??幢?的第一行,節(jié)點描述符1402中存儲的9位代碼為“101100100”并且對應(yīng)的8位值“101100XX”存儲在CAM 1606中。轉(zhuǎn)換邏輯1604通過在9位代碼中從右到左搜索第一個為“1”的位來轉(zhuǎn)換9位代碼。在9位代碼從右到左的位中,前兩位為“0”,第三位為“1”。由于在第一個“1”的右邊有兩個“0”,因此轉(zhuǎn)換邏輯1604將“100”轉(zhuǎn)換為兩個任意位(“XX”)。第一個“1”被忽略,余下的位直接復(fù)制到8位值的后幾位。
在表4中的第二行,節(jié)點描述符1402存儲的9位代碼為“100100000”。轉(zhuǎn)換邏輯1604通過在9位代碼中從右到左搜索第一個為“1”的位來轉(zhuǎn)換9位代碼。第5位存儲“1”。9位代碼被轉(zhuǎn)換為其5位最低有效位(“LSBS”)設(shè)置為“任意值”(“X”)的8位值。通過使用9位運行比特長度編碼存儲節(jié)點描述符1402,使每個節(jié)點描述符1402所需的位數(shù)最少,因此增加了可以存儲在查詢表200中的節(jié)點描述符1402的數(shù)量。
在9位節(jié)點描述符1402轉(zhuǎn)換為8位值之后,轉(zhuǎn)換邏輯1604將8位值載入CAM 1606。8位值以與所選稀疏子樹描述符1400中存儲的節(jié)點描述符1402相同的順序載入CAM 1606,即,從最短到最長的匹配。CAM 1606提供用來存儲每個稀疏子樹描述符1400的最大編號節(jié)點描述符1402的存儲空間。因此,CAM 1606為8位寬16個入口深,以便能提供15個入口來存儲模式5的稀疏子樹描述符1400的節(jié)點描述符1402的最大編號以及缺省的映射程序地址。CAM 1606具有三進(jìn)制功能和內(nèi)置的多匹配分解器。相對于提供真正的內(nèi)容地址存儲器,小容量的CAM 1606可以利用邏輯門來實現(xiàn),即,CAM 1606可以通過仿真CAM的硬件電路來實現(xiàn)。
稀疏子樹描述符1400中存儲的節(jié)點描述符1402的數(shù)量確定了存儲稀疏子樹描述符1400的子樹入口404。在特定模式范圍內(nèi)存儲節(jié)點描述符1402的稀疏子樹描述符1400存儲在相同的子樹入口404中。為每個子樹的缺省路由計算缺省映射程序地址。缺省的8位值永久地存儲在CAM1606的第一單元以計算缺省的映射程序地址。
在所選稀疏子樹1400對應(yīng)的8位值載入CAM 1606之后,利用關(guān)鍵字210b的下一部分搜索CAM 1606。選定與關(guān)鍵字210b的下一部分中最大位數(shù)匹配的CAM 1606中的入口。從搜索CAM得到的匹配地址作為塊位移714轉(zhuǎn)發(fā)。塊位移714用來確定與子樹映射程序418(圖5)中所存儲路由對應(yīng)的映射程序入口的映射程序地址416。
圖19A-D說明了對稀疏集中子樹1700中一個節(jié)點的塊位移714的選擇。圖17A用圖形表示了稀疏集中子樹1700中的路由。子樹1700中的節(jié)點對應(yīng)三個路由r0,r1和r2之一,r0是子樹1700的缺省路由。以稀疏子樹描述符1400中的節(jié)點描述符14021和14022編碼r1,r2兩個路由。缺省路由r0的值永久保存在CAM 1606中的第一入口1702中。參見表2,具有兩個節(jié)點描述符1402的稀疏子樹描述符1400存儲在模式字段1404為“1”的子樹入口404中。
在子樹1700中,r2對應(yīng)所有與10xxxxxx匹配的節(jié)點,r1對應(yīng)所有與010xxxxx匹配的節(jié)點。為了最小化用來描述稀疏子樹描述符1400中每個路由的每個節(jié)點描述符14021,14022所需的位數(shù),使用運行比特長度編碼對節(jié)點描述符14021,14022進(jìn)行編碼。用于編碼的方法比用于對節(jié)點進(jìn)行完全編碼所用位數(shù)多1位。在第一個“X”(“任意值”)的位置插入“1”并且其余X位編碼為“0”。這樣,路由10xxxxxx被翻譯為10100000,路由010xxxxx被翻譯為010100000。
圖19B說明了節(jié)點描述符14021和14022在稀疏子樹描述符1400中的存儲。因為有兩個節(jié)點描述符14021和14022存儲在稀疏子樹描述符1400中,所以節(jié)點描述符14021和14022存儲在模式字段1404設(shè)置為“1”的子樹入口404中。因為r1需要與前三位匹配,而r2需要與前兩位匹配,所以子樹的最長匹配為r1。節(jié)點14021和14022按從最短到最長的匹配順序存儲在稀疏子樹描述符1400中,其中r2的節(jié)點描述符14021存儲在第一位,r1的節(jié)點描述符14022存儲在下一位。
圖19C說明了節(jié)點描述符14022向8位屏蔽值1706的轉(zhuǎn)換。在從左到右的節(jié)點描述符位17081-17089中,第一個“1”存儲在位17086,它標(biāo)志著8位被屏蔽值1706的屏蔽位的結(jié)束。執(zhí)行下面的位轉(zhuǎn)換來實現(xiàn)節(jié)點描述符14022向8位被屏蔽值1706的轉(zhuǎn)換。存儲在節(jié)點描述符17081位的“0”轉(zhuǎn)換為“X”并且存儲在8位被屏蔽值17101位。存儲在節(jié)點描述符17082位的“0”轉(zhuǎn)換為“X”并且存儲在8位被屏蔽值17102位。存儲在節(jié)點描述符17083位的“0”轉(zhuǎn)換為“X”并且存儲在8位被屏蔽值17103位。存儲在節(jié)點描述符17084位的“0”轉(zhuǎn)換為“X”并且存儲在8位被屏蔽值17104位。存儲在節(jié)點描述符17085位的“0”轉(zhuǎn)換為“X”并且存儲在8位被屏蔽值17105位。存儲在節(jié)點描述符17086位的“1”被忽略。存儲在節(jié)點描述符17087位的“0”存儲在8位被屏蔽值17106位。存儲在節(jié)點描述符17088位的“1”存儲在8位被屏蔽值17107位。存儲在節(jié)點描述符17089位的“0”存儲在8位被屏蔽值17108位。
圖19D說明了存儲CAM 1606中的節(jié)點描述符14021和14022以及所選擇的稀疏子樹描述符1400的子樹映射程序418(圖5)中存儲的對應(yīng)的映射程序入口5041-5043。將所選擇的子樹描述符1400中存儲的9位節(jié)點描述符14021和14022轉(zhuǎn)換到轉(zhuǎn)換邏輯1604(圖18)中,并且載入CAM 1606。CAM 1606中第一個入口1702是圖19A中子樹1700所示的r0的缺省入口。第二個入口1704從所選擇的稀疏子樹描述符1400中存儲的第一節(jié)點描述符14021轉(zhuǎn)換。第二個入口1704是為r2轉(zhuǎn)換的最短匹配。把所選擇的子樹描述符1400中存儲的第二節(jié)點描述符14022從010100000轉(zhuǎn)換為010XXXXX并且存儲在CAM 1606的第三入口1706中。
對CAM 1606的搜索產(chǎn)生塊位移714(圖18)。塊位移714用來確定子樹映射程序418(圖5)中存儲的映射程序入口5041-5043的映射程序地址416。利用存儲最長匹配的入口1702,1704,1706的關(guān)鍵字210b的第二部分來搜索CAM 1606。根據(jù)所選擇的子樹入口404中的指針字段408中存儲的塊基地址6001,6001之一將CAM 1606提供的塊位移714與子樹基地址結(jié)合。
圖20是說明圖8所示指針邏輯702中稀疏模式基選擇邏輯1800的方框圖。指針邏輯702選擇用于計算子樹映射程序418(圖5)中映射程序入口504(圖6B)的映射程序地址416的基地址716。指針邏輯702包括密集模式基選擇邏輯710和稀疏模式基選擇邏輯1800,根據(jù)從上一層映射程序?qū)愚D(zhuǎn)發(fā)的子樹入口描述符304(圖4)中存儲的類型1406的狀態(tài)來選擇其一。如前所述,類型1406的狀態(tài)表示是否將子樹配置為密集模式。
如果子樹入口404存儲了多個稀疏子樹描述符1400,稀疏模式基選擇邏輯1800計算稀疏子樹描述符1400的基地址716。稀疏模式基選擇邏輯1800利用模式字段1404中存儲的模式值1608和子樹入口404中塊基地址域6001,6002中存儲的子樹指針414以及上一層映射程序?qū)愚D(zhuǎn)發(fā)的子樹入口描述符304(圖4)中存儲的稀疏子樹描述符選擇1408來計算基地址716?;刂?16的計算如下基地址(稀疏子樹描述符)=塊基地址+基位移其中,基位移=((1+節(jié)點/子樹)×稀疏子樹描述符選擇)例如,為查找以稀疏模式4配置的子樹入口404中2號子樹的起始基地址716,首先計算基位移。2號子樹對應(yīng)的稀疏子樹描述符選擇1408為“1”并且節(jié)點/子樹數(shù)為7(見表2)。基位移為8((1+7)×1)。每個塊基地址6001,6002是分配給子樹入口404的16個映射程序地址塊的基地址。2號子樹對應(yīng)的基位移是小于16的8,因此2號子樹的塊基地址是塊基地址6001并且稀疏子樹描述符的基地址716是塊基地址6001+8。表5說明了以模式4配置的子樹入口404中四個子樹的每個子樹基地址。
表5
圖21說明了存儲在子樹存儲器400中的密集子樹描述符和稀疏子樹描述符。結(jié)合圖15來描述圖21。子樹B(圖21)的密集子樹描述符存儲在子樹入口4041的數(shù)據(jù)字段4061。子樹A(圖21)的稀疏子樹描述符14001存儲在子樹入口4042的數(shù)據(jù)字段4062。密集子樹描述符存儲結(jié)合圖6B描述過的子樹B底層中每個節(jié)點的節(jié)點位。稀疏模式描述符14001包括對應(yīng)結(jié)合圖19B描述過的路由r4和r5的節(jié)點描述符14021和14022。子樹索引312選擇子樹入口4041,4042。
s0(圖15)的映射程序106a中映射程序入口504(圖6B)中子樹入口描述符304(圖4)存儲的子樹索引312選擇子樹入口4041。s1(圖15)的映射程序106a中映射程序入口504(圖6B)中子樹入口描述符304(圖4)存儲的子樹索引312選擇子樹入口4042。因此,子樹存儲器400可以存儲稀疏子樹和密集子樹對應(yīng)的子樹入口4041,4042。
圖22是說明用來向存儲稀疏集中子樹和密集集中子樹中的節(jié)點的路由的子樹映射程序418(圖5)中的映射程序入口504(圖6B)提供映射程序地址416(圖5)的方法的流程圖。任何子樹入口404都可以存儲多個稀疏子樹描述符或一個密集子樹描述符。根據(jù)路由在二叉樹中的如何分布,可以對稀疏子樹描述符和密集子樹描述符進(jìn)行任意組合。靈活地混合和匹配在子樹存儲器400中子樹入口404中的稀疏模式和密集子樹描述符可以更好地利用子樹存儲器400。
在步驟1900中,從在上一映射程序?qū)又羞x擇的子樹入口描述符304(圖4)中存儲的類型1406的狀態(tài)來確定所選擇的子樹入口404的配置。如果子樹入口404的類型配置為稀疏模式,處理過程繼續(xù)到步驟1902。否則,處理過程繼續(xù)到步驟1914。
在步驟1902中,子樹入口404的配置是稀疏模式。以稀疏模式配置的子樹入口404存儲多個稀疏子樹描述符1400。根據(jù)模式字段1404的狀態(tài)確定子樹入口404中存儲的稀疏子樹描述符1400的數(shù)量。位移邏輯700中的稀疏模式邏輯1502根據(jù)從上一映射程序?qū)愚D(zhuǎn)發(fā)的子樹入口描述符304(圖4)中存儲的稀疏子樹描述符選擇1408和前面結(jié)合圖14描述過的模式字段1404的內(nèi)容來從子樹入口404中選擇稀疏子樹描述符1400。處理過程繼續(xù)到步驟1904。
在步驟1904,所選擇的稀疏子樹描述符1400中的節(jié)點描述符1402中存儲的9位編碼值被轉(zhuǎn)換為8位值并且按從最短到最長匹配的順序存儲在CAM 1606中。處理過程繼續(xù)到步驟1906。
在步驟1906中,利用關(guān)鍵字210b的下一部分在CAM 1606中搜索存儲最長匹配的CAM入口。處理過程繼續(xù)到步驟1908。
在步驟1908中,把存儲關(guān)鍵字210b下一部分的最長匹配的CAM 1606中的位置的地址作為塊位移714轉(zhuǎn)發(fā)。塊位移714用來計算子樹映射程序418(圖5)中映射程序入口504(圖6B)的映射程序地址416(圖5B)。處理過程繼續(xù)到步驟1910。
在步驟1910中,根據(jù)從上一映射程序?qū)愚D(zhuǎn)發(fā)的子樹入口描述符304(圖4)中存儲的稀疏子樹描述符選擇1408和所選擇的子樹入口404中存儲的模式字段1404的內(nèi)容來計算所選稀疏子樹描述符1400對應(yīng)的基地址716。處理過程繼續(xù)到步驟1912。
在步驟1912中,通過在加法器邏輯704(圖8)中將塊位移714和基地址716相加來計算映射程序地址416。通過子樹映射程序418(圖5)中的映射程序地址416識別的映射程序入口504存儲路由入口302(圖4)或子樹入口描述符304(圖4)。如果映射程序入口504(圖6B)存儲路由入口302(圖4),那么搜索結(jié)束。如果映射程序入口504(圖6B)存儲子樹入口描述符304(圖4),那么繼續(xù)在下一映射程序?qū)铀阉鲗?yīng)關(guān)鍵字210b的值。
在步驟1914中,子樹入口404以密集模式配置并且在數(shù)據(jù)字段406中存儲一個密集子樹描述符。通過統(tǒng)計前面結(jié)合圖6B描述過的子樹入口404中數(shù)據(jù)字段406中存儲的密集子樹描述符中“1”的數(shù)量來計算塊位移714。處理過程繼續(xù)到步驟1916。
在步驟1916中,子樹入口404在子樹入口404中的指針字段408存儲16個塊基地址600。前面結(jié)合圖8描述過的指針邏輯702中的密集模式基選擇邏輯710選擇塊基指針600中的一個。處理過程繼續(xù)到步驟1912。遞增更新圖23說明了在查詢表200中添加新路由的二叉樹表示。二叉樹說明了查詢表200中存儲的對應(yīng)映射程序?qū)? 2000,映射程序?qū)? 2002和映射程序?qū)? 2004的路由。映射程序?qū)? 2002存儲子樹A和B的路由。映射程序?qū)? 2004存儲子樹A1,A2,B1和B2的路由。s5表示子樹映射程序418(圖5)中存儲的子樹入口描述符304(圖4)。s5對應(yīng)的子樹入口描述符304(圖4)存儲指向子樹B2的指針,子樹B2允許繼續(xù)在映射程序?qū)? 2004搜索關(guān)鍵字210的最長匹配路由。
因為子樹B22006只有兩個路由,r6和h1,所以它是稀疏子樹。因此,節(jié)點r6和h1對應(yīng)的節(jié)點描述符1402(圖16A)存儲在已經(jīng)結(jié)合圖14A描述過的稀疏子樹描述符1400中。因為在稀疏子樹描述符1400中存儲了兩個節(jié)點描述符1402,所以子樹B22006對應(yīng)的稀疏子樹描述符1400存儲在子樹存儲器400中模式字段1404設(shè)置為“1”的子樹入口404中。
子樹B2’2008所示的新節(jié)點h2添加到查詢表200中。因為子樹B22006的新增路由使稀疏子樹描述符1400中存儲的節(jié)點描述符1402的數(shù)量從2增加到3,所以新路由h1不能直接添加到查詢表的子樹B22006中。向稀疏子樹描述符1400增加節(jié)點描述符1402需要在模式字段1404設(shè)置為“2”的子樹入口404中分配新的稀疏子樹描述符1400。因此,增加路由h1需要用子樹B2’2008代替子樹B22006。
圖24說明了處理器存儲器2400中存儲的更新路由。查詢表200中存儲的二叉樹的拷貝也存儲在與查詢表200分離的處理器存儲器2400中。存儲子樹B22006的路由復(fù)制到處理器存儲器2400的子樹B2’2008并且向子樹B2’2008增加新路由h2。
路由更新程序2402生成一系列路由更新指令2404,以便將子樹B2’2008添加到查詢表200中并且將路由更新2404轉(zhuǎn)發(fā)到表更新程序2406。表更新程序2406生成路由更新2402對應(yīng)的表更新2410并且轉(zhuǎn)發(fā)更新周期2412,以便利用路由更新2404來更新查詢表200。更新周期2412將路由更新寫入子樹存儲器400(圖5)中相應(yīng)的存儲器位置和子樹映射程序418中(圖5)。
返回圖23,更新周期2412包括用來分配一部分子樹映射程序418(圖5)以存儲映射程序入口504(圖6B)中新子樹B2’2008對應(yīng)的路由的指令。子樹B2’2008包括路由h1和r6以及新路由h2的映射程序入口504(圖6B)中存儲的路由入口。在子樹B2’2008的路由入口存儲在子樹映射程序418(圖5)中的映射程序入口504(圖6B)后,產(chǎn)生了這些路由對應(yīng)的節(jié)點描述符1402并且存儲在稀疏子樹描述符1400中。稀疏子樹描述符1400存儲在子樹入口404。子樹入口404的模式1404與稀疏子樹描述符1400中存儲的節(jié)點描述符1402的數(shù)量有關(guān)。
在子樹B2’2008的稀疏子樹描述符1400存儲在查詢表200的子樹存儲器400的子樹入口404中之后,s5代表的子樹入口描述符304(圖4)由指向子樹B22006改為指向子樹B2’2008。當(dāng)把子樹B2’2008添加到查詢表時,可以通過s5訪問子樹B22006中存儲的路由r6和h1。在子樹B2’2008存儲到查詢表中后,s5改為指向子樹B2’2008并且可以訪問路由h1和r6和新路由h2。因此,當(dāng)把新路由h2添加到查詢表200中時,可以在子樹B22006中繼續(xù)搜索對應(yīng)于路由h1和r6的路由索引。
圖25說明了查詢表200中子樹映射程序418b中的映射程序入口504c4中存儲的圖23所示的新路由h2。結(jié)合圖24所示的二叉樹表示來描述圖25。
映射程序?qū)? 2002中的子樹B有3個路由;即r3,s4和s5。因為子樹B的路由少于16個,所以它是稀疏子樹。子樹B r3,s4和s5的節(jié)點描述符1402a1-1402a3存儲在子樹存儲器400a中子樹入口404a中的稀疏子樹描述符1400a1中。子樹映射程序418a中存儲子樹B中每個路由對應(yīng)的映射程序入口504a2-504a4。子樹映射程序418a中的映射程序入口504a1存儲子樹B的缺省路由。每個映射程序入口504a2-504a4存儲該節(jié)點的路由入口302(圖4)或子樹入口描述符304(圖4)。504a3中存儲路由s4的子樹入口描述符304(圖4),504a4中存儲s5的子樹入口描述符304(圖4)。映射程序入口504a4中存儲的s5為子樹存儲器400b提供子樹索引312b,以便開始下一層搜索;即對映射程序?qū)? 2004的搜索。
子樹B2有兩個路由,即h1和r6,所以它也是稀疏子樹。節(jié)點描述符1402b1-1402b2存儲在子樹存儲器400b中的子樹入口404b中的稀疏子樹描述符1400b1中。子樹B2的每個路由存儲在映射程序入口504b2-504b3中并且子樹B2的缺省路由存儲在映射程序入口504b1中。
為在子樹B22006中搜索路由h1,將保存了用來存儲路由s5的節(jié)點描述符1402的稀疏子樹描述符1400a的子樹入口404a的地址通過子樹索引312a轉(zhuǎn)發(fā)到子樹存儲器400a。所選擇的子樹入口404a中存儲的數(shù)據(jù)字段406和指針字段408通過子樹數(shù)據(jù)412a和子樹指針414a轉(zhuǎn)發(fā)到映射程序地址邏輯402a。映射程序地址邏輯402a生成存儲了s5的子樹入口的映射程序入口504a4的映射程序地址416a。映射程序地址416a取決于子樹數(shù)據(jù)412a,子樹指針414a和關(guān)鍵字210b的下一部分。把s5的子樹入口通過子樹索引312b轉(zhuǎn)發(fā)到子樹存儲器400b。
子樹存儲器400b存儲子樹B22006的節(jié)點描述符1402b2,1402b1。子樹B2的稀疏子樹描述符1400b1存儲在子樹入口404b中。子樹入口404b中存儲的數(shù)據(jù)字段406和指針字段408通過子樹數(shù)據(jù)412b和子樹指針414b轉(zhuǎn)發(fā)到映射程序地址邏輯402b。映射程序地址邏輯402b生成存儲了h1的路由入口的映射程序入口504b3的映射程序地址416b。映射程序地址416b取決于子樹數(shù)據(jù)412b,子樹指針414b和關(guān)鍵字210c的下一部分確定。
為向子樹B22006添加路由h2,分配子樹映射程序418b中一組前面未使用過的映射程序602c,以便存儲保存了子樹B2’2008的路由r6,h1和h2的映射程序入口504c2-504c4。映射程序入口504c1存儲子樹B2’2008的缺省入口;即,映射程序入口504b1中存儲的相同的值。映射程序入口504c2存儲路由r6的路由入口;即,映射程序入口504b2中存儲的相同的值。映射程序入口504c3存儲路由h1的路由入口;即,映射程序入口504b3中存儲的相同的值。映射程序入口504c4存儲路由h2的路由入口。當(dāng)寫入映射程序入口504c1-4塊時,可以通過子樹映射程序418a中的504a4中為路由s5存儲的子樹入口來訪問映射程序入口504b1-504b3中存儲的路由入口。
在子樹映射程序418b中已存儲了子樹B2’2008的映射程序入口504c1-4后,把稀疏子樹描述符1400c1添加到子樹存儲器400b。節(jié)點描述符1402c1-3的數(shù)量少于16,因此,節(jié)點描述符1402c1-3存儲在稀疏子樹描述符1400c1中。子樹描述符14001在子樹存儲器400b中的位置取決于與稀疏子樹描述符1400c1有關(guān)的節(jié)點描述符1402c1-3的熟練。通過在子樹B22006中增加一個新路由,要為稀疏子樹描述符1400c1存儲的節(jié)點描述符1402c1-1402c3的數(shù)量從2增加到3。稀疏子樹描述符1400c1存儲在每個稀疏子樹描述符含有3個節(jié)點描述符的子樹入口404c中,并且將模式字段1404設(shè)置為“2”。如果有可用空間或分配了新模式3的子樹入口,那么稀疏子樹描述符1400c1存儲在當(dāng)前模式3的子樹入口404c中。子樹B2’2008中路由的節(jié)點描述符存儲在模式3的子樹入口404c中稀疏子樹描述符1400c1中的節(jié)點描述符1402c1-3中。
把稀疏子樹描述符1400c1和節(jié)點描述符1402c1-3存儲到子樹存儲器400b后,可以訪問子樹B2’2008。為提供對子樹B2’2008的訪問,修改子樹入口504a4在索引子樹入口404c中索引稀疏子樹描述符1400b1而不是在子樹入口404b中索引稀疏子樹描述符1400c1??梢栽L問映射程序入口504c4中存儲的路由h2的路由入口和相應(yīng)映射程序入口504c2和504c3中分別存儲的路由r6和h1。
由于不能再訪問映射程序入口504b1-504b3,所以將它們釋放并放置在空閑列表(未示出)中等待以后分配。另外,也不能再訪問稀疏子樹描述符1400b1。因此,稀疏子樹描述符1400b1被釋放并放置在空閑列表(未顯示)中等待以后分配。
已經(jīng)描述了向稀疏子樹中增加路由。也可以通過在新分配的子樹入口404中存儲新的密集子樹描述符以及在子樹映射程序418中存儲對應(yīng)的映射程序入口,并且將映射程序入口504a4中存儲的子樹入口改為索引新分配的子樹入口404來向密集子樹中增加路由。
圖26是說明在圖25所示查詢表200中執(zhí)行增加路由的遞增更新步驟的流程圖。
在步驟2200中,計算每個子樹的路由數(shù)量以確定路由更新產(chǎn)生稀疏子樹還是密集子樹。如果路由更新后為密集子樹,處理過程繼續(xù)到步驟2218。如果路由更新后為稀疏子樹,處理過程繼續(xù)到步驟2202。
在步驟2202中,子樹是稀疏的,因此確定為稀疏子樹模式。處理過程繼續(xù)到步驟2204。
在步驟2204中,搜索子樹映射程序418(圖5)中存儲的部分填充的子樹入口404的列表以確定是否可將新的稀疏子樹描述符1400c1存儲在前面分配的子樹入口404中。例如,可將4個稀疏子樹描述符1400c1-1400c4存儲在模式4的子樹入口404中。如果只存儲了3個,子樹入口404被部分填充并且存儲在部分填充的子樹入口404的列表中。如果有可用的部分填充的子樹入口404,處理過程繼續(xù)到步驟2208。否則,處理過程繼續(xù)到步驟2206。
在步驟2206中,分配新的子樹入口404c以便存儲稀疏子樹描述符1400c1,并且在為新分配的子樹入口404c中的稀疏子樹描述符1400c1中存儲的節(jié)點描述符1402c1-1402c3存儲映射程序入口504(圖6B)的子樹映射程序中分配映射程序入口504c1-504c4。把指向子樹映射程序418(圖5)中分配的映射程序入口504c1-504c4塊的指針存儲在新子樹入口404c的指針字段408中。處理過程繼續(xù)到步驟2208。
在步驟2208中,從子樹入口404c中指針字段408中存儲的指針和子樹入口404c中模式字段1404中存儲的模式來確定稀疏子樹描述符1400c1的子樹映射程序中第一個映射程序入口504c1的位置。處理過程繼續(xù)到步驟2210。
在步驟2210中,將稀疏子樹的路由入口存儲在子樹映射程序418b中的映射程序入口504c1-504c4中。處理過程繼續(xù)到步驟2212。
在步驟2212中,把存儲節(jié)點描述符1402c1-1402c3的稀疏子樹描述符1400c1存儲在子樹入口404c中。處理過程繼續(xù)到步驟2214。
在步驟2214中,映射程序入口504a4中存儲的子樹入口描述符304(圖4)被修改為索引子樹入口404c中存儲的新稀疏子樹描述符1400c1?,F(xiàn)在可以訪問映射程序入口504c4中存儲的h2的路由入口。處理過程繼續(xù)到步驟2216。
在步驟2216中,不能再訪問映射程序入口504b1-504b3和稀疏子樹描述符1400b。將映射程序入口504b1-504b3放置在子樹映射程序418b的映射程序入口504(圖6B)的空閑列表中并且分配用來存儲其它路由。在部分填充的子樹入口的列表中更新子樹入口404b中的第一個可用位置。處理過程結(jié)束。
在步驟2218中,從處理器存儲器2400(圖24)中存儲的空閑子樹入口404的列表分配一個新的子樹入口404。分配新的子樹入口404用來存儲新的密集子樹描述符。分配子樹映射程序418b中的映射程序入口組504(圖6B)用于存儲這些路由。指向若干塊已分配的映射程序入口504(圖6B)的指針存儲在子樹入口404(圖5)中的指針字段408(圖7)中。處理過程繼續(xù)到步驟2220。
在步驟2220中,如前面結(jié)合圖6A-B描述的,將新的密集子樹描述符寫入新子樹入口404中的數(shù)據(jù)字段406。處理過程繼續(xù)到步驟2222。
在步驟2222中,把密集子樹的路由入口存儲在由子樹入口404中的指針字段408中存儲的指針?biāo)R別的子樹映射程序418(圖5)中的映射程序入口504(圖6B)中。處理過程繼續(xù)到步驟2224。
在步驟2224中,修改映射程序入口504a4中存儲的子樹入口描述符304(圖4)以指向新的子樹入口404c中存儲的新密集子樹描述符?,F(xiàn)在可以訪問映射程序入口504c4中存儲的h2的路由入口。處理過程繼續(xù)到步驟2226。
在步驟2226中,把由舊子樹入口404中的指針字段408中存儲的指針指向的映射程序入口504(圖6B)返回到處理器存儲器2400(圖24)中存儲的映射程序入口的空閑列表。舊的子樹入口404b添加到處理器存儲器2400(圖24)中存儲的空閑子樹入口列表中。
已經(jīng)描述了向查詢表添加路由的過程。執(zhí)行類似的過程以便從查詢表刪除路由。例如,從子樹B2’2008中刪除h2 504c4需要存儲含有路由r6和h1的兩個節(jié)點描述符的新稀疏子樹描述符,在模式2的子樹入口中存儲稀疏子樹描述符,更新對應(yīng)的子樹映射程序并且習(xí)慣映射程序入口504a4中存儲的子樹入口描述符304(圖4)指向新子樹入口404中存儲的更新的子樹描述符。
雖然已經(jīng)參考優(yōu)選實施例特別給出和描述了本發(fā)明,本領(lǐng)域技術(shù)人員可以理解,在不脫離本發(fā)明所附權(quán)利要求的范圍的情況下可以對本發(fā)明的形式和細(xì)節(jié)進(jìn)行改變。
權(quán)利要求
1.一種提供子樹葉子的值的查詢表包括由子樹索引訪問的多個子樹入口;存儲在第一個子樹入口中的密集子樹描述符,密集子樹描述符包括密集子樹的每個葉子的值指示;和存儲在第二個子樹入口中的多個稀疏子樹描述符,每個稀疏子樹描述符包括至少一個節(jié)點描述符。
2.根據(jù)權(quán)利要求1所述的查詢表,其特征在于節(jié)點描述符識別稀疏子樹的葉子集合的共用值。
3.根據(jù)權(quán)利要求1所述的查詢表,進(jìn)一步包括根據(jù)密集子樹描述符中設(shè)置為“1”的位的數(shù)量來選擇與密集子樹的葉子對應(yīng)的值的映射程序邏輯。
4.根據(jù)權(quán)利要求1所述的查詢表,其特征在于為在子樹入口中存儲多個稀疏子樹描述符而提供的位的數(shù)量等于密集子樹描述符中的位的數(shù)量。
5.根據(jù)權(quán)利要求1所述的查詢表,其特征在于利用行程長度編碼對節(jié)點描述符進(jìn)行編碼。
6.根據(jù)權(quán)利要求5所述的查詢表,其特征在于節(jié)點描述符中的位的數(shù)量等于子樹葉子中的位的數(shù)量加1。
7.根據(jù)權(quán)利要求6所述的查詢表,其特征在于根據(jù)設(shè)置為“1”的第一最低有效位的位置在節(jié)點描述符中對多個子樹葉子的值進(jìn)行編碼。
8.根據(jù)權(quán)利要求6所述的查詢表,其特征在于節(jié)點描述符中的位的數(shù)量為9,并且子樹葉子中的位的數(shù)量為8。
9.根據(jù)權(quán)利要求8所述的查詢表,進(jìn)一步包括可以通過子樹葉子搜索的按內(nèi)容尋址存儲器;和在所選擇的稀疏子樹描述符中選擇節(jié)點描述符,將節(jié)點描述符轉(zhuǎn)換為8位編碼值并且將8位編碼值存儲在按內(nèi)容尋址存儲器中的轉(zhuǎn)換邏輯。
10.根據(jù)權(quán)利要求9所述的查詢表,其特征在于通過把在設(shè)置為“1”的第一最低有效位右邊的最低有效位設(shè)置為“任意位”并且刪除設(shè)置為“1”的第一最低有效位來轉(zhuǎn)換節(jié)點描述符。
11.一種提供子樹葉子的值的查詢表,包括由子樹索引訪問的多個子樹入口;存儲在第一個子樹入口中的密集子樹描述符,密集子樹描述符包括密集子樹的每個葉子的值指示;和在第二個子樹入口中存儲多個稀疏子樹描述符的裝置,每個稀疏子樹描述符包括至少一個節(jié)點描述符。
12.根據(jù)權(quán)利要求11所述的查詢表,其特征在于節(jié)點描述符識別稀疏子樹葉子集合的共用值。
13.根據(jù)權(quán)利要求12所述的查詢表,進(jìn)一步包括用來根據(jù)密集子樹描述符中設(shè)置位“1”的位的數(shù)量來選擇與密集子樹的葉子對應(yīng)的值的裝置。
14.根據(jù)權(quán)利要求12所述的查詢表,其特征在于為在子樹入口中存儲多個稀疏子樹描述符而提供的位的數(shù)量等于密集子樹描述符中的位的數(shù)量。
15.根據(jù)權(quán)利要求12所述的查詢表,其特征在于利用行程長度編碼對節(jié)點描述符編碼。
16.根據(jù)權(quán)利要求15所述的查詢表,其特征在于節(jié)點描述符中的位的數(shù)量等于子樹葉子中位的數(shù)量加1。
17.根據(jù)權(quán)利要求16所述的查詢表,其特征在于根據(jù)設(shè)置為“1”的第一最低有效位的位置在節(jié)點描述符中對多個子樹葉子的值進(jìn)行編碼。
18.根據(jù)權(quán)利要求17所述的查詢表,其特征在于節(jié)點描述符中的位的數(shù)量為9并且子樹葉子中的位的數(shù)量為8。
19.根據(jù)權(quán)利要求87所述的查詢表,進(jìn)一步包括可以通過子樹葉子搜索的按內(nèi)容尋址存儲器;和用來在所選擇的稀疏子樹描述符中選擇節(jié)點描述符,將節(jié)點描述符轉(zhuǎn)換為8位編碼值并且將8位編碼值存儲在按內(nèi)容尋址存儲器中的轉(zhuǎn)換裝置。
20.根據(jù)權(quán)利要求19所述的查詢表,其特征在于通過將設(shè)置為“1”的第一最低有效位右邊的最低有效位設(shè)置為“任意位”并且刪除設(shè)置為“1”的第一最低有效位來轉(zhuǎn)換節(jié)點描述符。
21.一種為在查詢表中實現(xiàn)的子樹葉子提供值的方法,包括步驟由子樹索引訪問多個子樹入口;在第一個子樹入口中存儲密集子樹描述符,密集子樹描述符包括密集子樹的每個葉子的值指示;和在第二個子樹入口中存儲多個稀疏子樹描述符,每個稀疏子樹描述符包括至少一個節(jié)點描述符。
22.根據(jù)權(quán)利要求21所述的方法,其特征在于節(jié)點描述符識別稀疏子樹葉子集合的共用值。
23.根據(jù)權(quán)利要求21所述的方法,進(jìn)一步包括根據(jù)密集子樹描述符中設(shè)置為“1”的位的數(shù)量來選擇與密集子樹葉子對應(yīng)的值。
24.根據(jù)權(quán)利要求21所述的方法,其特征在于為在子樹入口中存儲多個稀疏子樹描述符而提供的位的數(shù)量等于密集子樹描述符中的位的數(shù)量。
25.根據(jù)權(quán)利要求21所述的方法,其特征在于利用行程長度編碼對節(jié)點描述符編碼。
26.根據(jù)權(quán)利要求21所述的方法,其特征在于節(jié)點描述符中的位的數(shù)量等于子樹葉子中的位的數(shù)量加1。
27.根據(jù)權(quán)利要求26所述的方法,其特征在于根據(jù)設(shè)置為“1”的第一最低有效位的位置在節(jié)點描述符中對多個子樹葉子的值進(jìn)行編碼。
28.根據(jù)權(quán)利要求27所述的方法,其特征在于節(jié)點描述符中的位的數(shù)量為9并且子樹葉子中的位的數(shù)量為8。
29.根據(jù)權(quán)利要求28所述的方法,進(jìn)一步包括提供可以通過子樹葉子搜索的按內(nèi)容尋址存儲器;在所選擇的稀疏子樹描述符中選擇節(jié)點描述符;將節(jié)點描述符轉(zhuǎn)換為8位編碼值;和將8位編碼值存儲在按內(nèi)容尋址存儲器中。
30.根據(jù)權(quán)利要求29所述的方法,其特征在于通過將設(shè)置為“1”的第一最低有效位右邊的最低有效位設(shè)置為“任意位”并且刪除設(shè)置為“1”的第一最低有效位來轉(zhuǎn)換節(jié)點描述符。
全文摘要
一種允許在同一個存儲器中存儲稀疏子樹描述符和密集子樹的查詢表。存儲器中的子樹入口存儲密集子樹的密集子樹描述符或稀疏子樹的多個稀疏子樹描述符。通過前一個子樹中的樹葉索引子樹入口。稀疏子樹描述符存儲至少一個節(jié)點描述。節(jié)點描述符描述具有公用值稀疏子樹中的一組樹葉。利用行程長度編碼在節(jié)點描述符中對公用值編碼。
文檔編號G11C15/00GK1435032SQ00818947
公開日2003年8月6日 申請日期2000年12月8日 優(yōu)先權(quán)日1999年12月10日
發(fā)明者大衛(wèi)·A·布朗 申請人:睦塞德技術(shù)公司