本發(fā)明涉及數(shù)據(jù)流識(shí)別技術(shù)領(lǐng)域,具體涉及一種基于tcam的數(shù)據(jù)流識(shí)別處理裝置、系統(tǒng)和方法。
背景技術(shù):
隨著通信的發(fā)展,通信網(wǎng)中基于包的業(yè)務(wù)流量已經(jīng)占據(jù)了主流。通信網(wǎng)也從適應(yīng)于tdm(timedivisionmultiplexing)通信的通信網(wǎng)轉(zhuǎn)換為更適用于包通信的通信網(wǎng)。目前,在基于包通信技術(shù)中以太網(wǎng)技術(shù)和基于tcp/ip(協(xié)議的技術(shù)占據(jù)主流,基于這兩種技術(shù)的網(wǎng)絡(luò)設(shè)備(例如各種二層交換機(jī)、三層交換機(jī)、路由器、網(wǎng)關(guān)設(shè)備、ptn(packettransportnetwork)設(shè)備等)在通信的核心層、匯聚層、接入層都有大量應(yīng)用,sdn技術(shù)和sdn設(shè)備也在迅速發(fā)展中。
這類設(shè)備中大多都有流識(shí)別和處理功能。流定義為一組具有同樣特征的報(bào)文,這些特征可以是數(shù)據(jù)包的協(xié)議字段,例如以太網(wǎng)協(xié)議的目的mac(mediaaccesscontrol)地址(后文簡(jiǎn)寫為dmac)、源mac地址(后文簡(jiǎn)寫為smac)、vlan(virtuallocalaccessnetwork)域、以太網(wǎng)類型域(ethertype);ip(internetprotocol)協(xié)議定義的ip源地址(以下簡(jiǎn)寫為sip)、目的地址(以下簡(jiǎn)寫為dip)、ipprotocol等;也可以是數(shù)據(jù)包的輸入端口、輸出端口信息(例如數(shù)據(jù)流的輸入端口),還可以是數(shù)據(jù)流內(nèi)部處理信息(例如輸出端口,改變后的數(shù)據(jù)包協(xié)議字段等)等。流識(shí)別就是根據(jù)這些字段識(shí)別出定義的流,流處理是對(duì)識(shí)別后的流指定處理行為,例如acl(accesscontrollist)(丟棄數(shù)據(jù)包)功能,指定數(shù)據(jù)包的轉(zhuǎn)發(fā)端口,指定數(shù)據(jù)包的cos(classofservice),指定數(shù)據(jù)包進(jìn)行vlan域修改,指定對(duì)數(shù)據(jù)包進(jìn)行統(tǒng)計(jì)等。流識(shí)別和處理功能在包通信中具有重要的作用,并且隨著sdn技術(shù)在通信中的應(yīng)用,流識(shí)別和處理功能將越來越重要。
通信設(shè)備中對(duì)于流的定義方法、要識(shí)別的流的數(shù)量、對(duì)流的處理行為都有明確的要求。例如:目前,ptn接入層、匯聚層設(shè)備要求識(shí)別的流就有幾千條,并且明確規(guī)定了需要基于各協(xié)議字段的自由組合來識(shí)別流,對(duì)流的處理行為包括統(tǒng)計(jì)、鏡像、指定轉(zhuǎn)發(fā)端口等。并且流處理行為所對(duì)應(yīng)的流識(shí)別方式一般也不同,例如:vlan處理行為主要是基于端口和數(shù)據(jù)幀攜帶的vlan字段識(shí)別流后進(jìn)行處理,而指定轉(zhuǎn)發(fā)功能可以基于二層協(xié)議字段或三層協(xié)議字段進(jìn)行。正是由于通信設(shè)備對(duì)流識(shí)別處理的靈活性、多樣性及可觀的數(shù)量要求,使流識(shí)別成為設(shè)計(jì)的一個(gè)難點(diǎn)。
流識(shí)別和處理大致可分成三個(gè)過程:第一個(gè)過程是根據(jù)流的定義,將標(biāo)識(shí)流的各信息字段組成一個(gè)信息組,在下文中將這樣的信息組簡(jiǎn)稱為key,將這個(gè)過程稱為組key過程;第二個(gè)過程是流識(shí)別過程,就是根據(jù)所組key在一個(gè)數(shù)據(jù)庫中進(jìn)行配置,如果匹配就輸出此流對(duì)應(yīng)的索引號(hào)(也可稱為流處理索引);第三個(gè)過程是根據(jù)流到得到處理行為。流識(shí)別的難點(diǎn)在于如何使一個(gè)數(shù)據(jù)包同時(shí)匹配多個(gè)流,并給出多種處理行為。
目前,較大規(guī)模(例如幾百條)、較復(fù)雜組key情況下的流識(shí)別功能主要采用三態(tài)內(nèi)容尋址存儲(chǔ)器ternarycontentaddressablememory,簡(jiǎn)稱tcam)方式實(shí)現(xiàn)。使用tcam可在很短的時(shí)間內(nèi)完成所有待查找條目的比對(duì),并且tcam器件的每個(gè)查找位都帶mask(屏蔽)位,使用mask位可利用它實(shí)現(xiàn)范圍匹配,和靈活組key。但tcam器件具有特定的寬度和深度,而流識(shí)別所需key的長短不同,為了適應(yīng)多種key,要將tcam器件進(jìn)行組合,例如將兩塊80比特寬的tcam并行拼接,來支持160比特寬的key的查找,但采用160比特寬的tcam來支持80比特的key查找是不經(jīng)濟(jì)的,所以對(duì)于80比特的key要再采用一組tcam來查找。這樣,在設(shè)計(jì)時(shí)必須根據(jù)需求精心組織key,安排tcam的組合,一旦需求發(fā)生變動(dòng),將導(dǎo)致重新設(shè)計(jì),且這些專用的設(shè)計(jì)很難移植,易造成設(shè)計(jì)資源的浪費(fèi),導(dǎo)致高的設(shè)計(jì)成本,例如,某設(shè)計(jì)需要識(shí)別key寬為75比特的流500條,key寬為200比特的數(shù)據(jù)流50條,采用寬度為80比特,深度128的tcam進(jìn)行拼接,會(huì)造成資源的很大浪費(fèi);且不利于移植到一個(gè)需要80比特key和100比特key的設(shè)計(jì)。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種基于tcam的數(shù)據(jù)流識(shí)別處理裝置、系統(tǒng)和方法,可實(shí)現(xiàn)靈活組key,提高tcam資源的利用率。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:一種基于tcam的數(shù)據(jù)流識(shí)別處理裝置:包括組key模塊,tcam查找模塊,查找結(jié)果判斷模塊和結(jié)果處理模塊,其中:
組key模塊用于根據(jù)數(shù)據(jù)流識(shí)別需求按照組key配置進(jìn)行組key,所述組key配置中設(shè)定了多種key的組成配置,每種key的組成配置包括每種key所用的信息字段和是否要按照信息字段組成有效key;對(duì)于需要根據(jù)信息字段組成有效key的,根據(jù)組key配置從待識(shí)別的數(shù)據(jù)流的各信息字段中選擇生成每種key所用的信息字段,按照組key方法組成待識(shí)別的數(shù)據(jù)流的key,key中包含key的種類字段和信息字段,并輸出key有效指示;對(duì)于不需要根據(jù)信息字段組成有效key的,直接輸出key無效指示;將待識(shí)別的數(shù)據(jù)流的key均發(fā)送到tcam查找模塊;
tcam查找模塊用于對(duì)組key模塊輸出的key進(jìn)行tcam條目查找,tcam查找模塊中包含根據(jù)數(shù)據(jù)流識(shí)別需求生成的tcam條目,每個(gè)條目包含key的種類字段和key的信息字段;tcam查找模塊接收組key模塊組成的待識(shí)別的數(shù)據(jù)流的key,將待識(shí)別的數(shù)據(jù)流的有效key分別輸入tcam條目查找是否有匹配項(xiàng),對(duì)于無效key直接輸出查找不匹配,將待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的查找結(jié)果輸出到查找結(jié)果判斷模塊,查找結(jié)果包括每個(gè)key對(duì)每個(gè)tcam條目是否匹配;
查找結(jié)果判斷模塊用于根據(jù)數(shù)據(jù)流識(shí)別需求生成的對(duì)應(yīng)的查找判斷配置判斷出查找的匹配項(xiàng),查找判斷配置包括對(duì)每種key對(duì)應(yīng)的查找結(jié)果進(jìn)行單獨(dú)判斷或級(jí)聯(lián)判斷的配置;接收tcam查找模塊送入的待識(shí)別的數(shù)據(jù)流的key的所有查找結(jié)果,根據(jù)查找判斷配置判斷待識(shí)別的數(shù)據(jù)流的key的查找結(jié)果是否有匹配項(xiàng),若存在,將所有匹配的tcam條目的索引發(fā)送到匹配結(jié)果處理模塊;
結(jié)果處理模塊用于根據(jù)數(shù)據(jù)流識(shí)別需求生成的與tcam條目的各索引對(duì)應(yīng)的處理行為配置得到對(duì)數(shù)據(jù)流的處理結(jié)果,所述處理行為配置包括與tcam條目各索引對(duì)應(yīng)的各處理行為以及各處理行為的優(yōu)先級(jí);接收查找結(jié)果判斷模塊送入的所有匹配tcam條目的索引,使用各匹配tcam條目的索引分別查找對(duì)應(yīng)的處理行為配置得到各索引對(duì)應(yīng)的各處理行為以及各處理行為的優(yōu)先級(jí),輸出與待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為。
在上述技術(shù)方案的基礎(chǔ)上,若數(shù)據(jù)流識(shí)別需求的某一個(gè)信息組的寬度小于tcam的寬度,將該信息組配置成一種key,若需識(shí)別的數(shù)據(jù)流的某一個(gè)信息組的寬度大于tcam的寬度,將該信息組配置成兩種或兩種以上的key。
在上述技術(shù)方案的基礎(chǔ)上,若數(shù)據(jù)流識(shí)別需求中的某信息組對(duì)應(yīng)一種key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)只對(duì)待識(shí)別數(shù)據(jù)流中該種key對(duì)應(yīng)的查找結(jié)果獨(dú)立判斷;若數(shù)據(jù)流識(shí)別需求中的某信息組對(duì)應(yīng)兩種或兩種以上的key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)需對(duì)待識(shí)別數(shù)據(jù)流中與信息組對(duì)應(yīng)的兩種或兩種以上的key對(duì)應(yīng)的查找結(jié)果級(jí)聯(lián)判斷。
在上述技術(shù)方案的基礎(chǔ)上,每個(gè)key的組成為{key_id,key_pkt_info},key_id是key的種類字段,key_pkt_info是信息字段;
每個(gè)key的組key配置為{key_valid,key_sel[n-1:0]};key_valid為‘1’表示要進(jìn)行組key,否則不進(jìn)行組key,key_sel的每個(gè)比特表示是否要選擇相應(yīng)的pkt_info進(jìn)行組key;
每個(gè)key的組key過程如下:
步驟1:生成key_id和key_pkt_info:key_id[k-1:0]根據(jù)組key配置的條目號(hào)生成,寬度為k比特;key_pkt_info[s-k-1:0]為全‘0’,寬度為s-k;
步驟2:采用移位的方法,根據(jù)key_sel[n-1:0]生成key_pkt_info[s-k-1:0]:首先判斷key_sel[n-1],為‘1’時(shí),將pkt_info(n-1)替換到key_pkt_info的低位,為‘0’時(shí)key_pkt_info不變;然后判斷key_sel[n-2],為‘1’時(shí),先將key_pkt_info左移信號(hào)pkt_info(n-2)的位寬,然后將pkt_info(n-2)替換到key_pkt_info的低位,為‘0’時(shí)key_pkt_info不變;依次進(jìn)行其它比特的判斷,當(dāng)所有比特判斷完得到key_pkt_info,在判斷過程中自動(dòng)將key_pkt_info裁剪為s-k比特。
在上述技術(shù)方案的基礎(chǔ)上,所述tcam查找模塊輸出的查找結(jié)果信息包括{key0_hit_rslt,key1_hit_rslt,…,key(m-1)_hit_rslt},其中,key0_hit_rslt表示key0的查找結(jié)果,其它key結(jié)果類推,每個(gè)查找結(jié)果都是一個(gè)數(shù)組,數(shù)組的0比特對(duì)應(yīng)第0個(gè)tcam條目的判斷結(jié)果,‘1’表示配置,其余比特類推。
在上述技術(shù)方案的基礎(chǔ)上,若查找判斷配置為獨(dú)立判斷,則僅對(duì)該key的查找結(jié)果是否有匹配項(xiàng)進(jìn)行獨(dú)立判斷;若查找判斷配置為級(jí)聯(lián)判斷,則根據(jù)查找判斷配置對(duì)需要進(jìn)行級(jí)聯(lián)判斷的key的查找結(jié)果進(jìn)行級(jí)聯(lián)判斷;具體過程如下:
查找結(jié)果判斷模塊中包含一個(gè)查找判斷配置數(shù)據(jù)庫,包含每種key對(duì)應(yīng)的查找判斷配置;查找判斷配置包括多個(gè)查處判斷配置條目,每個(gè)查找判斷配置條目中包括{cont_flag,rslt_sel_bmp[m-1:0]},其中,cont_flag為‘0’表示該種key查找進(jìn)行獨(dú)立判斷,為‘1’表示該種key查找需要和其它種key查找結(jié)果進(jìn)行級(jí)聯(lián)判斷,rslt_sel_bmp的每個(gè)比特對(duì)應(yīng)每種key,比特為‘1’表示選用該種key的查找結(jié)果進(jìn)行判定;
根據(jù)每個(gè)查找判斷配置條目的配置{cont_flag,rslt_sel_bmp[m-1:0]}逐一進(jìn)行判斷,輸出{key(i)_hit,key(i)_op_idx},其中,key(i)_hit表示第i個(gè)key查找是否有匹配項(xiàng),key(i)_op_idx表示相應(yīng)的匹配索引;
每個(gè)查找判斷配置條目判斷過程如下:
cont_flag為‘0’,則直接從對(duì)應(yīng)的從key(i)_hit_rslt中查找第一個(gè)非‘0’比特,并記錄此比特在key(i)_hit_rslt的索引為j,如果找到,輸出key(i)_hit為1,key(i)_op_idx=j(luò);如果找不到非‘0’比特,輸出key(i)_hit為’0’,key(i)_op_idx為‘0’;
cont_flag為‘1’,則進(jìn)行級(jí)聯(lián)判斷;
步驟1:首先根據(jù)rslt_sel_bmp選出所有需要級(jí)聯(lián)判斷的key_hit_rslt,其中,rslt_sel_bmp[i]為‘1’表示key(i)_hit_rslt需要級(jí)聯(lián)判斷,記錄為{key0_hit_rslt_sel,…,key(k-1)_hit_rslt_sel};共k項(xiàng),如果k等于0,key[i]_hit為‘0’;
步驟2:從key0_hit_rslt_sel中找到第一個(gè)非‘0’比特,判斷時(shí)從比特0開始,如果有非‘0’比特,記錄該比特的索引為l,輸出key[i]_hit為‘1’;如無非‘0’項(xiàng),則key[i]_hit為‘0’;
步驟3:再判斷key1_hit_rslt_sel[l+1],key1_hit_rslt_sel[l+2],…,key(m-1)_hit_rslt_sel[l+m-1]是否都為‘1’,都為‘1’,則輸出key[i]_hit為‘1’,key[i]_op_idx為l;否則輸出key[i]_hit為‘0’,重復(fù)上述步驟2、3,其中步驟2的起始判斷點(diǎn)從(l+1)開始。
在上述技術(shù)方案的基礎(chǔ)上,匹配結(jié)果處理模塊輸出與待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為,優(yōu)先級(jí)相同時(shí),輸出先讀取的處理行為。
本發(fā)明還公開了一種采用所述的基于tcam的數(shù)據(jù)流識(shí)別處理裝置組成的數(shù)據(jù)流識(shí)別處理系統(tǒng):包括兩個(gè)或兩個(gè)以上所述基于tcam的數(shù)據(jù)流識(shí)別處理裝置以及一個(gè)最終結(jié)果處理裝置,兩個(gè)或兩個(gè)以上所述基于tcam的數(shù)據(jù)流識(shí)別處理裝置用于分別獲取相同的或不同的數(shù)據(jù)流識(shí)別需求并輸出每條待識(shí)別數(shù)據(jù)流的優(yōu)先級(jí)最高的處理行為,所述最終結(jié)果處理裝置用于接收兩個(gè)或兩個(gè)以上所述基于tcam的數(shù)據(jù)流識(shí)別處理裝置分別輸出的優(yōu)先級(jí)最高的處理行為,并對(duì)接收的處理行為的優(yōu)先級(jí)進(jìn)行最終判斷,輸出本系統(tǒng)中優(yōu)先級(jí)最高的處理行為。
本發(fā)明還公開了一種基于tcam的數(shù)據(jù)流識(shí)別處理方法,包括以下步驟:
s1,根據(jù)數(shù)據(jù)流識(shí)別需求按照組key配置進(jìn)行組key,所述組key配置中設(shè)定了多種key的組成,所述組key配置中設(shè)定了多種key的組成配置,每種key的組成配置包括每種key所用的信息字段和是否要按照信息字段組成有效key;對(duì)于需要根據(jù)信息字段組成有效key的,根據(jù)組key配置從待識(shí)別的數(shù)據(jù)流的各信息字段中選擇生成每種key所用的信息字段,組成待識(shí)別的數(shù)據(jù)流的key,key中包含key的種類字段和信息字段,并輸出key有效指示;對(duì)于不需要根據(jù)信息字段組成有效key的,直接輸出key無效指示;
s2,根據(jù)數(shù)據(jù)流識(shí)別需求生成tcam條目,每個(gè)條目包含key的種類字段和key的信息字段;
s3,將待識(shí)別的數(shù)據(jù)流的有效key分別輸入tcam條目查找是否有匹配項(xiàng),對(duì)于無效key直接輸出查找不匹配,查找結(jié)果包括每個(gè)key對(duì)每個(gè)tcam條目是否匹配;
s4,根據(jù)數(shù)據(jù)流識(shí)別需求生成查找判斷配置,查找判斷配置包括對(duì)每種key對(duì)應(yīng)的查找結(jié)果進(jìn)行單獨(dú)判斷或級(jí)聯(lián)判斷的配置,根據(jù)查找判斷配置判斷待識(shí)別的數(shù)據(jù)流的key的查找結(jié)果是否有匹配項(xiàng),輸出所有匹配的tcam條目的索引;
s5,根據(jù)數(shù)據(jù)流識(shí)別需求生成與tcam條目的各索引對(duì)應(yīng)的處理行為配置,所述處理行為配置包括與tcam條目各索引對(duì)應(yīng)的各處理行為以及各處理行為的優(yōu)先級(jí);
s6,根據(jù)數(shù)據(jù)流識(shí)別需求生成各處理行為和各處理行為的優(yōu)先級(jí)配置,使用各匹配tcam條目的索引分別查找對(duì)應(yīng)的處理行為配置得到各索引對(duì)應(yīng)的各處理行為以及各處理行為的優(yōu)先級(jí),輸出與待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為。
在上述技術(shù)方案的基礎(chǔ)上,若數(shù)據(jù)流識(shí)別需求的某一個(gè)信息組的寬度小于tcam的寬度,將該信息組配置成一種key,若需識(shí)別的數(shù)據(jù)流的某一個(gè)信息組的寬度大于tcam的寬度,將該信息組配置成兩種或兩種以上以上的key;
若數(shù)據(jù)流識(shí)別需求中的某信息組對(duì)應(yīng)一種key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)只對(duì)待識(shí)別數(shù)據(jù)流中該種key對(duì)應(yīng)的查找結(jié)果獨(dú)立判斷;若數(shù)據(jù)流識(shí)別需求中的某信息組對(duì)應(yīng)兩種或兩種以上的key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)需對(duì)待識(shí)別數(shù)據(jù)流中與信息組對(duì)應(yīng)的兩種或兩種以上的key對(duì)應(yīng)的查找結(jié)果級(jí)聯(lián)判斷。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明采用靈活組key方式,從待識(shí)別數(shù)據(jù)流中提取信息字段靈活組合成多種key,使用組成的key查找tcam條目,對(duì)查找結(jié)果獨(dú)立判斷或級(jí)聯(lián)判斷,得到每種key對(duì)應(yīng)的tcam條目的索引,再根據(jù)tcam條目的索引得到每個(gè)索引對(duì)應(yīng)的處理行為,再對(duì)待識(shí)別數(shù)據(jù)流的全部key對(duì)應(yīng)的處理行為的優(yōu)先級(jí)進(jìn)行判斷,輸出優(yōu)先級(jí)最高的處理行為。采用本發(fā)明克服了傳統(tǒng)tcam方式的缺點(diǎn),無需將tcam器件組合使用以適應(yīng)不同比特的key,提高了tcam資源的利用;需求變動(dòng)時(shí),只增加相應(yīng)的key和tcam條目實(shí)現(xiàn)流識(shí)別,具有很大的擴(kuò)展性,可適合更多的應(yīng)用場(chǎng)景。
附圖說明
圖1為本發(fā)明實(shí)施例中基于tcam的數(shù)據(jù)流識(shí)別處理裝置的結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例中采用基于tcam的數(shù)據(jù)流識(shí)別處理裝置組成的數(shù)據(jù)流識(shí)別處理系統(tǒng)的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例中基于tcam的數(shù)據(jù)流識(shí)別處理方法的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例中形成key_pkt_info的過程。
具體實(shí)施方式
以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖1所示,本發(fā)明實(shí)施例提供一種基于tcam的數(shù)據(jù)流識(shí)別處理裝置,包括:
組key模塊用于根據(jù)數(shù)據(jù)流識(shí)別需求按照組key配置進(jìn)行組key,所述組key配置中設(shè)定了多種key的組成配置,每種key的組成配置包括每種key所用的信息字段和是否要按照信息字段組成有效key;對(duì)于需要根據(jù)信息字段組成有效key的,根據(jù)組key配置從待識(shí)別的數(shù)據(jù)流的各信息字段中選擇生成每種key所用的信息字段,按照組key方法組成待識(shí)別的數(shù)據(jù)流的key,key中包含key的種類字段和信息字段,并輸出key有效指示;對(duì)于不需要根據(jù)信息字段組成有效key的,直接輸出key無效指示;將待識(shí)別的數(shù)據(jù)流的key均發(fā)送到tcam查找模塊。若數(shù)據(jù)流識(shí)別需求的某一個(gè)信息組的寬度小于tcam的寬度,將該信息組配置成一種key,若需識(shí)別的數(shù)據(jù)流的某一個(gè)信息組的寬度大于tcam的寬度,將該信息組配置成兩種或兩種以上的key。
從待識(shí)別的數(shù)據(jù)流中提取生成每種key所用的信息字段{pkt_info0,pkt_info1,…,pkt_info(n-1)},共n個(gè)信息字段。用pkt_info(n-1)表示第n-1個(gè)信息字段,每個(gè)pkt_info可表示一個(gè)協(xié)議字段或部分協(xié)議字段,或協(xié)議字段的組合。例如pkt_info0可表示dmac[47:0],pkt_info1可表示smac[47:32],pkt_info(n-1)可表示{input_port,output_port,smac[31:0]},等。pkt_info的位寬可以相同或不相同。
組key配置包括m個(gè)條目,即組成m種key,每個(gè)條目由{key_valid,key_sel[n-1:0]}組成。key_valid為‘1’表示要進(jìn)行組key,否則不進(jìn)行組key,key_sel[i]表示key_sel的第i個(gè)比特,key_sel的每個(gè)比特表示是否要選擇相應(yīng)的pkt_info進(jìn)行組key。組key配置的第一個(gè)條目的{key_valid,key_sel[n-1:0]}表示第一種key的組key配置,其它類推。
根據(jù)組key配置從待識(shí)別的數(shù)據(jù)流中分別選取生成每種key所用的信息字段,組成寬度為s的m個(gè)key,連同標(biāo)識(shí)各key是否有效的key_valid信號(hào),一起送到tcam查找模塊。寬度s是根據(jù)tcam的位寬確定的,s不能大于tcam的位寬。key的組成為{key_id[k-1:0],key_pkt_info[s-k-1:0]},key_id表示key的序號(hào),k表示key_id的位寬,如果m等于5,key_id的寬度就是3,key_pkt_info的寬度是s–k。
參見圖4所示,產(chǎn)生key的步驟如下:
步驟1:生成key_id和key_pkt_info,key_id[k-1:0]根據(jù)組key配置的條目號(hào)生成,寬度為k比特(例如,若m等于5,k就為3);key_pkt_info[s-k-1:0]為全‘0’,寬度為s-k;
步驟2:采用移位的方法,根據(jù)key_sel[n-1:0]生成key_pkt_info[s-k-1:0]。參見圖4,過程如下:首先置key_pkt_info為全‘0’;然后判斷key_sel[n-1],為‘1’時(shí),將pkt_info(n-1)替換到key_pkt_info的低位,為‘0’時(shí)key_pkt_info不變;然后判斷key_sel[n-2],為‘1’時(shí),先將key_pkt_info左移信號(hào)pkt_info(n-2)的位寬,然后將pkt_info(n-2)替換到key_pkt_info的低位,為‘0’時(shí)key_pkt_info不變;依次進(jìn)行其它比特的判斷,當(dāng)所有比特判斷完得到key_pkt_info,在判斷過程中自動(dòng)將key_pkt_info裁剪為s-k比特。key_pkt_info是根據(jù)key_sel[n-1:0]和pkt_info確定的。
步驟3:完成組key后將所有產(chǎn)生的key{key0_valid,key0},{key1_valid,key1},…{key(m-1)_valid,key(m-1)}輸出到tcam查找模塊。
tcam查找模塊用于對(duì)組key模塊輸出的key進(jìn)行tcam條目查找,tcam查找模塊中包含根據(jù)數(shù)據(jù)流識(shí)別需求生成的tcam條目,每個(gè)條目包含key的種類字段和key的信息字段;tcam查找模塊接收組key模塊組成的待識(shí)別的數(shù)據(jù)流的key,將待識(shí)別的數(shù)據(jù)流的有效key分別輸入tcam條目查找是否有匹配項(xiàng),對(duì)于無效key直接輸出查找不匹配,將待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的查找結(jié)果輸出到查找結(jié)果判斷模塊,查找結(jié)果包括每個(gè)key對(duì)每個(gè)tcam條目是否匹配。
將待識(shí)別的數(shù)據(jù)流的key分別輸入tcam條目查找是否有匹配項(xiàng),逐一對(duì)每個(gè)key進(jìn)行判斷,當(dāng)key_valid(i)為‘1’,則將key(i)輸入tcam條目進(jìn)行查找,輸出查找結(jié)果key(i)_hit_rslt[d-1,0];當(dāng)key_valid(i)為‘0’,直接輸出key(i)_hit_rslt[d-1,0]為全‘0’。
查找結(jié)果判斷模塊用于根據(jù)數(shù)據(jù)流識(shí)別需求生成的對(duì)應(yīng)的查找判斷配置判斷出查找的匹配項(xiàng),查找判斷配置包括對(duì)每種key對(duì)應(yīng)的查找結(jié)果進(jìn)行單獨(dú)判斷或級(jí)聯(lián)判斷的配置;接收tcam查找模塊發(fā)送的待識(shí)別的數(shù)據(jù)流的key的查找結(jié)果,根據(jù)查找判斷配置判斷待識(shí)別的數(shù)據(jù)流的key的查找結(jié)果是否有匹配項(xiàng),若存在,將所有匹配的tcam條目的索引發(fā)送到匹配結(jié)果處理模塊。
查找判斷配置共有m個(gè)條目,分別用于每種key查找結(jié)果的判斷。每個(gè)條目中包括{cont_flag,rslt_sel_bmp[m-1:0]},cont_flag為‘0’表示對(duì)該種key查找結(jié)果進(jìn)行獨(dú)立判斷,為‘1’表示該種key查找結(jié)果需要和其它key的查找結(jié)果進(jìn)行級(jí)聯(lián)判斷。若數(shù)據(jù)流識(shí)別需求中的信息組對(duì)應(yīng)一種key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)只對(duì)待識(shí)別數(shù)據(jù)流中該種key對(duì)應(yīng)的查找結(jié)果獨(dú)立判斷;若數(shù)據(jù)流識(shí)別需求中的信息組對(duì)應(yīng)兩種或兩種以上的key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)需對(duì)待識(shí)別數(shù)據(jù)流中與信息組對(duì)應(yīng)的兩種或兩種以上的key對(duì)應(yīng)的查找結(jié)果級(jí)聯(lián)判斷。
若查找判斷配置為獨(dú)立判斷,則僅對(duì)該key的查找結(jié)果是否有匹配項(xiàng)進(jìn)行獨(dú)立判斷;若查找判斷配置為級(jí)聯(lián)判斷,則根據(jù)查找判斷配置對(duì)需要進(jìn)行級(jí)聯(lián)判斷的key的查找結(jié)果進(jìn)行級(jí)聯(lián)判斷。
根據(jù)每個(gè)條目的配置{cont_flag,rslt_sel_bmp[m-1:0]}逐一進(jìn)行判斷,輸出{key(i)_hit,key(i)_op_idx。例如,假設(shè)條目1對(duì)應(yīng)的cont_flag為0,那么只需要根據(jù)key1_hit_rslt[d-1,0]進(jìn)行判斷,從比特0依次判斷,找到第一個(gè)為1的比特,輸出key1_hit為‘1’,key1_op_idx等于此比特對(duì)應(yīng)的索引,假如key1_hit_rslt[d-1,0]的0-4比特為‘0’,第5比特為‘1’,那么key1_op_idx為5。
當(dāng)cont_flag為‘1’時(shí),表示要進(jìn)行級(jí)聯(lián)判斷。根據(jù)rslt_sel_bmp選擇各查找結(jié)果進(jìn)行綜合判斷。rslt_sel_bmp的每個(gè)比特對(duì)應(yīng)一個(gè)key的查找結(jié)果,該比特為‘1’表示選用該查找結(jié)果進(jìn)行判定。例如rslt_sel_bmp的比特2/3/5為‘1’,則根據(jù)2/3/5的結(jié)果進(jìn)行判斷,先找到key2_hit_rslt中第一個(gè)不為‘0’的比特,并記錄下該比特索引為i,然后判斷key3_hit_rslt[i+1]是否為1,key5_hit_rslt[i+2]是否為1,如果兩者都為1,則輸出key2_op_idx為i,key2_hit為‘1’;否則繼續(xù)尋找key2_hit_rslt中下一個(gè)不為‘0’的比特,繼續(xù)進(jìn)行判斷,如果沒有滿足條件的,輸出key2_hit為‘0’。當(dāng)cont_flag為‘1’而rslt_sel_bmp都為0時(shí),輸出key2_hit為0。
具體判斷過程如下:
cont_flag為‘0’,則直接從對(duì)應(yīng)的從key(i)_hit_rslt中查找第一個(gè)非‘0’比特,并記錄此比特在key(i)_hit_rslt的索引為j,如果找到,輸出key(i)_hit為1,key(i)_op_idx=j(luò);如果找不到非‘0’比特,輸出key(i)_hit為’0’,key(i)_op_idx為‘0’;
cont_flag為‘1’,進(jìn)行下面的級(jí)聯(lián)判斷。
步驟1:首先根據(jù)rslt_sel_bmp選出所有需要參加仲裁的key_hit_rslt(rslt_sel_bmp[i]為‘1’表示key(i)_hit_rslt需要參與仲裁),記錄為{key0_hit_rslt_sel,…,key(k-1)_hit_rslt_sel};共k項(xiàng),如果k等于0,key[i]_hit為‘0’;
步驟2:從key0_hit_rslt_sel中找到第一個(gè)非‘0’比特,判斷時(shí)從比特0開始,如果有非‘0’比特,記錄索引為l,輸出key[i]_hit為‘1’;如無非‘0’項(xiàng),則key[i]_hit為‘0’;
步驟3:再判斷key1_hit_rslt_sel[l+1],key1_hit_rslt_sel[l+2],…,key(m-1)_hit_rslt_sel[l+m-1]是否都為‘1’,都為‘1’,則輸出key[i]_hit為‘1’,key[i]_op_idx為l;否則輸出key[i]_hit為‘0’,重復(fù)步驟2、3,其中步驟2中從(l+1)開始判斷;
判斷的退出條件為,在步驟3中找到匹配項(xiàng),或者key(m-1)_hit_rslt_sel[l+m-1]超出范圍。
結(jié)果處理模塊用于根據(jù)數(shù)據(jù)流識(shí)別需求生成的與tcam條目的各索引對(duì)應(yīng)的處理行為配置得到對(duì)數(shù)據(jù)流的處理結(jié)果,所述處理行為配置包括與tcam條目各索引對(duì)應(yīng)的各處理行為以及的各處理行為的優(yōu)先級(jí);接收查找結(jié)果判斷模塊的所有匹配tcam條目的索引,使用各匹配tcam條目的索引分別查找對(duì)應(yīng)的處理行為配置得到各索引對(duì)應(yīng)的各處理行為以及各處理行為的優(yōu)先級(jí),輸出與待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為。
根據(jù)各key_hit,key_op_idx依次從索引結(jié)果數(shù)據(jù)庫得到操作結(jié)果,key_hit為‘0’時(shí)不進(jìn)行讀取。然后對(duì)操作結(jié)果進(jìn)行仲裁得到處理處理行為。
處理行為配置共m個(gè)條目,每個(gè)條目有key_pri,和若干個(gè)處理行為,key_pri表示該處理行為配置中所有處理行為的優(yōu)先級(jí),key_pri可對(duì)應(yīng)配置為各查找key的優(yōu)先級(jí)。op(i)_valid表示第i個(gè)處理行為有效,op(i)表示操作行為,例如丟棄數(shù)據(jù)包,其它類推。
使用各tcam條目的索引分別查找對(duì)應(yīng)的處理行為配置得到各索引對(duì)應(yīng)的各處理行為,根據(jù)key_pri對(duì)每個(gè)有效的處理行為進(jìn)行仲裁,選擇優(yōu)先級(jí)最高的輸出,優(yōu)先級(jí)相同時(shí),選擇先讀取的處理行為送出。最后輸出所有有效的處理行為{op0_valid,op0},…,{op(q-1)_valid,op(q-1)}。
參見圖2所示,本發(fā)明實(shí)施例還公開了一種采用的基于tcam的數(shù)據(jù)流識(shí)別處理裝置組成的數(shù)據(jù)流識(shí)別處理系統(tǒng):包括兩個(gè)或兩個(gè)以上所述基于tcam的數(shù)據(jù)流識(shí)別處理裝置以及一個(gè)最終結(jié)果處理裝置,兩個(gè)或兩個(gè)以上所述基于tcam的數(shù)據(jù)流識(shí)別處理裝置用于分別獲取相同的或不同的數(shù)據(jù)流識(shí)別需求并輸出每條待識(shí)別數(shù)據(jù)流的優(yōu)先級(jí)最高的處理行為,所述最終結(jié)果處理裝置用于接收兩個(gè)或兩個(gè)以上所述基于tcam的數(shù)據(jù)流識(shí)別處理裝置分別輸出的優(yōu)先級(jí)最高的處理行為,并對(duì)接收的處理行為的優(yōu)先級(jí)進(jìn)行最終判斷,輸出本系統(tǒng)中優(yōu)先級(jí)最高的處理行為。
采用兩個(gè)或兩個(gè)以上基于tcam的數(shù)據(jù)流識(shí)別處理裝置可以更多的功能,如圖2所示,基于tcam的數(shù)據(jù)流識(shí)別處理裝置2中可以設(shè)成和基于tcam的數(shù)據(jù)流識(shí)別處理裝置1不同(或相同)的key,只需再添加一個(gè)最終結(jié)果處理裝置,對(duì)基于tcam的數(shù)據(jù)流識(shí)別處理裝置1和基于tcam的數(shù)據(jù)流識(shí)別處理裝置2輸出的行為再次判斷,相同行為按照優(yōu)先級(jí)選擇,不同行為疊加即可。采用數(shù)據(jù)流識(shí)別處理系統(tǒng)可實(shí)現(xiàn)更多key的查找,更多條目的查找。
參見圖3所示,本發(fā)明實(shí)施例還公開了一種基于tcam的數(shù)據(jù)流識(shí)別處理方法,包括以下步驟:
s1,根據(jù)數(shù)據(jù)流識(shí)別需求按照組key配置進(jìn)行組key,所述組key配置中設(shè)定了多種key的組成,所述組key配置中設(shè)定了多種key的組成配置,每種key的組成配置包括每種key所用的信息字段和是否要按照信息字段組成有效key;對(duì)于需要根據(jù)信息字段組成有效key的,根據(jù)組key配置從待識(shí)別的數(shù)據(jù)流的各信息字段中選擇生成每種key所用的信息字段,組成待識(shí)別的數(shù)據(jù)流的key,key中包含key的種類字段和信息字段,并輸出key有效指示;對(duì)于不需要根據(jù)信息字段組成有效key的,直接輸出key無效指示;
s2,根據(jù)數(shù)據(jù)流識(shí)別需求生成tcam條目,每個(gè)條目包含key的種類字段和key的信息字段;
s3,將待識(shí)別的數(shù)據(jù)流的有效key分別輸入tcam條目查找是否有匹配項(xiàng),對(duì)于無效key直接輸出查找不匹配,查找結(jié)果包括每個(gè)key對(duì)每個(gè)tcam條目是否匹配;
s4,根據(jù)數(shù)據(jù)流識(shí)別需求生成查找判斷配置,查找判斷配置包括對(duì)每種key對(duì)應(yīng)的查找結(jié)果進(jìn)行單獨(dú)判斷或級(jí)聯(lián)判斷的配置,根據(jù)查找判斷配置判斷待識(shí)別的數(shù)據(jù)流的key的查找結(jié)果是否有匹配項(xiàng),輸出所有匹配的tcam條目的索引
s5,根據(jù)數(shù)據(jù)流識(shí)別需求生成與tcam條目的各索引對(duì)應(yīng)的處理行為配置,所述處理行為配置包括與tcam條目各索引對(duì)應(yīng)的各處理行為以及各處理行為的優(yōu)先級(jí);
s6,根據(jù)數(shù)據(jù)流識(shí)別需求生成各處理行為和各處理行為的優(yōu)先級(jí)配置,使用各匹配tcam條目的索引分別查找對(duì)應(yīng)的處理行為配置得到各索引對(duì)應(yīng)的各處理行為以及各處理行為的優(yōu)先級(jí),輸出與待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為。
若數(shù)據(jù)流識(shí)別需求的某一個(gè)信息組的寬度小于tcam的寬度,將該信息組配置成一種key,若需識(shí)別的數(shù)據(jù)流的某一個(gè)信息組的寬度大于tcam的寬度,將該信息組配置成兩種或兩種以上的key。
若數(shù)據(jù)流識(shí)別需求中的某信息組對(duì)應(yīng)一種key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)只對(duì)待識(shí)別數(shù)據(jù)流中該種key對(duì)應(yīng)的查找結(jié)果獨(dú)立判斷;若數(shù)據(jù)流識(shí)別需求中的某信息組對(duì)應(yīng)兩種或兩種以上的key,則查找結(jié)果判斷模塊判斷是否有匹配項(xiàng)時(shí)需對(duì)待識(shí)別數(shù)據(jù)流中與信息組對(duì)應(yīng)的兩種或兩種以上的key對(duì)應(yīng)的查找結(jié)果級(jí)聯(lián)判斷。
匹配結(jié)果處理模塊輸出與待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為,優(yōu)先級(jí)相同時(shí),輸出先讀取的處理行為。
例如,數(shù)據(jù)流識(shí)別需求為采用寬度80比特,深度128的tcam實(shí)現(xiàn)兩種key長度的查找,第一種key為{dmac,ethertype}共64比特,第二種key為{smac,sip,dip}共112比特。
第一種key識(shí)別3條流,分別是:
1)dmac為1&ðertype為0x0800的數(shù)據(jù)幀配置cos為1
2)dmac為2&ðertype為0x0800的數(shù)據(jù)幀配置cos為2
3)dmac為3&ðertype為0x0800的數(shù)據(jù)幀配置cos為3
第二種key識(shí)別2條流,分別是:
4)smac為1&&sip為2&&dip為3的數(shù)據(jù)幀配置轉(zhuǎn)發(fā)到輸出端口2,cos為6
5)smac為2&&sip為2&&dip為3的數(shù)據(jù)幀配置轉(zhuǎn)發(fā)到輸出端口3.
具體實(shí)施過程:
1、根據(jù)數(shù)據(jù)流識(shí)別需求的信息組的內(nèi)容設(shè)置組key配置,組key配置包括3個(gè)條目:key0_valid=1;key0_sel=5’b00011;key1_valid=1;key1_sel=5’b00100;key2_valid=1;key2_sel=5’b11000;
所用信息字段只有5個(gè):pkt_info,pkt_info0=dmac;pkt_info1=ethertype;pkt_info2=smac;pkt_info3=sip;pkt_info4=dip;
2、根據(jù)組key配置從待識(shí)別的數(shù)據(jù)流中分別提取生成每種key所用的信息字段組成待識(shí)別的數(shù)據(jù)流的key;
3、根據(jù)數(shù)據(jù)流識(shí)別需求生成對(duì)應(yīng)的tcam條目,從目標(biāo)數(shù)據(jù)流的信息組的內(nèi)容中提取信息字段組成的key填入tcam條目。
表1tcam條目表
4、將待識(shí)別的數(shù)據(jù)流的key分別輸入tcam條目查找是否有匹配項(xiàng),得到待識(shí)別的數(shù)據(jù)流的key對(duì)應(yīng)的查找結(jié)果配置查找結(jié)果選擇數(shù)據(jù)庫;
根據(jù)數(shù)據(jù)流識(shí)別需求生成對(duì)應(yīng)的查找判斷配置:
表2查找判斷配置表
5、根據(jù)數(shù)據(jù)流識(shí)別需求生成對(duì)應(yīng)的查找判斷配置,查找判斷配置包括對(duì)每種key對(duì)應(yīng)的查找結(jié)果獨(dú)立判讀或級(jí)聯(lián)判斷,cont_flag為0為獨(dú)立判斷,cont_flag為1為級(jí)聯(lián)判斷。
6、根據(jù)查找判斷配置判斷待識(shí)別的數(shù)據(jù)流的key的查找結(jié)果是否有匹配項(xiàng),若存在,將第一個(gè)匹配的tcam條目的索引發(fā)送到匹配結(jié)果處理模塊。
7、根據(jù)數(shù)據(jù)流識(shí)別需求生成與tcam條目的各索引對(duì)應(yīng)的處理行為配置:
表3處理行為配置表
8、使用待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各tcam條目的索引分別查找對(duì)應(yīng)的處理行為配置得到各索引對(duì)應(yīng)的各處理行為以及的各處理行為的優(yōu)先級(jí),輸出與待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為。
如待識(shí)別數(shù)據(jù)流的三種key的最終查找結(jié)果對(duì)應(yīng)表3處理行為配置表中的兩個(gè)條目,根據(jù)key_pri的值判斷條目的優(yōu)先級(jí),最后輸出待識(shí)別的數(shù)據(jù)流的所有key對(duì)應(yīng)的各處理行為中優(yōu)先級(jí)最高的處理行為。
本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。