從分組內(nèi)容形成哈希輸入的方法及其裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)分組。更具體地,本發(fā)明涉及一種從分組內(nèi)容形成哈希輸入的方 法及其裝置。
【背景技術(shù)】
[0002] 在以太網(wǎng)交換機(jī)中,經(jīng)常需要形成用于在交換機(jī)接收的每個傳入分組的唯一簽 名??梢栽诘瘸杀径嗦窂铰酚桑‥CMP)中使用該唯一簽名,其中可以沿著多個不同目的地路 徑發(fā)送來自相同源的分組。為了形成這一唯一簽名,當(dāng)前基于硬件的實(shí)現(xiàn)方式定義分組中 的哪些固定字段應(yīng)當(dāng)用作哈希輸入。
【發(fā)明內(nèi)容】
[0003] 用于從分組內(nèi)容形成哈希輸入的裝置的實(shí)施例涉及一種用于形成哈希輸入的可 編程的靈活解決方案。這一解決方案允許基于不同要求的硬件改變,以及隨著將來定義更 新的協(xié)議和在將來定義更新的協(xié)議時(shí)添加對于它們的支持。分組被拆分成個別層。每層被 給予有助于標(biāo)識該層是什么的唯一的層類型編號?;趯宇愋?,每層被擴(kuò)展成通用格式。 每層具有該層通用的哈希命令的集合。每個哈希命令的字段是fieldOffset、fieldLen、 hashMask和hashMaskMSB。這些哈希命令允許分組中的信息以可編程的方式被提取。從分 組的每個協(xié)議層提取的字段被級聯(lián)以形成哈希層。位矢量指示哪些哈希層用來形成哈希輸 入。
[0004] 在一個方面中,提供一種實(shí)施解析器引擎的方法。該方法包括:標(biāo)識分組的協(xié)議 層;基于協(xié)議層中的每個協(xié)議層的標(biāo)識將該協(xié)議層擴(kuò)展成通用格式;以及從經(jīng)擴(kuò)展的協(xié)議 層選擇內(nèi)容。
[0005] 在一些實(shí)施例中,分組的協(xié)議層中的每個協(xié)議層基于該協(xié)議層的唯一的層類型編 號而被標(biāo)識。
[0006] 在一些實(shí)施例中,通用格式定義協(xié)議層能夠具有的所有字段的超集。
[0007] 在一些實(shí)施例中,擴(kuò)展協(xié)議層中的每個協(xié)議層包括:維持用于經(jīng)擴(kuò)展的協(xié)議層的 位矢量,其中位矢量包括用于經(jīng)擴(kuò)展的協(xié)議層的每個字節(jié)的每字節(jié)的位;對于每個有效字 段的每個字節(jié)將位標(biāo)記為可用,其中每個有效字段是在分組的協(xié)議層中存在的字段;以及 對于每個無效字段的每個字節(jié)將位標(biāo)記為不可用,其中每個無效字段是在分組的協(xié)議層中 不存在的字段。
[0008] 在一些實(shí)施例中,該方法也包括使用壓縮格式來表達(dá)經(jīng)擴(kuò)展的協(xié)議層。
[0009] 在一些實(shí)施例中,該方法也包括將來自通用哈希命令的集合的至少一個通用哈希 命令應(yīng)用于經(jīng)擴(kuò)展的協(xié)議層以從經(jīng)擴(kuò)展的協(xié)議層提取字段。通用哈希命令中的每個通用哈 希命令的字段是fieldOffset、fieldLen、hashMask和hashMaskMSB;fieldOffset指定將 被提取的字段在所述經(jīng)擴(kuò)展的層內(nèi)開始的偏移,fieldLen指定應(yīng)當(dāng)從該指定的偏移提取的 字節(jié)的數(shù)目,hashMask是位掩碼,并且hashMaskMSB指示所述位掩碼是否將被應(yīng)用于所提 取的字段的最高有效字節(jié)或者最低有效字節(jié)。在一些實(shí)施例中,通用哈希命令中的每個通 用哈希命令的字段是軟件定義的。
[0010] 在一些實(shí)施例中,該方法也包括:對位掩碼和所提取的字段的一個字節(jié)應(yīng)用邏輯 AND運(yùn)算,其中位掩碼由至少一個哈希命令指定;至少基于邏輯AND運(yùn)算的結(jié)果形成哈希輸 入層;以及檢索位矢量,該位矢量指示經(jīng)擴(kuò)展的協(xié)議層中的哪些哈希輸入層將用來形成向 哈希函數(shù)的哈希輸入。在一些實(shí)施例中,該方法也包括使用哈希輸入作為向哈希函數(shù)的輸 入。
[0011] 在另一方面中,提供一種實(shí)施網(wǎng)絡(luò)交換機(jī)的方法。該方法包括:在網(wǎng)絡(luò)交換機(jī)的傳 入端口接收分組;根據(jù)用于對應(yīng)協(xié)議的通用格式來通式化分組的每個協(xié)議頭部;對于每個 經(jīng)通式化的協(xié)議頭部,從經(jīng)通式化的協(xié)議頭部提取一個或者多個字段;對于每個經(jīng)通式化 的協(xié)議頭部,級聯(lián)來自經(jīng)通式化的協(xié)議頭部的一個或者多個提取的字段以形成哈希層;以 及使用位矢量以確定所有經(jīng)擴(kuò)展的協(xié)議層頭部中的哪些哈希層將被選擇用以形成哈希輸 入。
[0012] 在一些實(shí)施例中,網(wǎng)絡(luò)交換機(jī)包括:解析器引擎,被配置為通式化每個協(xié)議頭部, 從經(jīng)通式化的協(xié)議頭部提取一個或者多個字段,級聯(lián)來自經(jīng)通式化的協(xié)議頭部的一個或者 多個提取的字段以形成哈希層,并且使用位矢量以確定所有經(jīng)擴(kuò)展的協(xié)議頭部中的哪些哈 希層將被選擇用以形成哈希輸入。
[0013] 在一些實(shí)施例中,通式化每個協(xié)議頭部包括:解析器引擎確定協(xié)議頭部的層類型 和層類型的變體;解析器引擎基于層類型和變體從協(xié)議頭部檢測缺少的字段;以及基于檢 測,解析器引擎將協(xié)議頭部擴(kuò)展成通用格式。
[0014] 在一些實(shí)施例中,提取一個或者多個字段包括將一個或者多個通用哈希命令應(yīng) 用于經(jīng)通式化的協(xié)議頭部。通用哈希命令中的每個通用哈希命令的字段是fieldOffset、 fieldLen、hashMask和hashMaskMSB;fieldOffset指定將被提取的字段在所述經(jīng)擴(kuò)展的 層內(nèi)開始的偏移,fieldLen指定應(yīng)當(dāng)從該指定的偏移提取的字節(jié)的數(shù)目,hashMask是位掩 碼,并且hashMaskMSB指示所述位掩碼是否將被應(yīng)用于所提取的字段的最高有效字節(jié)或者 最低有效字節(jié)。
[0015] 在一些實(shí)施例中,在提取一個或者多個字段之后和在級聯(lián)一個或者多個所提取的 字段之前,該方法包括:對位掩碼和所提取的字段的一個字節(jié)應(yīng)用邏輯AND運(yùn)算,其中位掩 碼由通用哈希命令指定。
[0016] 在一些實(shí)施例中,在使用位矢量之前,該方法包括:使用分組的PktID對本地表進(jìn) 行編索引,其中該表存儲用于每個已知協(xié)議層組合的位矢量。
[0017] 在一些實(shí)施例中,在接收分組之前,該方法包括經(jīng)由軟件對一個或者多個通用哈 希命令中的每個通用哈希命令的字段進(jìn)行編程。
[0018] 在一些實(shí)施例中,在接收分組之前,該方法包括:允許協(xié)議的通用格式的軟件定義 的映射;以及在網(wǎng)絡(luò)交換機(jī)的存儲器中存儲軟件定義的映射。
[0019] 在又一方面中,提供一種網(wǎng)絡(luò)交換機(jī)。網(wǎng)絡(luò)交換機(jī)包括:輸入端口和輸出端口,用 于接收和發(fā)送分組。網(wǎng)絡(luò)交換機(jī)也包括:存儲器,用于存儲協(xié)議的通用格式的由軟件定義的 映射的集合、用于存儲用于提取字段的通用哈希命令的集合、和用于存儲位矢量表。網(wǎng)絡(luò)交 換機(jī)也包括:解析器引擎,用于對分組執(zhí)行頭部通式化過程,以根據(jù)軟件定義的映射中特定 于對應(yīng)協(xié)議的一個軟件定義的映射來通式化分組的每個協(xié)議頭部,和用于從經(jīng)通式化的協(xié) 議頭部選擇內(nèi)容以應(yīng)用于哈希函數(shù)。可以對協(xié)議的不同變體、對不同協(xié)議或者二者使用頭 部通式化過程。
[0020] 在一些實(shí)施例中,在分組由解析器引擎處理之后,分組包括規(guī)范化的協(xié)議層。規(guī)范 化的協(xié)議層中的每個規(guī)范化的協(xié)議層是根據(jù)用于對應(yīng)協(xié)議的對應(yīng)通用格式被擴(kuò)展的協(xié)議 層。
[0021] 在一些實(shí)施例中,解析器引擎還將來自通用哈希命令的集合之一的至少一個通用 哈希命令應(yīng)用于經(jīng)通式化的協(xié)議層中的每個經(jīng)通式化的協(xié)議層,以從該經(jīng)通式化的協(xié)議層 提取字段。在一些實(shí)施例中,通用哈希命令的集合之一是特定于對應(yīng)協(xié)議的。在一些實(shí)施 例中,通用哈希命令中的每個通用哈希命令的字段是軟件定義的。
[0022] 在一些實(shí)施例中,至少一個哈希命令指定位掩碼和提取的字段的將位掩碼應(yīng)用于 的字節(jié)位置。在一些實(shí)施例中,解析器引擎還對位掩碼和所提取的字段的字節(jié)位置應(yīng)用邏 輯AND運(yùn)算。在一些實(shí)施例中,來自該邏輯AND運(yùn)算的結(jié)果被與來自其它AND運(yùn)算的其它 結(jié)果級聯(lián)以形成哈希輸入層。在一些實(shí)施例中,解析器引擎訪問本地表以從中檢索位矢量, 用以應(yīng)用于哈希輸入層以形成用于哈希函數(shù)的哈希輸入。
[0023] 在又一方面中,提供一種解析器引擎。解析器引擎包括:電路,配置為:標(biāo)識分組 的協(xié)議層;基于協(xié)議層中的每個協(xié)議層的標(biāo)識將該協(xié)議層擴(kuò)展成通用格式;以及從經(jīng)擴(kuò)展 的協(xié)議層選擇內(nèi)容用以應(yīng)用于哈希函數(shù)。
[0024] 在一些實(shí)施例中,分組的協(xié)議層中的每個協(xié)議層基于唯一的層類型編號來標(biāo)識。 在一些實(shí)施例中,通用格式定義協(xié)議層能夠具有的所有字段的超集。
[0025] 在一些實(shí)施例中,電路也被配置為將來自通用哈希命令的集合的至少一個通用哈 希命令應(yīng)用于經(jīng)擴(kuò)展的協(xié)議層,以從經(jīng)擴(kuò)展的協(xié)議層提取字段。在一些實(shí)施例中,通用哈希 命令中的每個通用哈希命令的字段是fieldOffset、fieldLen、hashMask和hashMaskMSB; fieldOffset指定將被提取的字段在所述經(jīng)擴(kuò)展的層內(nèi)開始的偏移,fieldLen指定應(yīng)當(dāng)從 該指定的偏移提取的字節(jié)的數(shù)目,hashMask是位掩碼,并且hashMaskMSB指示所述位掩碼 是否將被應(yīng)用于所提取的字段的最高有效字節(jié)或者最低有效字節(jié)。在一些實(shí)施例中,通用 哈希命令中的每個通用哈希命令的字段是軟件定義的。
[0026] 在一些實(shí)施例中,電路也被配置:對位掩碼和所提取的字段的一個字節(jié)應(yīng)用邏輯 AND運(yùn)算,其中位掩碼由至少一個哈希命令指定;至少基于邏輯AND運(yùn)算的結(jié)果形成哈希輸 入層;以及檢索位矢量,位矢量指示經(jīng)擴(kuò)展的協(xié)議層中的哪些哈希輸入層將被用來形成向 哈希函數(shù)的哈希輸入。
【附圖說明】
[0027] 根據(jù)如附圖中所示的本發(fā)明的示例實(shí)施例的以下更具體描述,前文將是清楚的, 在附圖中,相似標(biāo)號貫穿不同視圖指代相同部分。附圖未必按比例、代之以著重于圖示本發(fā) 明的實(shí)施例。
[0028] 圖1圖示根據(jù)本發(fā)明的一些實(shí)施例的將傳入分組的層進(jìn)行頭部擴(kuò)展成通用格式 的圖。
[0029] 圖2A-2B圖示根據(jù)本發(fā)明的一些實(shí)施例的協(xié)議頭部的示例通式化。
[0030] 圖3A-3C圖示根據(jù)本發(fā)明的一些實(shí)施例的協(xié)議頭部的另一示例通式化。
[0031] 圖4A-4C圖示根據(jù)本發(fā)明的一些實(shí)施例的協(xié)議頭部的另一示例通式化。
[0032] 圖5圖示根據(jù)本發(fā)明的一些實(shí)施例的從經(jīng)擴(kuò)展的層的提取數(shù)據(jù)的框圖。
[0033] 圖6A-6B圖示根據(jù)本發(fā)明的一