次檢查的比特?cái)?shù)可稱為步幅。如圖1B所示,所述表示前綴P0-P5的trie樹120可劃分為分trie樹,每個(gè)分trie樹表示一個(gè)步幅的樹遍歷。這樣,所述trie樹120可稱為多比特trie樹。分trie樹還具有父子關(guān)系,且這種關(guān)系是可變的。例如,如果分trie樹B是分trie樹A的子分trie樹,而分trie樹C是分trie樹B的子分trie樹,則認(rèn)為分trie樹C也是分trie樹A的子分trie樹。
[0031 ] 如圖1B所示,所述數(shù)據(jù)庫(kù)100中的每個(gè)所述規(guī)則R0-R9由連接兩個(gè)實(shí)心頂點(diǎn)的虛線表示??捎歇?dú)立規(guī)則和從屬規(guī)則。獨(dú)立規(guī)則,包括R3、R4和R6,可由源前綴和目的前綴中的葉子前綴標(biāo)識(shí),而從屬規(guī)則可有至少一個(gè)不是葉子前綴的前綴。在使用中,如果包匹配獨(dú)立規(guī)則,則所述包不能匹配任何其他規(guī)則;另一方面,如果所述包匹配從屬規(guī)則,則所述包還可匹配其他一條或多條規(guī)則(多匹配)。
[0032]在現(xiàn)有TCAM協(xié)助的算法中,對(duì)于獨(dú)立規(guī)則,可減少TCAM區(qū)域。具體地,所述葉子前綴可儲(chǔ)存到TCAM,而剩余維度的字段(如端口號(hào)、協(xié)議)可儲(chǔ)存到非TCAM內(nèi)存,如靜態(tài)隨機(jī)接入內(nèi)存(SRAM)。對(duì)于從屬規(guī)則,可仍然需要將全部維度整體儲(chǔ)存到TCAM。例如,對(duì)于所述規(guī)則數(shù)據(jù)庫(kù)100,獨(dú)立規(guī)則R3、R4和R6可儲(chǔ)存于相對(duì)較窄的TCAM和SRAM,而從屬規(guī)則,如R0-R2和R5,可整體儲(chǔ)存在較寬的TCAM(就物理寬度而言)。相比之下,本發(fā)明說(shuō)提出的實(shí)施例可使用TCAM協(xié)助的多維哈?;痶rie樹,從而對(duì)獨(dú)立規(guī)則和從屬規(guī)則都縮小TCAM區(qū)域。
[0033]圖2示出了處理器系統(tǒng)200的一個(gè)實(shí)施例,所公開的查找算法可在其中進(jìn)行運(yùn)算。所述系統(tǒng)200可包括如圖2所設(shè)置的TCAM 210、TCAM關(guān)聯(lián)數(shù)據(jù)(AD)表220、分trie樹表230、乘積表240、規(guī)則表250、優(yōu)先級(jí)選擇單元或模塊260及動(dòng)作表270。如前所述,所述TCAM 210可為特殊類型的CAM,其允許“X”的三重匹配狀態(tài),或“不關(guān)心”儲(chǔ)存的數(shù)據(jù)詞中的一個(gè)或多個(gè)比特,如網(wǎng)絡(luò)地址。本發(fā)明中,所述TCAM 210可用于儲(chǔ)存獨(dú)立IP和/或MACtrie樹(如trie樹120和trie樹150)的一個(gè)或多個(gè)根節(jié)點(diǎn)對(duì)。例如,所述TCAM 210中儲(chǔ)存的根節(jié)點(diǎn)對(duì)可包括所述源trie樹120的根節(jié)點(diǎn)(如,所述根節(jié)點(diǎn)102)和所述目的trie樹150的根節(jié)點(diǎn)(如,所述根節(jié)點(diǎn)151)。為區(qū)分IP和MAC地址,儲(chǔ)存在所述TCAM 210中的每個(gè)根節(jié)點(diǎn)可包括類型字段。注意各根節(jié)點(diǎn)可具有不同的長(zhǎng)度。
[0034](作為表項(xiàng)儲(chǔ)存在所述TCAM210中的)根節(jié)點(diǎn)對(duì)的關(guān)聯(lián)數(shù)據(jù)可儲(chǔ)存在所述TCAMAD表220的表項(xiàng)中。TCAM AD表的表項(xiàng)可包括關(guān)聯(lián)數(shù)據(jù),所述關(guān)聯(lián)數(shù)據(jù)指示或指定其根節(jié)點(diǎn)對(duì)的每個(gè)根節(jié)點(diǎn)的長(zhǎng)度,所述關(guān)聯(lián)根節(jié)點(diǎn)是否為前綴,和/或所述根節(jié)點(diǎn)比特后附加的用于生成哈希鍵的網(wǎng)絡(luò)地址比特的長(zhǎng)度??捎妹總€(gè)關(guān)聯(lián)根節(jié)點(diǎn)的所述附加比特及所述TCAM表項(xiàng)的標(biāo)識(shí)生成或計(jì)算所述哈希鍵,其中所述附加比特表示為PartKey。然后,可用所述哈希鍵定位所述分trie樹表230中的表項(xiàng)。在哈希命中時(shí),可讀取所述分trie樹表230中的關(guān)聯(lián)表項(xiàng),所述表項(xiàng)表示所述獨(dú)立多維trie樹內(nèi)的分trie樹對(duì),所述分trie樹對(duì)可為所述源trie樹120和所述目的trie樹150的組合,其中公共根節(jié)點(diǎn)對(duì)儲(chǔ)存在所述TCAM內(nèi)在中。然后,可用其PartKey之后的源和目的網(wǎng)絡(luò)地址比特在所述分trie樹內(nèi)進(jìn)行前綴匹配搜索。
[0035]注意本發(fā)明中所述各表可實(shí)現(xiàn)為儲(chǔ)存于至少一個(gè)非TCAM內(nèi)存,如靜態(tài)隨機(jī)存取內(nèi)存(SRAM),的數(shù)據(jù)結(jié)構(gòu)。例如所述分trie樹表230和/或所述乘積表240可實(shí)現(xiàn)為哈希表,用哈希鍵進(jìn)行搜索。進(jìn)一步地,所述分trie樹230和/或所述乘積表240可劃分為兩個(gè)(或更多個(gè))表,如用于鍵值的哈希運(yùn)算的2-left哈希表和儲(chǔ)存所述關(guān)聯(lián)數(shù)據(jù)的線性表。雖然以2-left哈希表為例進(jìn)行描述,但應(yīng)理解也可使用其他任意適當(dāng)類型的哈希表。進(jìn)一步地,所述規(guī)則表250及所述動(dòng)作表270可實(shí)現(xiàn)為線性表。
[0036]分trie樹的編碼可使用各種方案。例如,可將密度相對(duì)高的分trie樹編碼為位圖,而將密度相對(duì)低的分trie樹編碼為富前綴節(jié)點(diǎn)或多層的增強(qiáng)trie樹節(jié)點(diǎn)和富前綴節(jié)點(diǎn)。使用增強(qiáng)trie樹節(jié)點(diǎn)和/或富前綴節(jié)點(diǎn)時(shí),所關(guān)聯(lián)的PartKey可添加為用于哈希驗(yàn)證的trie樹編碼的一部分。分trie樹編碼的更詳細(xì)描述,可參考由Z.Wang等在2012年5月4日提交的,專利號(hào)為13/464,840,發(fā)明名稱為“基于優(yōu)化Trie樹的地址查找”的美國(guó)專利申請(qǐng),以及由Z.Wang在2013年6月18日提交的,專利號(hào)為13/920,306,發(fā)明名稱為“通過(guò)統(tǒng)一哈希化Trie樹進(jìn)行的互聯(lián)網(wǎng)協(xié)議和以太網(wǎng)查找”的美國(guó)專利申請(qǐng),兩者的內(nèi)容都通過(guò)引用結(jié)合在本發(fā)明中。
[0037]圖3示出了包分類實(shí)現(xiàn)方式300的一個(gè)實(shí)施例,可用于處理器系統(tǒng),如所述系統(tǒng)200。示例性地,所述實(shí)現(xiàn)方式300仍然使用所述規(guī)則數(shù)據(jù)庫(kù)100來(lái)說(shuō)明所公開實(shí)施例的原理,但本領(lǐng)域普通技術(shù)人員可認(rèn)識(shí)到同類方法也可適用于其他適當(dāng)規(guī)則或流。如圖3所示,TCAM (如所述TCAM 210)包括兩個(gè)TCAM表項(xiàng),所述TCAM表項(xiàng)可用于以(源前綴,目的前綴)的格式儲(chǔ)存信息。例如,第一表項(xiàng)為(0*,*),第二表項(xiàng)為(1*,*)。這里,所述第一表項(xiàng)(0*,*)可指示其匹配源前綴為O*且目的前綴為*的一個(gè)或多個(gè)規(guī)則。應(yīng)理解被發(fā)明使用的所述格式或數(shù)據(jù)形式可作為示例,但在本發(fā)明所公開的原理范圍內(nèi)可使用任何其他格式或形式。
[0038]與所述TCAM表項(xiàng)關(guān)聯(lián)的數(shù)據(jù)可儲(chǔ)存于TCAM AD表(如所述TCAM AD表220)。在一實(shí)施例中,所述關(guān)聯(lián)數(shù)據(jù)可采用(TCAM源前綴長(zhǎng)度,TCAM目的前綴長(zhǎng)度),即(srcKeyPartLen, dstKeyPartLen)的格式。這里,標(biāo)記 SrcKeyPartLen 和 dstKeyPartLen 可分別指示緊跟所述匹配的TCAM源前綴長(zhǎng)度和目的前綴長(zhǎng)度的源地址比特和目的地址比特的個(gè)數(shù)。這樣,所述第一 TCAM AD表項(xiàng)(1,0) ;(0,I)可指示所述對(duì)應(yīng)TCAM表項(xiàng)的源前綴長(zhǎng)度為I比特(簡(jiǎn)稱Ib)且目的前綴長(zhǎng)度為0b,所述網(wǎng)絡(luò)地址中沒(méi)有比特可用于生成哈希鍵,且所述目的網(wǎng)絡(luò)地址的第一個(gè)比特應(yīng)用于生成哈希鍵,用于分trie樹哈希運(yùn)算。
[0039]分trie樹表中可包含多個(gè)哈?;謙rie樹,如圖3所示的分trie樹A-F。或者,如果需要,每個(gè)分trie樹可實(shí)現(xiàn)為單獨(dú)的分trie樹表。可生成哈希鍵,用于在所述多個(gè)哈?;謙rie樹中定位哈?;謙rie樹(如,所述哈?;謙rie樹A)。這樣,由于其可用哈希鍵進(jìn)行搜索,可將所述包括所述多個(gè)哈?;謙rie樹的trie樹看作哈?;膖rie樹。所述哈希鍵可用所述TCAM AD表中儲(chǔ)存的關(guān)聯(lián)數(shù)據(jù)生成。除所述TCAM AD表項(xiàng)中定義的所述源地址比特和目的地址比特外,標(biāo)識(shí)對(duì)應(yīng)TCAM表項(xiàng)的信息(如TCAM地址或?yàn)樗鯰CAM表項(xiàng)分配的軟件標(biāo)識(shí))也可用作所述分trie樹哈希運(yùn)算中的鍵的一部分,用來(lái)區(qū)分不同TCAM表項(xiàng)。為描述清晰,與所述哈?;痶rie樹A對(duì)應(yīng)的所述哈希鍵在圖3中示為(*,I),其中I指示所述目的網(wǎng)絡(luò)地址的第一個(gè)比特的取值為1,而與所述哈?;痶rie樹B對(duì)應(yīng)的所述哈希鍵在圖3中示為(*,0),其中O指示所述目的網(wǎng)絡(luò)地址的第一個(gè)比特的取值為O。
[0040]與所述第一 TCAM AD表項(xiàng)相似,第二 TCAM AD表項(xiàng)(I,O) ; (I,2)可指示所述TCAM表項(xiàng)的源前綴長(zhǎng)度為Ib且目的前綴長(zhǎng)度為0b,第二個(gè)源地址比特中應(yīng)用于生成所述哈希鍵,且所述目的地址的前兩個(gè)比特應(yīng)用于生成哈希鍵,用于分trie樹哈希運(yùn)算。同樣,與所述哈希化分trie樹C對(duì)應(yīng)的所述哈希鍵示為(1,10),其中I指示所述源地址的第二個(gè)比特取值為1,10指示所述目的地址的前兩個(gè)比特取值為10。
[0041]所述哈?;謙rie樹A可具有根節(jié)點(diǎn)在PO的包括前綴PO和Pl的源分trie樹(如,所述trie樹120中的分trie樹),以及根節(jié)點(diǎn)在Q3的包括前綴Q3、Q4、Q6和Q5的目的分trie樹??蓪⑺龉;謙rie樹A的一層或多層編碼為位圖、增強(qiáng)trie樹節(jié)點(diǎn)、富前綴節(jié)點(diǎn)、或其組合。
[0042]在一實(shí)施例中,除進(jìn)行分trie樹編碼外,還可為哈希化分trie樹中每個(gè)源前綴和目的前綴分配標(biāo)簽。例如,圖4示出了標(biāo)簽分配實(shí)現(xiàn)方式400,可用于圖3所示的哈?;謙rie樹A。所述實(shí)現(xiàn)方式400顯示,可為Q3分配標(biāo)簽D0,為Q4分配標(biāo)簽D1,為Q6分配標(biāo)簽D2,為Q5分配標(biāo)簽D3。進(jìn)一步地,每個(gè)標(biāo)簽可包括兩個(gè)參數(shù),用(Value,Mask)表示。對(duì)于具體的分trie樹(包括源分trie樹和目的分trie樹),如所述哈?;謙rie樹A,所述源分trie樹中的標(biāo)簽的Value部分在所述源分trie樹中的所有標(biāo)簽可以是唯一的。同樣,所述目的分trie樹中的標(biāo)簽的Value部分在所述目的分trie樹中的所有標(biāo)簽可以是唯一的。
[0043]在一實(shí)施例中,所述源分trie樹和目的分trie樹中的所述標(biāo)簽分配可反映其關(guān)聯(lián)的前綴的父子關(guān)系。在所述實(shí)現(xiàn)方式400中,可對(duì)所述Value和Mask進(jìn)行配置,使Mask中設(shè)置的比特(如,I)指示要關(guān)心對(duì)應(yīng)的Value比特,而Mask中未設(shè)置的比特(如,O)指示“不關(guān)心”所述對(duì)應(yīng)Value比特。例如,從圖1B中可以看出,Q4(帶標(biāo)簽Dl)為Q6 (帶標(biāo)簽D2)的父前綴,因此可將Dl和D2設(shè)計(jì)為使以下等式成立:
[0044]D2.Value&Dl.Mask = = Dl.Value&Dl.Mask (I)
[0045]使用圖4中的值,等式(I)轉(zhuǎn)換為01&10 = = 00&10,等于00。也就是說(shuō),使用D2.Value和Dl.Mask的和(&)邏輯運(yùn)算的結(jié)果與使用Dl.Value和Dl.Mask的&運(yùn)算的結(jié)果相等。
[0046]注意所述等式(I)證明Q4為Q6的父前綴,而相反則所述等式(I)不成立。也就是說(shuō),可將Dl和D2設(shè)計(jì)為使以下等式成立:
[0047]Dl.Value&D2.Mask ! = D2.Value&D2.Mask (2)
[0048]例如,使用圖4中的值,等式(2)中Dl.Value&D2.Mask = 00&ll = 00,但其不等于D2.Value&D2.Mask = 01&11 = 01。
[0049]進(jìn)一步地,以上原