一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法
【專利摘要】一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法,將控制器controller下發(fā)的多級(jí)流表的同一流表中的所有流表項(xiàng)采用等價(jià)類劃分,并映射成N叉樹;當(dāng)接收到一個(gè)新的流表項(xiàng),將該新流表項(xiàng)加入到其所對(duì)應(yīng)的等價(jià)類中,完成對(duì)N叉樹的更新。既能保證完成流表的轉(zhuǎn)換工作,同時(shí)也盡可能減少了轉(zhuǎn)換工作給網(wǎng)絡(luò)性能帶來的影響。
【專利說明】一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法。
【背景技術(shù)】
[0002]無論是firewall還是OpenFlow,在這種多表自定義查找中,多級(jí)流表流水線的概念已經(jīng)被引入。一條完整的規(guī)則很可能被拆分多個(gè)部分,并以流表項(xiàng)的形式分別下發(fā)給不同的流表。同時(shí),這些流表項(xiàng)之間通過可稱之為metadata的元素進(jìn)行相互關(guān)聯(lián),確保其組成同一條完整的規(guī)則。當(dāng)數(shù)據(jù)包匹配到一個(gè)流表項(xiàng)時(shí)會(huì)執(zhí)行流表項(xiàng)中的指令,如果流表中有g(shù)oto跳轉(zhuǎn)指令,則該數(shù)據(jù)包就會(huì)跳轉(zhuǎn)到下一個(gè)或者是goto指令指定的流表中進(jìn)行查找,查找到的流表項(xiàng)除了必須要與數(shù)據(jù)包的匹配域進(jìn)行匹配外還需要與數(shù)據(jù)包所攜帶的metadata進(jìn)行匹配。由于多級(jí)流表表結(jié)構(gòu)的復(fù)雜性,其很難在硬件中實(shí)現(xiàn),不同廠商所生產(chǎn)的硬件交換機(jī)的特性很可能不同。因此,當(dāng)網(wǎng)絡(luò)管理員下發(fā)規(guī)則到各個(gè)交換機(jī)時(shí),其不得不考慮各個(gè)交換機(jī)的具體特性,然后再根據(jù)特定的需求構(gòu)造相應(yīng)的規(guī)則。而這個(gè)過程往往給網(wǎng)絡(luò)管理員帶來很大的負(fù)擔(dān)。
[0003]華為提出了一種OpenFlow中間層軟硬件多級(jí)流表的轉(zhuǎn)換技術(shù)。該技術(shù)的主要內(nèi)容是在交換機(jī)的軟件數(shù)據(jù)平面和硬件數(shù)據(jù)平面之間構(gòu)造一個(gè)中間層,這個(gè)中間層負(fù)責(zé)進(jìn)行流表的轉(zhuǎn)換。而這個(gè)流表轉(zhuǎn)換的過程主要是每當(dāng)軟件數(shù)據(jù)平面接收到控制器下發(fā)的一個(gè)流表項(xiàng)時(shí),其就會(huì)從第一個(gè)流表開始類似多級(jí)流表流水線的處理來構(gòu)造一個(gè)N叉樹來,然后在這個(gè)N叉樹中找到新接收到的流表項(xiàng)所在的枝干。最后,在將這些枝干所代表的規(guī)則進(jìn)行轉(zhuǎn)換。華為提出的這種技術(shù)屬于暴力處理方式,具有很大的局限性。因?yàn)?,其?gòu)造的N叉樹不是增量更新的,控制器每下發(fā)一個(gè)新的流表項(xiàng),其中間層并不是在以前的N叉樹進(jìn)行增刪操作,而是要重新構(gòu)造N叉樹來處理。因此,其整個(gè)轉(zhuǎn)換的性能會(huì)受到極大地影響。
【發(fā)明內(nèi)容】
[0004]發(fā)明目的:本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的不足而提供一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法,既能保證完成流表的轉(zhuǎn)換工作,同時(shí)也盡可能減少了轉(zhuǎn)換工作給網(wǎng)絡(luò)性能帶來的影響。
[0005]技術(shù)方案:為了實(shí)現(xiàn)發(fā)明的目的,本發(fā)明公開了一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法,將控制器下發(fā)的多級(jí)流表的同一流表中的所有流表項(xiàng)采用等價(jià)類劃分,并映射成N叉樹;當(dāng)接收到一個(gè)新的流表項(xiàng),將該新流表項(xiàng)加入到其所對(duì)應(yīng)的等價(jià)類中,完成對(duì)N叉樹的更新。
[0006]作為優(yōu)選,為了簡化等價(jià)類劃分工作并進(jìn)一步減少整個(gè)轉(zhuǎn)換工作的效率,本發(fā)明所采用的等價(jià)類劃分方式為^fmetadata匹配域相同的流表項(xiàng)劃分成第一等價(jià)類;將流表項(xiàng)的goto指令中跳轉(zhuǎn)到下一個(gè)流表的ID號(hào)和instr_metadata值相等的流表項(xiàng)劃分成第二等價(jià)類。其中instr_metadata指的是數(shù)據(jù)包匹配到流表項(xiàng)后可能對(duì)數(shù)據(jù)包的metadata數(shù)據(jù)進(jìn)行修改,修改的內(nèi)容即為instr_metadata,而修改的指令為write_metadata。[0007]作為優(yōu)選,為了只需要對(duì)N叉樹的節(jié)點(diǎn)進(jìn)行簡單的增刪操作即能完成對(duì)N叉樹的更新,當(dāng)接收到一個(gè)新的流表項(xiàng),分別查找該新流表項(xiàng)所屬的第一等價(jià)類和第二等價(jià)類;根據(jù)第一等價(jià)類所共有的父節(jié)點(diǎn)及第二等價(jià)類所共有的子節(jié)點(diǎn)來更新該新流表項(xiàng)的父子節(jié)點(diǎn)關(guān)系,完成N叉樹的更新。
[0008]作為優(yōu)選,為了達(dá)到能與硬件適配的目的,所述N叉樹用于查找需要轉(zhuǎn)換的多級(jí)流表流水線規(guī)則,并將其轉(zhuǎn)換成單表多域的單級(jí)流表,最終再將該單級(jí)流表拆分為硬件所適配的多級(jí)流表。
[0009]有益效果:本發(fā)明與現(xiàn)有技術(shù)相比:既能保證完成流表的轉(zhuǎn)換工作,同時(shí)也盡可能減少了轉(zhuǎn)換工作給網(wǎng)絡(luò)性能帶來的影響,在接收到控制器下發(fā)的流表項(xiàng)時(shí),只需簡單的增刪操作就能完成對(duì)N叉樹的更新工作。
【專利附圖】
【附圖說明】
[0010]圖1為華為分治法的流程示意圖;
[0011]圖2為自定義多級(jí)流表相關(guān)的多級(jí)流表流水線示意圖;
[0012]圖3為本發(fā)明基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法的流程圖。
【具體實(shí)施方式】
[0013]下面結(jié)合附圖對(duì)本發(fā)明作更進(jìn)一步的說明。
[0014]如圖1所示,華為所提出的分治法思想為:將控制器下發(fā)的多級(jí)流表映射成一個(gè)N叉樹;在該N叉樹查找到需要轉(zhuǎn)換的多級(jí)流表流水線規(guī)則并將其轉(zhuǎn)換成單表多域的單級(jí)流表;再將這個(gè)單級(jí)流表拆分成硬件所適配的多級(jí)流表。
[0015]如圖2所示,自定義多級(jí)流表中的多級(jí)流表流水線是由多個(gè)流表組成,每個(gè)流表又由多個(gè)流表項(xiàng)組成。一個(gè)流表中的某個(gè)流表項(xiàng)通過goto指令跳轉(zhuǎn)到另一張流表進(jìn)行查找,可能查找到相匹配的多個(gè)流表項(xiàng)并且這些流表項(xiàng)也可能有g(shù)oto指令跳轉(zhuǎn)并查找到多個(gè)流表項(xiàng)。除此之外,一個(gè)流表項(xiàng)可能會(huì)出現(xiàn)來自多個(gè)不同流表的流表項(xiàng)跳轉(zhuǎn)到其所在的流表并與之相匹配上,所以在這種多表自定義查找中的多級(jí)流表表項(xiàng)間往往存在著這種多對(duì)多的映射關(guān)系。這種多對(duì)多的關(guān)系則可通過N叉樹的關(guān)系來表示,而每個(gè)節(jié)點(diǎn)存儲(chǔ)其父節(jié)點(diǎn)的指針鏈表,即為其所有父節(jié)點(diǎn)的集合。
[0016]將同一流表中的流表項(xiàng)按照兩大標(biāo)準(zhǔn)劃分等價(jià)類,兩個(gè)等價(jià)類分別為:將metadata匹配域相同的流表項(xiàng)劃分成第一等價(jià)類;將流表項(xiàng)的goto指令中跳轉(zhuǎn)到下一個(gè)流表的ID號(hào)和instr_metadata值相等的流表項(xiàng)劃分成第二等價(jià)類。其中,對(duì)于沒有g(shù)oto指令的流表項(xiàng)則令其下一個(gè)流表的ID號(hào)為-1 ;如果流表項(xiàng)沒有Write_metadata指令,則可以令instr_metadata值等于該流表項(xiàng)自身的metadata匹配域的值即可。
[0017]如圖3所示,包括以下步驟:
[0018](I)當(dāng)控制器下發(fā)一個(gè)新的流表項(xiàng)時(shí),首先判斷其是否有g(shù)oto指令,有則獲取該新流表項(xiàng)的metadata匹配域、下一個(gè)流表的ID號(hào)以及instr_metadata值,否則令下一個(gè)流表的ID號(hào)為-1且instr_metadata為-1 ;
[0019](2)然后查找第一等價(jià)類,查找成功則更新該新流表項(xiàng)的N叉樹節(jié)點(diǎn)的父節(jié)點(diǎn)鏈表,否則根據(jù)metadata匹配域創(chuàng)建一個(gè)新的第一等價(jià)類,再根據(jù)新流表項(xiàng)所在流表的ID號(hào)以及metadata匹配域向前查找其所對(duì)應(yīng)的父節(jié)點(diǎn),更新等價(jià)類的公共父節(jié)點(diǎn)鏈表;
[0020]再分別更新父節(jié)點(diǎn)所在的第二等價(jià)類的公共子節(jié)點(diǎn)鏈表;
[0021](3)最后查找第二等價(jià)類,查找成功則更新該新流表項(xiàng)的N叉樹節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表,否則根據(jù)instr_metadata和下一個(gè)流表ID號(hào)創(chuàng)建一個(gè)新的第二等價(jià)類,根據(jù)下一個(gè)流表ID號(hào)查找其子節(jié)點(diǎn),更新等價(jià)類的公共子節(jié)點(diǎn)鏈表;
[0022]再分別更新子節(jié)點(diǎn)所在的第一等價(jià)類的公共父節(jié)點(diǎn)鏈表。
[0023]從以上步驟可以看出我們對(duì)N叉樹的更新只需要進(jìn)行簡單的增刪操作,這樣就減少了轉(zhuǎn)換工作給網(wǎng)絡(luò)性能帶來的影響。
【權(quán)利要求】
1.一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法,其特征在于,將控制器下發(fā)的多級(jí)流表的同一流表中的所有流表項(xiàng)采用等價(jià)類劃分,并映射成N叉樹;當(dāng)接收到一個(gè)新的流表項(xiàng),將該新流表項(xiàng)加入到其所對(duì)應(yīng)的等價(jià)類中,完成對(duì)N叉樹的更新。
2.如權(quán)利要求1所述的一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法,其特征在于,所采用的等價(jià)類劃分方式為:將metadata匹配域相同的流表項(xiàng)劃分成第一等價(jià)類;將流表項(xiàng)的goto指令中跳轉(zhuǎn)到下一個(gè)流表的ID號(hào)和instr_metadata值相等的流表項(xiàng)劃分成第二等價(jià)類。
3.如權(quán)利要求2所述的一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法,其特征在于,當(dāng)接收到一個(gè)新的流表項(xiàng),分別查找該新流表項(xiàng)所屬的第一等價(jià)類和第二等價(jià)類;根據(jù)第一等價(jià)類所共有的父節(jié)點(diǎn)及第二等價(jià)類所共有的子節(jié)點(diǎn)來更新該新流表項(xiàng)的父子節(jié)點(diǎn)關(guān)系,完成N叉樹的更新。
4.如權(quán)利要求1所述的一種基于自定義多級(jí)流表增量更新的流表轉(zhuǎn)換方法,其特征在于,所述N叉樹用于查找需要轉(zhuǎn)換的多級(jí)流表流水線規(guī)則,并將其轉(zhuǎn)換成單表多域的單級(jí)流表,最終再將該單級(jí)流表拆分為硬件所適配的多級(jí)流表。
【文檔編號(hào)】G06F17/30GK103729427SQ201310726837
【公開日】2014年4月16日 申請日期:2013年12月25日 優(yōu)先權(quán)日:2013年12月25日
【發(fā)明者】潘恒, 溫曙光, 關(guān)洪濤, 謝高崗 申請人:南京未來網(wǎng)絡(luò)產(chǎn)業(yè)創(chuàng)新有限公司