本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù),具體涉及一種基于鏈表實(shí)現(xiàn)tcam優(yōu)先級(jí)匹配的算法。
背景技術(shù):
1、隨著網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)接口速率的提高,傳統(tǒng)的軟件路由查找機(jī)制已不能滿足要求。目前常見的硬件解決方式是采用tcam實(shí)現(xiàn)高速路由查找。tcam是一種三態(tài)內(nèi)容尋址存儲(chǔ)器,主要用于查找acl、路由等。?它是從cam的基礎(chǔ)上發(fā)展而來的。一個(gè)tcam芯片可以在邏輯上劃分成不同的塊,每個(gè)塊可以放置一類規(guī)則的表,如分流器設(shè)備內(nèi)基于tcam支持帶掩碼的ipv4五元組規(guī)則(源ip、目的ip、源端口、目的端口、協(xié)議)、帶掩碼的ipv6五元組規(guī)則、tcp-flag及幀長度規(guī)則、特征碼規(guī)則(二進(jìn)制數(shù)據(jù))的匹配,則將tcam芯片劃分為4個(gè)表,并且為了提升查找效率,tcam設(shè)計(jì)為單一表內(nèi)所有條目是可以并行訪問的,且返回第一個(gè)查找命中的結(jié)果,先加先命中。
2、但當(dāng)前基于tcam的應(yīng)用越來越復(fù)雜,尤其是對(duì)單一表內(nèi)的優(yōu)先級(jí)控制需求旺盛,傳統(tǒng)tcam表的按序添加和刪除的方法已無法滿足業(yè)務(wù)對(duì)于多優(yōu)先級(jí)的需求,要解決以上問題,如何基于不同的分組實(shí)現(xiàn)優(yōu)先級(jí)劃定是難點(diǎn)。
技術(shù)實(shí)現(xiàn)思路
1、為解決上述問題,本發(fā)明提出一種基于鏈表實(shí)現(xiàn)tcam優(yōu)先級(jí)匹配的算法,實(shí)現(xiàn)tcam表結(jié)構(gòu)資源管理,最終實(shí)現(xiàn)多優(yōu)先級(jí)劃分匹配需求,具體步驟如下:
2、步驟一:明確多優(yōu)先級(jí)的業(yè)務(wù)場景,即需要實(shí)現(xiàn)幾種規(guī)則類型的匹配,每種類型的規(guī)則數(shù)量是多少,以及每種類型下需要實(shí)現(xiàn)幾級(jí)優(yōu)先級(jí)原則。假如某種場景如下:支持帶掩碼的ipv4五元組10萬條,支持帶掩碼的ipv6五元組10萬條,支持tcp-flag及幀長度規(guī)則1千條,支持特征碼規(guī)則(二進(jìn)制數(shù)據(jù))1千條,每種類型的規(guī)則需要實(shí)現(xiàn)32個(gè)分組,且如果在一個(gè)類型下的規(guī)則有多條命中時(shí),以分組號(hào)最小的規(guī)則為最終命中結(jié)果;在一個(gè)類型規(guī)則下同一分組號(hào)內(nèi)存在多條命中時(shí),則以存儲(chǔ)位置前的為最終命中結(jié)果。
3、步驟二:系統(tǒng)控制面初始化tcam芯片表結(jié)構(gòu),將tcam劃分為4個(gè)表,每個(gè)表分別用于不同類型的規(guī)則,后續(xù)步驟以帶掩碼的ipv4五元組類型為例子,其他三種類型的規(guī)則的控制方法類似。該類型的規(guī)則總量為10萬,則管理控制面預(yù)先申請(qǐng)10萬個(gè)資源結(jié)構(gòu)池,每個(gè)資源結(jié)構(gòu)體成員由一個(gè)四字節(jié)prev指針、四字節(jié)next指針、四字節(jié)的tcamindex組成,資源結(jié)構(gòu)體的tcamindex以遞增1賦值,即第一個(gè)資源結(jié)構(gòu)的tcamindex為1,最后一個(gè)資源結(jié)構(gòu)的tcamindex為100000,每一個(gè)資源結(jié)構(gòu)的prev指針和next指針初始化為空指針。
4、步驟三:創(chuàng)建32個(gè)控制鏈表的分組資源頭指針tail_service[32],基于同一類型下每個(gè)分組需要的規(guī)則容量,完成空閑資源池分布,所有分組的帶掩碼的ipv4五元組規(guī)則容量總和不超過100000。如某場景下分組0下帶掩碼的ipv4五元組類型容量分配未500條,分組1下帶掩碼的ipv4五元組類型容量分配未600條,分組4下帶掩碼的ipv4五元組類型容量分配未700條,其余分組不分配本類型規(guī)則容量。則tail_service[0]指向tcamindex為1的資源結(jié)構(gòu),tcamindex為1的資源結(jié)構(gòu)prev指針指向空指針,next指針指向tcamindex為2的資源結(jié)構(gòu);tcamindex為2的資源結(jié)構(gòu)prev指針指向tcamindex為1的資源結(jié)構(gòu),next指針指向tcamindex為3的資源結(jié)構(gòu),以此類推tcamindex為499的資源結(jié)構(gòu)prev指針指向tcamindex為498的資源結(jié)構(gòu),next指針指向tcamindex為500的資源結(jié)構(gòu),tcamindex為500的資源結(jié)構(gòu)prev指針指向tcamindex為499的資源結(jié)構(gòu),next指針指向空指針。tail_service[1]指向tcamindex為501的資源結(jié)構(gòu),tcamindex為501的資源結(jié)構(gòu)prev指針指向空指針,next指針指向tcamindex為502的資源結(jié)構(gòu);tcamindex為502的資源結(jié)構(gòu)prev指針指向tcamindex為501的資源結(jié)構(gòu),next指針指向tcamindex為503的資源結(jié)構(gòu),以此類推tcamindex為1099的資源結(jié)構(gòu)prev指針指向tcamindex為1098的資源結(jié)構(gòu),next指針指向tcamindex為1100的資源結(jié)構(gòu),tcamindex為1100的資源結(jié)構(gòu)prev指針指向tcamindex為1099的資源結(jié)構(gòu),next指針指向空指針。tail_service[3]同上述分配辦法完成分配。分配完成后tcamindex大于1800均為未使用資源結(jié)構(gòu),這類資源結(jié)構(gòu)prev指針指向空指針,next指針也指向空指針。另除了分組0、分組1、分組4外其余分組沒有本類型的規(guī)則容量分配,即這些分組的空閑資源頭指針tail_service[num]均指向空指針。
5、步驟四:添加帶掩碼的ipv4五元組規(guī)則類型時(shí),已知該規(guī)則所屬的分組號(hào),查詢該分組的空閑資源頭指針,如果空閑資源頭指針指向空指針,則表明該分組號(hào)分配資源已用完或者無分配的資源,則報(bào)錯(cuò)返回規(guī)則滿;如果空閑資源頭指針指向非空指針,則將該資源結(jié)構(gòu)從該分組可以鏈表中取出,該結(jié)構(gòu)資源的next指針賦值給該分組的tail_service[num],該結(jié)構(gòu)資源池prev和next均指向空指針。本結(jié)構(gòu)資源的tcamindex值即為該帶掩碼的ipv4五元組規(guī)則加載在tcam芯片的實(shí)際位置,調(diào)用芯片驅(qū)動(dòng)接口完成加載,賦值tcamindex給該規(guī)則的存儲(chǔ)位置,方便刪除該規(guī)則時(shí)使用。
6、步驟五:刪除帶掩碼的ipv4五元組規(guī)則類型時(shí),需要將資源進(jìn)行釋放回收,規(guī)則在添加時(shí)已賦值存儲(chǔ)位置tcamindex,如刪除規(guī)則所屬分組的tail_service[num](num為所屬組號(hào)-1)指向空指針,則tail_service[num]指向該tcamindex值的結(jié)構(gòu)資源,同時(shí)賦值tcamindex值的結(jié)構(gòu)資源的prev和next均指向空指針;如該分組tail_service[num]指向非空指針,則tail_service[num]指向的結(jié)?構(gòu)資源的prev指向本次回收的tcamindex的結(jié)構(gòu)資源,本次回收tcamindex的結(jié)構(gòu)資源的prev指針指向空,next指向tail_service[num]指向的結(jié)構(gòu)資源,tail_service[num]重新指向的本次回收tcamindex結(jié)構(gòu)資源。
7、步驟六:如果需求重新分配各個(gè)分組的規(guī)則容量時(shí),則需要跳轉(zhuǎn)至步驟二,重新初始化32個(gè)控制鏈表的分組資源頭指針及相關(guān)資源。按照此種算法,tcam查表時(shí),可實(shí)現(xiàn)優(yōu)先級(jí)匹配的需求。
8、步驟七:按照上述步驟完成tcam內(nèi)規(guī)則結(jié)構(gòu)的存儲(chǔ)后,數(shù)據(jù)面數(shù)據(jù)到達(dá)設(shè)備后,設(shè)備提取出對(duì)應(yīng)表結(jié)構(gòu)的key,查詢tcam,便可以得到基于多優(yōu)先級(jí)的規(guī)則匹配結(jié)果,按照結(jié)果可實(shí)現(xiàn)對(duì)數(shù)據(jù)面的流量轉(zhuǎn)發(fā)控制。
9、以上本發(fā)明的技術(shù)方案,本發(fā)明基于tcam采用鏈路管理資源池的發(fā)明方法,在確保功能完備性的情況下,與現(xiàn)有相比,其顯著的有益效果在于:
10、1、基于不同的分組實(shí)現(xiàn)優(yōu)先級(jí)劃定,實(shí)現(xiàn)了單一表內(nèi)的優(yōu)先級(jí)控制,能夠滿足眾多基于tcam的復(fù)雜應(yīng)用,可解決tcam單一表結(jié)構(gòu)內(nèi)的多業(yè)務(wù)優(yōu)先級(jí)靈活設(shè)定的業(yè)務(wù)場景需求,深度挖掘tcam的靈活性與便利性。
11、2、方便快速呈現(xiàn)可利用的和已利用的tcam資源池空間。