TWI665894B - 用於利用超級鍵生成並行查找請求的方法和裝置 - Google Patents
用於利用超級鍵生成並行查找請求的方法和裝置 Download PDFInfo
- Publication number
- TWI665894B TWI665894B TW104110834A TW104110834A TWI665894B TW I665894 B TWI665894 B TW I665894B TW 104110834 A TW104110834 A TW 104110834A TW 104110834 A TW104110834 A TW 104110834A TW I665894 B TWI665894 B TW I665894B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- token
- search
- item
- patent application
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C15/00—Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/60—Router architectures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本發明描述用於生成針對輸入封包的並行網路查找請求的網路查找引擎,其中每個封包報頭由可程式設計解析器以格式(即權杖)來解析和表示,引擎可以理解權杖。每個權杖可以要求並行的多個查找,以便加速封包處理時間。查找鍵的大小根據輸入權杖的內容以及被程式設計用於引擎的協定而變化。引擎每權杖生成超級鍵,超級鍵表示所有並行查找鍵,其中可以通過關聯的簡檔標識從超級鍵提取每個鍵的內容。網路查找引擎是協定無關的,這意指用於生成超級鍵的條件和規則完全可程式設計,使得引擎可以被重新程式設計以執行軟體定義聯網(SDN)系統中各種各樣的網路特徵和協定。
Description
本發明涉及用於生成網路封包的查找鍵的可程式設計引擎架構。本發明還涉及生成用於網路封包的具有可變大小的並行查找鍵。更具體地,發明涉及在軟體定義的聯網系統中的可程式設計引擎架構,其允許使用者對引擎進行程式設計,使得每個引擎每網路封包生成表示多個並行的大小變化的查找鍵的查找超級鍵。
傳統上,已經通過硬體專用ASIC設計實現網路設備中的聯網特徵和協定。這些固定的ASIC設計限制部署新協定的速率。此外,用以支援新協定的硬體改變在成本和時間這兩方面都是昂貴的。作為結果,其允許使用者借助於軟體部署新特徵和協定的可程式設計聯網設備的設計已經變得更加有吸引力。
可程式設計聯網設備的一種方法是以在最先進通用CPU上運行的軟體來實現協定。然而,在最大64位最先進通用CPU處的處理容量不能保證當前聯網系統的即時性能,當前聯網系統支援高達數百Gbps的網路封包流。
備選地,可重配置FPGA晶片也已經用於實現可程式設計網路設備中的網路特徵。然而,它們在FPGA晶片的邏輯單元容量方面的限制不允許它們以線速輸送量處理具有數百位元組的大尺寸的網路封包。此外,它們的內部互連接線的高複雜性使得在低頻率運行的FPGA晶片具有高的延遲,這不適於新的企業和資料
中心網路中所要求的複雜的網路特徵。
在實際的網路中,每個封包常常封裝表示非限制性地
例如乙太網、VLAN、MPLS、IP、TCP、HTTP等的不同協議棧的許多報頭欄位。最近已經添加了諸如NVGRE、VxLAN和STT之類的更多協議,並且未來將添加更多。此外,封包報頭還需要支援不同的非標準客戶專用協定。正因如此,封包在它行進在網路上的時間期間通常具有八個或更多不同的報頭欄位。
為了引擎能夠正確地處理網路封包,這些封包的每個
報頭由系統中的解析器進行解析。解析器的輸出是“權杖”,其中每封包生成一個權杖,並且該權杖具有預定義格式,所以引擎可以理解和處理權杖。
相關技術的前述示例以及與其有關的限制旨在是說
明性的而非排他性的。在閱讀說明書和研究附圖的時候,相關技術的其它限制將變得顯而易見。
一種可程式設計網路查找引擎,包括:範本查閱資料表,被配置為接收從多個網路封包的報頭欄位解析的多個輸入權杖並且標識所述多個輸入權杖的格式;以及控制資料提取器,被配置為從所述輸入權杖中的每個輸入權杖提取控制位元集,其中提取的位元集被用於與由程式設計的網路通訊協定提供的預定義值匹配;指令表位址生成器,被配置為:執行在提取的所述控制位元集與通過所述程式設計的網路通訊協定的所述預定義值之間的匹配比較;以及生成用於多個指令表的位址,其中所述指令表包括用於按照所述輸入權杖中的每個輸入權杖建立多個查找請求的指令;以及多個指令執行硬體邏輯塊,被配置為:執行所述指令表中的所述指令,並且按照所述輸入權杖中的每個輸入權杖並行地生成所述多個查找請求;以及向搜尋引擎提供並行的所述多個查找請求,在所述搜尋引擎處執行針對鍵的查找操作。
一種用於在軟體定義網路(SDN)中每封包並行地生
成多個查找請求的方法,包括:接收從多個網路封包的報頭欄位解析的多個輸入權杖並且標識所述多個輸入權杖的格式;從所述輸入權杖中的每個輸入權杖提取控制位元集,其中提取的位元集被用於與通過程式設計的網路通訊協定的預定義值匹配;執行在提取的所述控制位元集與由所述程式設計的網路通訊協定指定的所述預定義值之間的匹配比較;生成用於多個指令表的位址,其中所述指令表包括用於按照所述輸入權杖中的每個輸入權杖建立多個查找請求的指令;執行所述指令表中的所述指令,並且按照所述輸入權杖中的每個輸入權杖並行地生成所述多個查找請求;以及向搜尋引擎提供並行的所述多個查找請求,在所述搜尋引擎處執行針對鍵的查找操作。
100‧‧‧網路查找引擎
102‧‧‧權杖
104‧‧‧超級鍵
106‧‧‧ProfileID
108‧‧‧EnVector
200‧‧‧ProfileID表
202‧‧‧鍵位圖
204‧‧‧key<i>_offset
206‧‧‧key<i>_size
208‧‧‧tbl_id<i>
210‧‧‧鍵信息
302‧‧‧範本查閱資料表
304‧‧‧控制資料提取器
306‧‧‧指令表位址生成器
308‧‧‧超級鍵指令表
310‧‧‧ProfileID指令表
312‧‧‧EnVector指令表
314‧‧‧超級鍵指令執行邏輯
316‧‧‧ProfileID指令執行邏輯
318‧‧‧EnVector指令執行邏輯
402‧‧‧共同部分
404‧‧‧層部分
406‧‧‧對應層
408‧‧‧控制欄位
410‧‧‧資料欄位
412‧‧‧“templateID”欄位
414‧‧‧層的數目
416‧‧‧偏移
418‧‧‧中繼資料位元
602‧‧‧TCAM
604‧‧‧TCAM
606‧‧‧表位址記憶體
608‧‧‧D-LEFT的雜湊
610‧‧‧多級邏輯錐
612‧‧‧級
614‧‧‧多工器(Mux)/查閱資料表(Lut)單元
802‧‧‧指令
902‧‧‧EnVector指令
1100‧‧‧流程圖
1102-1112‧‧‧步驟
當與附圖一起閱讀時,從以下詳細描述最好地理解本
公開的方面,在附圖中,貫穿不同視圖,同樣的附圖標記指的是相同的部分。注意,依照行業的標準做法,各種特徵不是按比例繪製的,並且代之以將重點置於說明本發明的實施例。事實上,為了清楚的討論,各種特徵的尺寸可以任意地增加或減少。本專利申請的範圍並不限於所公開的實施例,而是還包含所公開的實施例的組合以及對所公開的實施例的修改。
第一圖是示出根據本發明的實施例的所提出的可程式設計查找請求生成引擎的主要介面的框圖的示例。
第二圖圖示根據本發明的實施例的搜尋引擎中的ProfileID表的示例。
第三圖是示出根據本發明的實施例的所提出的查找引擎的總體設計的框圖示例。
第四A圖示出根據本發明的實施例的權杖格式的示例。
第四B圖是根據本發明的實施例的範本表和每個記憶體條目內容的框圖的示例。
第五圖是根據本發明的實施例的在所提出的查找引擎內部的控制資料提取器的框圖的示例。
第六A圖示出根據本發明的實施例的用於使用多個TCAM模組生成用於權杖的指令表位址的方法的示例。
第六B圖示出根據本發明的實施例的用於使用統一的TCAM和關聯的表位址記憶體生成用於權杖的指令表位址的方法的示例。
第六C圖示出根據本發明的實施例的用於使用基於DLEFT的雜湊法生成用於權杖的指令表位址的方法的示例。
第六D圖示出根據本發明的實施例的用於使用Mux/Lut單元的多級邏輯錐生成用於權杖的指令表位址的方法的示例。
第七A圖是根據本發明的實施例的超級鍵表和每個記憶體條目內容的框圖的示例。
第七B圖示出根據本發明的實施例的超級鍵指令的格式的示例。
第七C圖是根據本發明的實施例的列出由超級鍵指令使用的輸入資料來源的表的示例。
第八A圖是根據本發明的實施例的ProfileID表和每個記憶體條目內容的框圖的示例。
第八B圖示出根據本發明的實施例的ProfileID指令的格式的示例。
第九A圖是根據本發明的實施例的EnVector表和每個記憶體條目內容的框圖的示例。
第九B圖示出根據本發明的實施例的EnVector指令的格式的示例。
第十A圖是圖示根據本發明的實施例的用於執行超級鍵指令的硬體邏輯的框圖的示例。
第十B圖是圖示根據本發明的實施例的用於執行ProfileID指令的硬體邏輯的框圖的示例。
第十C圖是圖示根據本發明的實施例的用於執行EnVector指令的硬體邏輯的框圖的示例。
第十一圖描繪示出根據本發明的實施例的用於在軟體定義網路(SDN)中每封包並行地生成多個查找請求的步驟的示例的流程圖。
以下公開內容提供許多不同實施例或示例,以用於實現主題的不同特徵。下面描述部件和佈置的具體示例,以簡化本公開。當然,這些僅僅是示例,並且不旨在是限制性的。此外,本公開可以在各種示例中重複引用數位和/或字母。這種重複是為了簡化和清楚的目的,並且就其本身而言並不指示所討論的各種實施例和/或配置之間的關係。
提出新的可程式設計網路查找引擎架構,其允許使用者將引擎配置為生成表示每權杖的多個並行的大小變化的查找鍵的超級查找鍵。具體地,網路查找引擎被配置為生成用於每個網路封包的多個並行網路查找請求,其中每個封包的報頭由可程式設計解析器以即網路查找引擎可理解的權杖的格式進行解析和表示。
在一些實施例中,每個權杖可以要求並行的多個查找,以便使封包處理時間加速。根據輸入權杖的內容以及程式設計用於引擎的協定的,查找鍵的大小變化。網路查找引擎被配置為生成每權杖的超級鍵,超級鍵表示所有的並行查找鍵,其中可以通過關聯的簡檔標識從超級鍵提取查找鍵中的每個查找鍵的內容。
根據所提出的方法,所提出的網路查找引擎能夠並行地執行多個查找,這使軟體定義網路系統的總體封包處理時間加
速。由所提出的網路查找引擎生成的查找鍵可以處於數百位元組(對於非限制性示例)的大尺寸中。此外,所提出的引擎是協定無關的,從而意指用於生成的超級鍵的條件和規則完全可以由軟體根據網路特徵和配置用於引擎的協定進行程式設計,使得引擎可以被重新程式設計以執行任何軟體定義聯網(SDN)系統中的各種各樣的網路特徵和協定。
如下文中提及的,引擎包括計算單元和軟體指令,軟
體指令被存儲在計算單元的存儲單元中以用於實踐一個或多個處理。當執行軟體指令時,至少軟體指令的子集由計算單元載入到記憶體(還被稱為初級記憶體)中,計算單元變為用於實踐處理的專用計算單元。處理還可以至少部分地體現在電腦程式代碼被載入到其中和/或被執行的計算單元中,因此計算單元變為用於實踐處理的專用計算單元。
第一圖是示出網路查找引擎100(可重配置查找請求
生成器)100的主要輸入和輸出介面的框圖的示例。雖然圖將部件描繪為功能上分離,但是這樣的描繪僅僅用於說明性目的。將顯而易見的是,刻畫在這一圖中的部件可以任意地組合或劃分成分離的軟體、固件和/或硬體部件。
在第一圖的示例中,網路查找引擎100被配置為從外
部解析器(未示出)接收權杖102,在外部解析器對每個網路封包的報頭欄位進行解析。對於網路封包中的每個網路封包,解析器發送出權杖102,權杖102具有預定義格式,使得引擎100可以理解(將在第四A圖中對權杖的格式進行描述)。
對於每個輸入權杖102,網路查找引擎100被配置為
向搜尋引擎(未示出)生成多個並行查找鍵。這裡,搜尋引擎是遠端引擎,其從網路查找引擎100中的一個或多個網路查找引擎接收查找鍵,並且一段時間之後返回針對每個查找鍵的查找資料。因為查找鍵的數目和每個鍵的大小隨著權杖的不同而變化,引擎100被
配置為僅向搜尋引擎發送表示多個並行鍵的一個超級鍵104,而不是使用用於發送多個鍵的多個信號。
在一些實施例中,網路查找引擎100還被配置為連同
超級鍵104一起向搜尋引擎發送ProfileID 106和EnVector 108,以便搜尋引擎能夠從超級鍵104正確地提取單獨查找鍵。這裡,ProfileID 106包含關於以下項的資訊:1)多少單獨鍵被封裝在關聯的超級鍵104中;2)超級鍵104中的哪個資料部分變為每個單獨鍵的內容;3)對於每個鍵將使用搜尋引擎中的哪個查閱資料表(假定搜尋引擎具有大量查閱資料表)。EnVector 108包括關於由搜尋引擎從超級鍵104提取的單獨鍵中的哪些鍵對於執行查找是有效的資訊(從而搜尋引擎將不會執行針對無效鍵的查找以節省功率並且減少延遲)。
第二圖描繪在搜尋引擎內部的ProfileID表200的非限制性示例。在這一非限制性示例中,假定超級鍵104支持多達4個單獨鍵。表使用ProfileID 106作為它的表位址,然後返回包括以下項的記憶體資料/鍵資訊210:
1)4位鍵位圖(keybitmap)202,其表示在超級鍵104中封裝了多少鍵;位元‘1’呈現一個鍵;按照假設,多達4個鍵。例如,如果keybitmap=1011(b),這意指超級鍵104包含3個鍵(key):key0、key1、key3。
2)key<i>_offset 204和key<i>_size 206(對於i從0至3)指示超級鍵104中的位元組偏移(offset),其分別是key<i>的第一位元組和key<i>的大小(size)。對於非限制性示例,如果key0_offset=5並且key0_size=8,則key0具有8個位元組,它們是超級鍵104中的第5、第6、...、第12位元組。
3)tbl_id<i>208指示搜尋引擎中的哪個表用於執行針對key<i>的查找操作。對於非限制性示例,如果tbl_id0=14,則搜尋引擎中的表14用於執行針對key0的查找。
在一些實施例中,兩個不同的權杖102可以具有相同
的ProfileID 106,這意指兩個權杖102具有相同數目的鍵以及在它們的對應超級鍵104中封裝的鍵的相同位元組位置。如果使用者想按照這2個權杖執行不同數目的查找,,網路查找引擎100通過允許它連同超級鍵104和ProfileID 106一起還向搜尋引擎發送EnVector 108而被配置為更加靈活,其中EnVector 108提供關於ProfileID 106給出的哪些鍵對於查找是有效的資訊。在上面的相同示例中,如果EnVector=1001(b),則僅key0和key3對於查找是有效的,雖然key1也被封裝在超級鍵104中。
第三圖示出框圖示例,其示出網路查找引擎100的總體架構,其包括以下項中的一個或多個:
1)範本(查找)表302,其包含輸入權杖102的格式資訊。
2)控制資料提取器(CDE)304,其從輸入權杖102中的控制欄位中提取適當位元。這些控制位元然後被檢驗並且用於引導引擎100中的其它塊正確地生成針對每個權杖102的查找請求(例如超級鍵104、ProfileID 106和EnVector 108)。
3)指令表位址生成器(ITAG)306,其生成所有指令表的位址。根據先前提取(由CDE 304)的控制資料的內容以及使用者已經程式設計用於引擎100的網路通訊協定來生成指令表位址。
4)指令表的陣列,包括M個超級鍵指令表308、一個ProfileID指令表310和一個EnVector指令表312。這些指令表包含關於如何建立針對每個輸入權杖102的查找請求的可程式設計指令。
5)用於執行從指令表接收的指令的硬體邏輯塊的陣列,包括超級鍵指令執行邏輯314、ProfileID指令執行邏輯316和EnVector指令執行邏輯318。這些邏輯塊的輸出是最終查找請求(例如超級鍵104、ProfileID 106和EnVector 110),其將被發送到搜尋引擎。
在一些實施例中,網路查找引擎100是協定無關的,
其中引擎100中的所有塊都可由使用者程式設計和重配置,使得引擎100可以支援寬範圍的現行協定,包括但不限於乙太網、VLAN、MPLS、IP、TCP、UDP、HTTP、NVGRE、VxLAN和STT以及其它自訂專用協議。在一些實施例中,引擎100與OpenFlow規範相容,OpenFlow規範允許通過高級程式設計語言使用標準API對SDN引擎進行程式設計。
在第三圖的示例中,在引擎100接收輸入權杖102之
後,通過在範本查閱資料表302查找來標識權杖102的格式。為了引擎100能夠理解權杖102的內容,在系統中的所有引擎之中商定權杖102的格式。第四A圖示出權杖102的格式的示例,其中權杖102包括兩個主要部分:共同部分402和層部分404。共同部分402包含其由解析器放進權杖102的對應網路封包的通用控制比特,諸如時間戳記、序號、優先順序、片上SDN系統中的下一引擎位址、源埠、封包位元組計數、雜湊選擇等。這些通用控制欄位由開發SDN系統的設計者選擇,使得這些欄位對於系統中的所有引擎有用,以正確地操縱接收的封包。
每個權杖102的層部分404包含由解析器解析的對應
網路封包的所有報頭欄位。在實際的網路中,每個封包還可以封裝與由例如乙太網、VLAN、MPLS、IP、TCP、HTTP等的網路支援的協定對應的許多報頭欄位。在其行進通過網路的時間期間,封包經常具有八個或更多的不同報頭欄位。解析器解析這些封包報頭欄位,並且將那些封包報頭欄位放進權杖102的層部分404。經解析的封包報頭欄位中的每個封包報頭欄位具有在權杖102的層部分內部的對應層406。權杖102中的每個層406包括兩個欄位:控制欄位408和資料欄位410。控制欄位408包含諸如優先順序和協議類型之類的主要控制位元,其由解析器嵌入該層406,使得引擎100可以正確地操縱對應封包報頭欄位。每個層406的資料欄位410包
含對應經解析的封包報頭欄位的資訊的其餘部分。
由於每個封包可以具有不同大小的若干報頭欄位,每個權杖102內部的層部分404還可以包含具有不同大小的多個層。在一些實施例中,網路查找引擎100被配置為利用權杖102的共同部分402內部的“templateID”欄位412,以用於標識層的數目和它們的大小以及它們在權杖102內部的位置。“templateID”欄位412由解析器在解析對應分組的同時寫入。引擎102使用這一“templateID”欄位412的值作為向範本查閱資料表302的查找指標。範本查閱資料表302返回封裝到層部分404中的層的數目414以及這些層在權杖102中的偏移416,如由第四B圖的示例圖示的。
在一些實施例中,範本查閱資料表302還提取和返回針對每個輸入權杖102的中繼資料位元418,中繼資料位元418是連同對應權杖102內部的控制位元一起的針對權杖102的附加控制位元。使用範本查閱資料表302減少了權杖大小,因為它允許將一部分控制位元和層的偏移資訊放進範本表302,而不是由權杖102自身攜帶。這裡,使用者根據系統中的解析器和引擎100將支援哪些網路通訊協定來對範本表302進行程式設計。
第五圖是在網路查找引擎100內部的控制資料提取器(CDE)304的框圖的示例,其中每個輸入權杖及其來自範本表302的對應範本資訊被發送到CDE 304,以用於從輸入資料中提取最重要的控制位元。提取的控制位元包括但不限於權杖102的共同部分402中的特定位元以及權杖102的層部分404中的層的所有控制位元。使用者根據他們想要引擎100支援的網路通訊協定來重配置提取的位元在權杖102的共同部分402中的位置。範本查找結果的所有中繼資料位元也由CDE 304提取。
如第三圖的示例所示,由CDE 304提取的所有資料位元被送入指令表位址生成器(ITAG)306,指令表位址生成器(ITAG)306的主要任務是生成包含用於建立針對每個輸入權杖
102的最終查找請求的指令的指令表的位址。ITAG 306背後的主要功能是檢驗提取的控制位元中的一些控制位元是否與程式設計的網路通訊協定給出的特定值匹配。基於匹配檢驗結果,ITAG 306返回用於指令表的正確位址,這轉而正確地生成用於建立權杖102的最終查找鍵的指令。
第六A圖至第六D圖示出用於設計ITAG 306的四種
不同方法。第六A圖示出用於使用多個三元內容可定址記憶體(TCAM)模組602來生成針對權杖的指令表位址的方法的示例,其中每個指令表由TCAM驅動。對於M個超級鍵指令表308、一個ProfileID指令表310和一個EnVector指令表312,M+2個TCAM 602被用於ITAG 306,其中所有提取的控制位元被送入這些TCAM 602。每個TCAM 602被配置為匹配提取的控制位元與其記憶體內容,並且如果存在匹配的話,則返回匹配的地址。如果未找到匹配,則默認返回的地址是0。由M+2個TCAM 602返回的位址用作用於M+2個指令表的指標。
第六B圖示出用於使用僅一個TCAM 604以及關聯
的表位址記憶體606代替使用M+2個單獨TCAM 602來生成針對權杖的指令表位址的方法的示例。這裡,統一的TCAM 604被用於匹配提取的控制資料與其內容中預程式設計的值。如果存在任何匹配,則TCAM 604返回匹配的記憶體位址。如果未找到匹配,則默認返回的記憶體地址是0。返回的記憶體位址被用於指向表位址記憶體606,其中表位址記憶體606的每個條目包含用於所有M+2個指令表的位址集。
第六C圖示出用於使用基於D-LEFT的雜湊608代替
TCAM來生成針對權杖的指令表位址的方法的示例。這裡,提取的控制位元被傳遞到基於D-LEFT的雜湊608中的多個雜湊函數(以多種雜湊方式)。雜湊函數的輸出用作用於讀取匹配記憶體的指針。每個匹配記憶體的每個條目包含要與提取的控制位元匹配的資
料。如果存儲來自記憶體的任何匹配,匹配的位址轉而被用於讀取表位址記憶體606。然後表位址記憶體606返回用於所有M+2個指令表的最終位址集。
第六D圖示出用於使用多級邏輯錐610來生成針對
權杖的指令表位址的方法的示例,多級邏輯錐610具有多個級612並且每個級由並行的若干多工器(Mux)/查閱資料表(Lut)單元614組成。第一級的輸入位元是所有提取的控制位元;級<i>的輸出位元變為向下一級<i+1>的輸入位元。最後級的輸出位元形成M+2個指令表的最終位址。
在一些實施例中,每個Mux/Lut單元包含n個(對於
非限制性示例,6個)多工器,這允許從其位元中選擇6個任意位元。每Mux/Lut單元的這6個選擇的位元的位置可由軟體配置。這6個選擇的位元形成向64位元可重配置查閱資料表的指標,64位元可重配置查閱資料表轉而返回1位元輸出。因此,每個Mux/Lut 614的設計允許用戶對來自其輸入位元的6個任意位元執行任何邏輯運算式。
由於Mux/Lut邏輯錐610具有多個級612並且每個級
包含並行的若干Mux/Lut單元614,它可以被配置/程式設計為執行用於檢驗權杖102的若干複雜運算式和規則,從而依照要求引擎100執行的網路通訊協定適當地生成查找請求。對於非限制性示例,Mux/Lut邏輯錐610可以具有3至5個級612,並且除了最後級之外,每個級612可以具有32至64個Mux/Lut單元614,其中最後級中的Mux/Lut單元614的數目等於指向M+2個指令表的所有位址的位元數目。
在一些實施例中,因為它僅使用標準Mux和Lut單
元614,Mux/Lut邏輯錐610是高度靈活和可伸縮的。在一些實施例中,Mux/Lut邏輯錐610可以通過硬體合成工具被重配置。對於非限制性示例,來自加州大學伯克利分校的開源ABC合成工具可
以用於配置Mux/Lut邏輯錐612,以用於支援由所有現行協定定義的匹配比較。
請注意,上面第六A圖至第六D圖中描述的四種方
法中的任何一種方法可以用於設計ITAG 306。採用一種方法優先於另一種方法可以取決於在用於對引擎100進行程式設計的軟體工具的成本、靈活性和支持之間的折衷。從ITAG 306的輸出是M+2個位址,這M+2個位址是M個超級鍵指令表308和ProfileID指令表310以及EnVector指令表312的指標。
第七A圖是超級鍵指令表<i>(0<=i<M)和每個記憶
體條目內容的框圖的示例。所有M個超級鍵指令表308具有相同大小,但被獨立程式設計。超級鍵指令表308的每個條目包含K個超級鍵指令,這意指M個超級鍵指令表308被配置為每輸入權杖102返回總計M×K個超級鍵指令。所有這些M×K個返回指令將被並存執行以建立查找超級鍵104。
第七B圖示出超級鍵指令的格式的示例,其中指令包括以下欄位中的一個或多個欄位:
1)En,其指示是否啟用指令以執行。
- 如果En==0x0,則不執行指令
- 如果En==0x1,則執行指令
2)IsConst,其指示從恒定資料或者從輸入源的指令複製。
- 如果IsConst==0x0,指令將從輸入源複製到超級鍵104中的位置。
- 如果IsConst==0x1,指令將把位元遮罩(BitMask)欄位看作恒定資料,並且將該位元遮罩欄位複製到超級鍵104中的位置。
3)Src_ID,在IsConst是0x0的情況下Src_ID選擇將從哪個源複製資料。第七C圖中示出的示例列出超級鍵指令使用的所有輸入資料來源。
4)Src_ByteOffset,其指示所選來源資料中的第一位元組位置,將從那裡開始複製資料。
5)長度,其示出從Src_ByteOffset開始計數,需要從所選來源資料複製多少位元組。在IsConst是0x1的情況下,長度欄位告知將從位元遮罩欄位複製多少恒定位元。
6)位元遮罩,其掩蔽複製位元組中的位元,使得指令可以複製單獨的位元而不是整個位元組。在IsConst是0x1的情況下,位元遮罩欄位變為用於指令的恒定資料。
7)Dst_ByteOffset,其指示複製資料將被粘貼到的超級鍵104中的第一位元組位置。
如第七C圖中列出的,假定權杖102在層部分404中
具有N個層,超級鍵指令可以從以下項中的一項複製資料:N個層中的任何層、權杖102的共同部分402、以及權杖102的範本中繼資料。
與建立超級鍵104並行地,網路查找引擎100還被配
置為創建用於生成ProfileID 106的指令並且將該指令存儲到ProfileID指令表310中,如第八A圖中描繪的示例所示。ProfileID指令表310的每個條目包含僅一個ProfileID指令802。ProfileID指令802的格式的示例示出在第八B圖中,其包括至少兩個欄位:
1)En,指示是否啟用指令802以執行。如果不執行指令,則輸出ProfileID 106得到例如0x0的預設值。
2)Const,其是在En是0x1情況下將為ProfileID 106設置的恒定值。
在一些實施例中,網路查找引擎100還被配置為創建
用於生成EnVector 108的指令並且將該指令存儲到EnVector指令表312中,如第九A圖中描繪的示例所示。EnVector指令表312的每個條目包含僅一個EnVector指令902。EnVector指令902的格式的示例示出在圖9B中,其包括至少兩個欄位:
1)En,其指示是否啟用指令以執行。如果不執行指令,則輸出EnVector得到例如0x0的預設值。
2)Const,其是在En是0x1情況下將為EnVector 108設置的恒定值。
在第三圖的示例中,來指令表的指令被發送到它們的
相應硬體邏輯塊314、316和318,硬體邏輯塊314、316和318每輸入權杖102並行地執行所有這些指令。存在用於執行K×M個超級鍵指令的K×M個邏輯塊314、用於執行ProfileID指令的一個邏輯塊316、以及用於執行EnVector指令的一個邏輯塊318。
用於執行超級鍵指令的硬體邏輯塊314由第十A圖
中的示例示出,其中每個超級鍵指令從如圖7C中列出的源或者從恒定資料複製資料。複製的資料被粘貼到超級鍵104中的位置。並行地執行所有K×M個超級鍵指令,以建立最終超級鍵104。在執行超級鍵指令之前,首先將超級鍵初始化為0x0。用於執行ProfileID指令和EnVector指令的硬體邏輯塊分別示出在第十B圖和第十C圖中。每個塊的硬體邏輯將恒定資料或者0x0複製到輸出。
第十一圖描繪示出根據本發明的實施例的用於在軟
體定義網路(SDN)中每封包並行地生成多個查找請求的步驟的示例的流程圖。雖然為了說明的目的圖以特定順序來描繪功能步驟,但是該處理並不限於任何特定的步驟順序或佈置。相關領域技術人員將理解,這一圖中刻畫的各種步驟可以被省略、重佈置、組合和/或以各種方式適配。
在第十一圖的示例中,流程圖1100開始於步驟
1102,在步驟1102從多個網路封包的報頭欄位解析的多個輸入權杖的格式被標識。流程圖1100繼續到步驟1104,在步驟1104從輸入權杖中的每個輸入權杖提取控制位元集,其中提取的位元集被用於與程式設計的網路通訊協定提供的預定義值匹配。流程圖1100繼續到步驟1106,在步驟1106執行在提取的控制位元集與程式設
計的網路通訊協定指定的預定義值之間的匹配比較。流程圖1100繼續到步驟1108,在步驟1108生成用於多個指令表的位址,其中指令表包括用於按照輸入權杖中的每個輸入權杖建立多個查找請求的指令。流程圖1100繼續到步驟1110,在步驟1110執行指令表中的指令並且按照輸入權杖中的每個輸入權杖並行地生成多個查找請求。流程圖1100結束於步驟1112,在步驟1112向搜尋引擎提供多個並行查找請求,在搜尋引擎處執行針對鍵的查找操作。
為了解釋的目的,前述描述使用特定術語來提供對本
發明的透徹理解。然而,對於本領域技術人員來說將顯而易見的是,並不要求特定細節以便實踐本發明。因此,對本發明的特定實施例的前述描述是為了說明和描述的目的而給出的。它們不旨在是窮舉式的或者將本發明限於所公開的精確形式;顯然,鑒於以上教導,許多修改和變化是可能的。實施例被選擇和描述以便最好地解釋本發明的原理及其實際應用,由此它們使得本領域其他技術人員能夠最好地利用本發明,並且具有各種修改的各種實施例適合於設想的具體用途。因此要理解的是,在所附申請專利的範圍內,除了如本文中具體描述的之外,可以以其它方式來實踐本發明。旨在的是,所附權利要求及其等同物限定本發明的範圍。
Claims (29)
- 一種可程式設計網路查找引擎裝置,包括:範本查閱資料表,被配置為接收從多個網路封包的報頭欄位解析的多個輸入權杖並且標識所述多個輸入權杖的格式;以及控制資料提取器,被配置為從所述輸入權杖中的每個輸入權杖提取控制位元集,其中提取的位元集被用於與由程式設計的網路通訊協定提供的預定義值匹配;指令表位址生成器,被配置為:執行在提取的所述控制位元集與通過所述程式設計的網路通訊協定的所述預定義值之間的匹配比較;以及生成用於多個指令表的位址,其中所述指令表包括用於按照所述輸入權杖中的每個輸入權杖建立多個查找請求的指令;以及多個指令執行硬體邏輯塊,被配置為:執行所述指令表中的所述指令,並且按照所述輸入權杖中的每個輸入權杖並行地生成所述多個查找請求;以及向搜尋引擎提供並行的所述多個查找請求,在所述搜尋引擎處執行針對鍵的查找操作;其中所述引擎裝置是協定無關的,其中除了所述執行硬體邏輯塊之外,所述引擎裝置的所有塊都能夠由軟體程式設計以支援任何網路通訊協定。
- 根據申請專利範圍第1項所述的引擎裝置,其中每權杖的多個查找請求包括以下項中的一個或多個:超級鍵,所述超級鍵表示多個並行查找鍵的內容;ProfileID,所述ProfileID包括關於以下項中的一個或多個的資訊:在所述超級鍵中包含的所述查找鍵的數目、所述查找鍵在所述超級鍵中的位置和所述搜尋引擎中的哪些查閱資料表將被用於所述查找鍵中的每個查找鍵;以及EnVector,所述EnVector包括指示在所述超級鍵中包含的所述查找鍵中的哪些查找鍵有效的資訊。
- 根據申請專利範圍第2項所述的引擎裝置,其中使用所述ProfileID提取在所述超級鍵內部的所述查找鍵的資訊允許所述查找鍵的數目和/或所述查找鍵的大小依權杖變化。
- 根據申請專利範圍第1項所述的引擎裝置,其中所述輸入權杖中的每個輸入權杖的所述格式包括TemplateID,所述TemplateID標識在所述權杖內部的層的數目、所述層的大小和所述層的位置。
- 根據申請專利範圍第1項所述的引擎裝置,其中所述範本查閱資料表被配置為提取針對所述輸入權杖中的每個輸入權杖的中繼資料位元,其中所述中繼資料位元是連同在對應權杖內部的所述控制位元一起的附加控制位元,所述中繼資料位元向用戶提供每權杖的更多控制資訊,而不是將所述中繼資料位元嵌入所述權杖自身內部。
- 根據申請專利範圍第5項所述的引擎裝置,其中所述控制資料提取器由使用者重配置為選擇在所述權杖和所述中繼資料中的特定位置處的所述控制位元,所述控制位元適合於被程式設計用於所述引擎裝置的所述網路通訊協定。
- 根據申請專利範圍第1項所述的引擎裝置,其中所述指令表位址生成器被配置為執行在提取的所述控制位元與根據由所述引擎裝置支援的所述網路通訊協定的所述預定義值之間的匹配比較。
- 根據申請專利範圍第1項所述的引擎裝置,其中所述指令表位址生成器使用以下項之一來實現:a)多個三元內容可定址記憶體(TCAM)模組,其中每指令表一個TCAM模組;b)統一的TCAM和包含所述指令表的位址的組合記憶體;c)基於D-LEFT的雜湊,用於從提取的所述控制位元匯出所述指令表的位址;d)多級多工器(Mux)/查閱資料表(Lut)邏輯錐。
- 根據申請專利範圍第8項所述的引擎裝置,其中選擇所述指令表位址生成器的實施方式依賴於在用於對所述引擎裝置進行程式設計的軟體工具的成本、靈活性與支持之間的折衷。
- 根據申請專利範圍第8項所述的引擎裝置,其中所述多級Mux/Lut邏輯錐包括多個級,其中每個級包括多個Mux/Lut單元。
- 根據申請專利範圍第10項所述的引擎裝置,其中第一級的輸入是提取的所述控制位元,各級的輸出是其下一級的輸入;並且最後級的輸出形成所述指令表的所述位址。
- 根據申請專利範圍第10項所述的引擎裝置,其中在所述級中的每個級中的所述Mux/Lut單元中的每個Mux/Lut單元包括多個多工器和一個查找單元,所述一個查找單元返回一個位元輸出。
- 根據申請專利範圍第2項所述的引擎裝置,其中所述指令表包括多個(M個)超級鍵指令表、一個ProfileID指令表和一個EnVector指令表,其中M表示指令表中超級鍵指令表的數量。
- 根據申請專利範圍第13項所述的引擎裝置,其中所述超級鍵指令表中的每個超級鍵指令表包括用於建立所述超級鍵的多個(K個)可程式設計指令,其中K表示各超級鍵指令表中用於建立超級鍵的可程式設計指令的數量。
- 根據申請專利範圍第14項所述的引擎裝置,其中所述M個超級鍵指令表每權杖提供M×K個可程式設計指令,其中每個指令建立所述超級鍵的一部分,並且所有M×K個指令被並行地執行以建立完整的所述超級鍵。
- 根據申請專利範圍第14項所述的引擎裝置,其中所述可程式設計指令中的每個可程式設計指令將來自源的資料或者將恒定值複製到所述超級鍵中的位置。
- 根據申請專利範圍第13項所述的引擎裝置,其中所述ProfileID指令表包括用於建立所述ProfileID的指令,其中所述ProfileID指令表的每個表記憶體條目包括僅一個簡檔指令。
- 根據申請專利範圍第17項所述的引擎裝置,其中所述簡檔指令向所述ProfileID複製恒定值或者保持預設值。
- 根據申請專利範圍第13項所述的引擎裝置,其中所述EnVector指令表包括用於建立所述EnVector的指令,其中所述EnVector指令表的每個表記憶體條目包括僅一個EnVector指令。
- 根據申請專利範圍第19項所述的引擎裝置,其中所述EnVector指令向所述EnVector複製恒定值或者保持預設值。
- 根據申請專利範圍第13項所述的引擎裝置,其中所述指令執行硬體邏輯塊包括用於每權杖並行地執行從所述多個超級鍵指令表和從所述一個ProfileID指令表以及從所述一個EnVector指令表接收的所述指令中的所有指令的資料路徑。
- 一種用於在軟體定義網路(SDN)中每分組並行地生成多個查找請求的方法,包括:接收從多個網路封包的報頭欄位解析的多個輸入權杖並且標識所述多個輸入權杖的格式;從所述輸入權杖中的每個輸入權杖提取控制位元集,其中提取的位元集被用於與通過程式設計的網路通訊協定的預定義值匹配;執行在提取的所述控制位元集與由所述程式設計的網路通訊協定指定的所述預定義值之間的匹配比較;生成用於多個指令表的位址,其中所述指令表包括用於按照所述輸入權杖中的每個輸入權杖建立多個查找請求的指令;執行所述指令表中的所述指令,並且按照所述輸入權杖中的每個輸入權杖並行地生成所述多個查找請求;向搜尋引擎提供並行的所述多個查找請求,在所述搜尋引擎處執行針對鍵的查找操作;以及標識在所述輸入權杖中的每個輸入權杖內部的層的數目、所述層的大小和所述層的位置。
- 根據申請專利範圍第22項所述的方法,其中每權杖的所述多個查找請求包括以下項中的一個或多個:超級鍵,所述超級鍵表示多個並行查找鍵的內容;ProfileID,所述ProfileID包括關於以下項中的一個或多個的資訊:在所述超級鍵中包含的所述查找鍵的數目、所述查找鍵在所述超級鍵中的位置和所述搜尋引擎中的哪些查閱資料表將被用於所述查找鍵中的每個查找鍵;以及EnVector,所述EnVector包括指示在所述超級鍵中包含的所述查找鍵中的哪些查找鍵有效的資訊。
- 根據申請專利範圍第23項所述的方法,進一步包括:使用所述ProfileID提取在所述超級鍵內部的所述查找鍵的資訊以允許所述查找鍵的數目和/或所述查找鍵的大小依權杖變化。
- 根據申請專利範圍第22項所述的方法,進一步包括:提取針對所述輸入權杖中的每個輸入權杖的中繼資料位元,其中所述中繼資料位元是連同在對應權杖內部的所述控制位元一起的附加控制位元,所述中繼資料位元向用戶提供每權杖的更多控制資訊,而不是將所述中繼資料位元嵌入所述權杖自身內部。
- 根據申請專利範圍第25項所述的方法,進一步包括:選擇在所述權杖和所述中繼資料中的特定位置處的所述控制位元,所述控制位元適合於所述程式設計的網路通訊協定。
- 根據申請專利範圍第22項所述的方法,進一步包括使用以下項之一來生成用於所述多個指令表的所述位址:a)多個三元內容可定址記憶體(TCAM)模組,其中每指令表一個TCAM模組;b)統一的TCAM和包含所述指令表的位址的組合記憶體;c)基於D-LEFT的雜湊,用於從提取的所述控制比特匯出所述指令表的位址;d)多級多工器(Mux)/查閱資料表(Lut)邏輯錐。
- 根據申請專利範圍第27項所述的方法,其中所述多級Mux/Lut邏輯錐包括多個級,其中每個級包括多個Mux/Lut單元。
- 根據申請專利範圍第27項所述的方法,其中在所述級中的每個級中的所述Mux/Lut單元中的每個Mux/Lut單元包括多個多工器和一個查找單元,所述一個查找單元返回一個位元輸出。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/628,058 | 2015-02-20 | ||
US14/628,058 US10003676B2 (en) | 2015-02-20 | 2015-02-20 | Method and apparatus for generating parallel lookup requests utilizing a super key |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201631935A TW201631935A (zh) | 2016-09-01 |
TWI665894B true TWI665894B (zh) | 2019-07-11 |
Family
ID=56693877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104110834A TWI665894B (zh) | 2015-02-20 | 2015-04-02 | 用於利用超級鍵生成並行查找請求的方法和裝置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10003676B2 (zh) |
TW (1) | TWI665894B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11055288B2 (en) * | 2017-07-25 | 2021-07-06 | Sap Se | Evaluation of programmable conditions applicable to an operation |
US11146506B2 (en) | 2018-12-14 | 2021-10-12 | At&T Intellectual Property I, L.P. | Parallel data processing for service function chains spanning multiple servers |
US10805164B2 (en) | 2018-12-14 | 2020-10-13 | At&T Intellectual Property I, L.P. | Controlling parallel data processing for service function chains |
US11269644B1 (en) | 2019-07-29 | 2022-03-08 | Marvell Asia Pte, Ltd. | System and method for implementing strong load ordering in a processor using a circular ordering ring |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8335780B2 (en) * | 2008-03-11 | 2012-12-18 | James Madison Kelley | Scalable high speed relational processor for databases and networks |
US20130031077A1 (en) * | 2011-07-28 | 2013-01-31 | Brocade Communications Systems, Inc. | Longest Prefix Match Scheme |
CN104135437A (zh) * | 2013-04-30 | 2014-11-05 | 西普联特公司 | 用于在网络交换机中利用集中式存储器池的表搜索的装置和方法 |
US20140369363A1 (en) * | 2013-06-18 | 2014-12-18 | Xpliant, Inc. | Apparatus and Method for Uniquely Enumerating Paths in a Parse Tree |
CN104239337A (zh) * | 2013-06-19 | 2014-12-24 | 中兴通讯股份有限公司 | 基于tcam的查表处理方法及装置 |
TW201503634A (zh) * | 2013-03-12 | 2015-01-16 | 西普聯特公司 | 用於處理交替配置的最長首碼匹配表的裝置和方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4929939A (en) * | 1988-10-31 | 1990-05-29 | International Business Machines Corporation | High-speed switching system with flexible protocol capability |
US5319347A (en) * | 1992-04-30 | 1994-06-07 | Sgs-Thomson Microelectronics, Inc. | Parallelized magnitude comparator for comparing a binary number to a fixed value |
ATE319249T1 (de) * | 2000-01-27 | 2006-03-15 | Ibm | Verfahren und vorrichtung für klassifizierung von datenpaketen |
US8553686B2 (en) | 2010-04-28 | 2013-10-08 | Broadcom Corporation | Performing actions on frame entries in response to receiving bulk instruction |
US9159420B1 (en) * | 2011-08-16 | 2015-10-13 | Marvell Israel (M.I.S.L) Ltd. | Method and apparatus for content addressable memory parallel lookup |
US9154433B2 (en) * | 2011-10-25 | 2015-10-06 | Nicira, Inc. | Physical controller |
US9269439B1 (en) * | 2012-08-31 | 2016-02-23 | Marvell Israel (M.I.S.L) Ltd. | Method and apparatus for TCAM based look-up |
CN104022960B (zh) * | 2013-02-28 | 2017-05-31 | 新华三技术有限公司 | 基于OpenFlow协议实现PVLAN的方法和装置 |
US9973599B2 (en) * | 2013-12-04 | 2018-05-15 | Mediatek Inc. | Parser for parsing header in packet and related packet processing apparatus |
US9825884B2 (en) * | 2013-12-30 | 2017-11-21 | Cavium, Inc. | Protocol independent programmable switch (PIPS) software defined data center networks |
US9379963B2 (en) * | 2013-12-30 | 2016-06-28 | Cavium, Inc. | Apparatus and method of generating lookups and making decisions for packet modifying and forwarding in a software-defined network engine |
US9880844B2 (en) * | 2013-12-30 | 2018-01-30 | Cavium, Inc. | Method and apparatus for parallel and conditional data manipulation in a software-defined network processing engine |
-
2015
- 2015-02-20 US US14/628,058 patent/US10003676B2/en active Active
- 2015-04-02 TW TW104110834A patent/TWI665894B/zh active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8335780B2 (en) * | 2008-03-11 | 2012-12-18 | James Madison Kelley | Scalable high speed relational processor for databases and networks |
US20130031077A1 (en) * | 2011-07-28 | 2013-01-31 | Brocade Communications Systems, Inc. | Longest Prefix Match Scheme |
TW201503634A (zh) * | 2013-03-12 | 2015-01-16 | 西普聯特公司 | 用於處理交替配置的最長首碼匹配表的裝置和方法 |
CN104135437A (zh) * | 2013-04-30 | 2014-11-05 | 西普联特公司 | 用于在网络交换机中利用集中式存储器池的表搜索的装置和方法 |
US20140369363A1 (en) * | 2013-06-18 | 2014-12-18 | Xpliant, Inc. | Apparatus and Method for Uniquely Enumerating Paths in a Parse Tree |
CN104239337A (zh) * | 2013-06-19 | 2014-12-24 | 中兴通讯股份有限公司 | 基于tcam的查表处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
TW201631935A (zh) | 2016-09-01 |
US20160246882A1 (en) | 2016-08-25 |
US10003676B2 (en) | 2018-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11677664B2 (en) | Apparatus and method of generating lookups and making decisions for packet modifying and forwarding in a software-defined network engine | |
KR101615915B1 (ko) | 어드밴스드 피처를 갖는 정규 표현식 패턴에 대한 비결정성 유한 오토마톤 (nfa) 생성 | |
Bosshart et al. | P4: Programming protocol-independent packet processors | |
US10516626B1 (en) | Generating configuration data and API for programming a forwarding element | |
US8284776B2 (en) | Recursive packet header processing | |
US11418632B2 (en) | High speed flexible packet classification using network processors | |
US8681819B2 (en) | Programmable multifield parser packet | |
JP5518135B2 (ja) | データセンター向けの拡張可能なマルチキャスト転送方法および装置 | |
US8599859B2 (en) | Iterative parsing and classification | |
US20100114973A1 (en) | Deterministic Finite Automata Graph Traversal with Nodal Bit Mapping | |
TWI665894B (zh) | 用於利用超級鍵生成並行查找請求的方法和裝置 | |
WO2014206364A1 (zh) | 一种多级流表查找方法和装置 | |
CN104866284A (zh) | 用于软件定义网络处理引擎中的并行和条件数据操作的方法和装置 | |
US10601711B1 (en) | Lens table | |
US11888743B1 (en) | Network device storage of incremental prefix trees | |
JP2016005282A (ja) | パケットの固有の識別子を用いて、パケットの構造を特定する方法およびその装置 | |
US10511531B1 (en) | Enhanced lens distribution | |
US10355994B1 (en) | Lens distribution | |
US10795873B1 (en) | Hash output manipulation | |
Liu et al. | GrainFlow: Enable testing for future internet architectures by per-bit customization |