專利名稱:用于修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)聯(lián)網(wǎng),更具體而言,本發(fā)明涉及修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)。
背景技術(shù):
計(jì)算機(jī)網(wǎng)絡(luò)是用于在諸如計(jì)算機(jī)之類節(jié)點(diǎn)之間傳輸數(shù)據(jù)的互連網(wǎng)絡(luò)鏈路和網(wǎng)段在地理上的分布式集合??色@得很多類型的網(wǎng)段,其類型范圍從局域網(wǎng)(LAN)到廣域網(wǎng)(WAN)。諸如個(gè)人計(jì)算機(jī)或工作站之類的終端節(jié)點(diǎn)通常通過根據(jù)預(yù)定協(xié)議交換數(shù)據(jù)的離散幀或分組經(jīng)由網(wǎng)絡(luò)通信。在此上下文中,協(xié)議包含定義節(jié)點(diǎn)如何彼此交互的一組規(guī)則。
計(jì)算機(jī)網(wǎng)絡(luò)可以通過可被耦合到網(wǎng)絡(luò)的具有多個(gè)端口的中間節(jié)點(diǎn)(例如交換機(jī)或路由器)被進(jìn)一步互連。例如,交換機(jī)可以用于提供“交換”功能,所述“交換”功能用于在多個(gè)LAN之間高速地傳輸信息。交換功能包括在源端口處接收發(fā)起于源節(jié)點(diǎn)的數(shù)據(jù)分組,并將該分組傳輸?shù)街辽僖粋€(gè)目的地端口,以向目的地節(jié)點(diǎn)執(zhí)行轉(zhuǎn)發(fā)。
路由器可以用于互連執(zhí)行不同LAN標(biāo)準(zhǔn)的多個(gè)LAN,和/或提供比交換機(jī)更高級(jí)的功能。如果與源和目的地節(jié)點(diǎn)相關(guān)聯(lián)的LAN標(biāo)準(zhǔn)不同(例如以太網(wǎng)和令牌環(huán)),路由器則還可以改變分組的格式,從而使分組可以被目的地節(jié)點(diǎn)所接收。路由器通常工作在網(wǎng)絡(luò)使用的通信協(xié)議棧的網(wǎng)絡(luò)層上,例如傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)通信體系結(jié)構(gòu)的網(wǎng)絡(luò)層。
路由器還執(zhí)行與修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)相關(guān)聯(lián)的各種功能,例如處理被路由器接收到的分組。這些功能可以包括在分組中插入、刪除或替換信息。例如,某些路由器支持多協(xié)議標(biāo)簽交換(MPLS)協(xié)議。MPLS協(xié)議提供了一種分配標(biāo)簽的方法,該方法指導(dǎo)路由器向何處發(fā)送分組,并指示分組應(yīng)該接收的優(yōu)先級(jí)。根據(jù)MPLS,分組在標(biāo)簽交換路徑(LSP)上傳輸。LSP是一種單工路徑,它通常包括一連串標(biāo)簽,這些標(biāo)簽代表沿著從源標(biāo)簽邊緣路由器(LER)到目的地LER的路徑上的每個(gè)節(jié)點(diǎn)。LER是一種工作在接入網(wǎng)絡(luò)和MPLS網(wǎng)絡(luò)的邊緣處的設(shè)備(例如路由器),并且它通常涉及流量進(jìn)入或離開MPLS網(wǎng)絡(luò)時(shí)LSP的分配和去除。在典型配置中,LSP是通過級(jí)聯(lián)多個(gè)標(biāo)簽以形成路徑而生成的。然后LSP在源LER處被插入到分組的頭部中。當(dāng)分組到達(dá)目的地LER時(shí),從分組的頭部中刪除(去除)標(biāo)簽,并進(jìn)一步處理分組,例如分組可以被轉(zhuǎn)發(fā)。
LER通常采用處理器(CPU)來插入和刪除被包含在經(jīng)由MPLS網(wǎng)絡(luò)運(yùn)送的分組中的LSP。通常,處理器還執(zhí)行LER的其他任務(wù),例如實(shí)現(xiàn)各種路由協(xié)議和一般地管理LER。但是,采用處理器來插入和刪除分組中的LSP的做法可能無法有效地利用處理器的資源。插入和刪除LSP通常要消耗時(shí)間和存儲(chǔ)器資源,并且可能浪費(fèi)可以被更好地用于執(zhí)行其他任務(wù)(例如執(zhí)行路由協(xié)議)的有價(jià)值的處理器資源。
例如,在分組中生成和插入LSP通常涉及(i)通過將來自多個(gè)存儲(chǔ)器位置的多條數(shù)據(jù)移動(dòng)到單個(gè)存儲(chǔ)器區(qū)域中來生成LSP,以及(ii)將LSP插入分組頭部,這還可能涉及先將分組頭部分成引導(dǎo)部分和后續(xù)(lagging)部分,然后再將LSP插入到這兩個(gè)部分之間。顯然,這個(gè)過程涉及大量計(jì)算資源和存儲(chǔ)器帶寬。依賴于被處理的流量的量,可能將過多的處理器資源量專門用于修改數(shù)據(jù)流量(例如處理LSP),這會(huì)影響處理器執(zhí)行其他任務(wù)的能力,所述其他任務(wù)例如是處理其他分組、管理路由表和響應(yīng)于網(wǎng)絡(luò)中的其他路由器。這繼而會(huì)導(dǎo)致路由器的分組處理性能(即分組吞吐量)下降。此外,在某些情況下,這些任務(wù)可能對(duì)時(shí)間的要求很嚴(yán)格,從而需要處理器在一定的時(shí)間窗內(nèi)完成任務(wù)。這種任務(wù)的一個(gè)示例是為了使路由器被網(wǎng)絡(luò)所承認(rèn),在一定的期限內(nèi)發(fā)送“?;?keep-alive)”分組。如果處理器將其資源的相當(dāng)一部分專用于修改從源傳輸?shù)侥康牡氐臄?shù)據(jù),它則可能沒有足夠的剩余資源來執(zhí)行這些對(duì)時(shí)間要求嚴(yán)格的任務(wù)。
發(fā)明內(nèi)容
本發(fā)明涉及用于在網(wǎng)絡(luò)中的中間節(jié)點(diǎn)上修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)的有效技術(shù)。根據(jù)該技術(shù),命令在中間節(jié)點(diǎn)處生成,其中每個(gè)命令與修改數(shù)據(jù)的一個(gè)操作相關(guān)聯(lián)。每個(gè)命令被放置在用于保存命令的數(shù)據(jù)結(jié)構(gòu)中,并且當(dāng)數(shù)據(jù)被節(jié)點(diǎn)從源傳輸往目的地時(shí)才執(zhí)行與這些命令相關(guān)聯(lián)的操作。當(dāng)數(shù)據(jù)被傳輸時(shí),與命令相關(guān)聯(lián)的操作被執(zhí)行,并且按照命令的指導(dǎo)修改數(shù)據(jù)。
在所示實(shí)施例中,源是上下文存儲(chǔ)器,目的地是輸出緩沖器,數(shù)據(jù)結(jié)構(gòu)是包含一個(gè)或多個(gè)條目的命令表,并且數(shù)據(jù)是包含在上下文存儲(chǔ)器中的分組頭部(即上下文數(shù)據(jù))。處理器執(zhí)行指令以執(zhí)行修改上下文數(shù)據(jù)的操作,例如向上下文數(shù)據(jù)插入數(shù)據(jù)和從上下文數(shù)據(jù)刪除數(shù)據(jù)。指令生成與操作相關(guān)聯(lián)的命令,這些命令然后被放置到包含在命令表中的條目中。在完成上下文數(shù)據(jù)的處理之后,處理器執(zhí)行發(fā)送命令,并指導(dǎo)數(shù)據(jù)移動(dòng)器將上下文數(shù)據(jù)從上下文存儲(chǔ)器傳輸?shù)捷敵鼍彌_器。當(dāng)上下文數(shù)據(jù)被傳輸時(shí),數(shù)據(jù)移動(dòng)器檢查命令表中的條目,并按照包含在條目中的命令的指導(dǎo)修改所述數(shù)據(jù)。
有利的是,本發(fā)明的技術(shù)對(duì)現(xiàn)有技術(shù)的改進(jìn)在于,它能夠在無需大量使用處理器資源的情況下修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)。此外,根據(jù)本發(fā)明的技術(shù),處理器僅僅向“助手”(數(shù)據(jù)移動(dòng)器)發(fā)布修改數(shù)據(jù)的命令。然后當(dāng)數(shù)據(jù)被從源傳輸往目的地時(shí),命令被執(zhí)行,而無需利用處理器資源。
通過結(jié)合附圖參考以下描述,可以更好地理解本發(fā)明的以上和其他優(yōu)點(diǎn),附圖中的相似標(biāo)號(hào)指示相同或功能上類似的元件,在附圖中圖1是可以有利地用于本發(fā)明的數(shù)據(jù)網(wǎng)絡(luò)的示意框圖;圖2是可以有利地用于本發(fā)明的中間節(jié)點(diǎn)的高級(jí)示意框圖;圖3是可以有利地用于本發(fā)明的被組織成處理器的脈動(dòng)陣列(systolicarray)的轉(zhuǎn)發(fā)引擎的示意框圖;圖4是可以有利地用于本發(fā)明的處理器集群的示意框圖;
圖5是可以有利地用于本發(fā)明的命令表?xiàng)l目的示意框圖;圖6是可以有利地用于本發(fā)明的位掩碼(bit mask)的示意框圖;圖7是可以有利地用于本發(fā)明的輸出緩沖器邏輯的部分示意框圖;圖8是可以有利地用于本發(fā)明的示例性指令的列表;圖9A-9C是可以有利地用于實(shí)現(xiàn)本發(fā)明的步驟序列的流程圖;以及圖10是可以有利地用于配置狀態(tài)機(jī)以根據(jù)本發(fā)明操作的狀態(tài)機(jī)的圖。
具體實(shí)施例方式
圖1是可以有利地用于本發(fā)明的計(jì)算機(jī)網(wǎng)絡(luò)100的示意框圖。計(jì)算機(jī)網(wǎng)絡(luò)100包括被連接到諸如終端節(jié)點(diǎn)110和中間節(jié)點(diǎn)200之類的多個(gè)節(jié)點(diǎn)的通信鏈路和網(wǎng)段的集合。網(wǎng)絡(luò)鏈路和網(wǎng)段可以包括通過中間節(jié)點(diǎn)200互連的局域網(wǎng)(LAN)120、廣域網(wǎng)(WAN)(例如因特網(wǎng))170以及WAN鏈路130,從而構(gòu)成計(jì)算機(jī)節(jié)點(diǎn)的互聯(lián)網(wǎng)絡(luò)。這些互聯(lián)網(wǎng)的節(jié)點(diǎn)通過根據(jù)預(yù)定的協(xié)議集合交換數(shù)據(jù)分組來進(jìn)行通信,所述協(xié)議例如是傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)和互聯(lián)網(wǎng)分組交換(IPX)協(xié)議。
圖2是中間節(jié)點(diǎn)200的高級(jí)示意框圖,中間節(jié)點(diǎn)200例如是路由器。可以有利地用于本發(fā)明的路由器的一個(gè)示例是可從加州San Jose的思科系統(tǒng)公司獲得的Cisco 10000 Series Internet路由器。節(jié)點(diǎn)200包括多個(gè)互連的組件,包括轉(zhuǎn)發(fā)引擎300、各種存儲(chǔ)器、排隊(duì)邏輯210和網(wǎng)絡(luò)接口卡(線路卡)240。這些組件的操作優(yōu)選地被時(shí)鐘模塊270同步控制,但是轉(zhuǎn)發(fā)引擎300的陣列式元件可以被可操作地配置為異步工作。在所示實(shí)施例中,時(shí)鐘模塊270以例如200兆赫的頻率(即5納秒的時(shí)鐘周期)生成時(shí)鐘信號(hào),并經(jīng)由時(shí)鐘線路將這些時(shí)鐘信號(hào)全局地分發(fā)到中間節(jié)點(diǎn)的組件。
存儲(chǔ)器一般包含可由轉(zhuǎn)發(fā)引擎300尋址的隨機(jī)訪問存儲(chǔ)器(RAM)存儲(chǔ)位置,以及用于存儲(chǔ)被組件和軟件程序訪問的數(shù)據(jù)結(jié)構(gòu)的邏輯,所述軟件程序包括用于實(shí)現(xiàn)本發(fā)明的多個(gè)方面的程序。通常部分位于存儲(chǔ)器中并由轉(zhuǎn)發(fā)引擎300執(zhí)行的操作系統(tǒng)通過調(diào)用支持在節(jié)點(diǎn)200上執(zhí)行的軟件進(jìn)程的網(wǎng)絡(luò)操作及其他步驟來從功能上組織節(jié)點(diǎn)200。本領(lǐng)域技術(shù)人員將會(huì)意識(shí)到,包括各種計(jì)算機(jī)可讀介質(zhì)在內(nèi)的其他存儲(chǔ)器裝置可以被用于存儲(chǔ)和執(zhí)行與這里描述的本發(fā)明的技術(shù)和機(jī)制相關(guān)的程序指令。
緩沖器和排隊(duì)單元(BQU)210被連接到用于存儲(chǔ)分組的分組存儲(chǔ)器220和用于在被組織成隊(duì)列(未示出)的數(shù)據(jù)結(jié)構(gòu)(例如鏈表)上存儲(chǔ)分組的網(wǎng)絡(luò)和鏈路層頭部的隊(duì)列存儲(chǔ)器230。BQU 210還包括用于經(jīng)由具有仲裁器255的選擇器電路250將轉(zhuǎn)發(fā)引擎300與多個(gè)線路卡240互連的接口電路。線路卡240例如可以包括異步傳輸模式(ATM)、快速以太網(wǎng)(FE)和千兆位以太網(wǎng)(GE)端口,這些端口中的每一個(gè)都包括可以具有信號(hào)、電子和機(jī)械特性的傳統(tǒng)接口電路,以及以接口連接物理介質(zhì)和運(yùn)行在此介質(zhì)上的協(xié)議所需的互換電路。
路由處理器260執(zhí)行用于直接與轉(zhuǎn)發(fā)引擎300通信的傳統(tǒng)路由協(xié)議。路由協(xié)議一般包括中間節(jié)點(diǎn)之間的拓?fù)湫畔⒔粨Q,以例如基于目的地IP地址來確定通過網(wǎng)絡(luò)的優(yōu)選路徑。這些協(xié)議提供處理器260創(chuàng)建和維護(hù)轉(zhuǎn)發(fā)表所使用的信息。轉(zhuǎn)發(fā)表被加載到外部存儲(chǔ)器340中,以作為引擎300用于執(zhí)行例如第2層(L2)和第3層(L3)轉(zhuǎn)發(fā)操作所使用的轉(zhuǎn)發(fā)信息庫(FIB)表。例如,當(dāng)根據(jù)IP路由處理頭部時(shí),引擎300通過使用頭部中的IP地址索引FIB來確定將分組發(fā)往何處。轉(zhuǎn)發(fā)操作的執(zhí)行導(dǎo)致頭部中的目的地媒體訪問控制(MAC)地址被轉(zhuǎn)發(fā)引擎300所重寫,以標(biāo)識(shí)分組的輸出端口。
轉(zhuǎn)發(fā)引擎300可以包含對(duì)稱的多處理器系統(tǒng),該系統(tǒng)具有多個(gè)處理元件或處理器。圖3是包含多個(gè)處理器(TMC)450的轉(zhuǎn)發(fā)引擎300的部分示意框圖,所述多個(gè)處理器(TMC)450被組織成多維的脈動(dòng)陣列。每個(gè)處理器450優(yōu)選地是流水線型處理器,其包括多個(gè)算術(shù)邏輯單元(ALU)、具有多個(gè)存儲(chǔ)由ALU處理的中間結(jié)果信息的通用寄存器的寄存器文件,以及其他組件。處理器450可以以陣列形式被排列成多個(gè)行和多個(gè)列。在所示實(shí)施例中,處理器以8×2陣列配置被排列成八(8)行和兩(2)列,該8×2陣列配置被嵌入在輸入緩沖器360和輸出緩沖器700之間。但是,應(yīng)該注意,諸如4×4、8×2或8×1陣列配置之類的其他配置也可能被有利地用于本發(fā)明。如這里所示,支持多個(gè)執(zhí)行線程的單個(gè)處理器可以利用本發(fā)明。
轉(zhuǎn)發(fā)引擎300經(jīng)由存儲(chǔ)器控制器375被耦合到多個(gè)外部存儲(chǔ)器資源340。外部存儲(chǔ)器340被優(yōu)選地組織成一個(gè)或多個(gè)存儲(chǔ)器條(bank),并使用快速周期隨機(jī)訪問存儲(chǔ)器(FCRAM)設(shè)備來實(shí)現(xiàn),但是諸如減小延遲動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器(RLDRAM)設(shè)備或靜態(tài)隨機(jī)訪問存儲(chǔ)器(SRAM)設(shè)備之類的其他設(shè)備也可以被使用。外部存儲(chǔ)器340是外部的“列”存儲(chǔ)器,它被配置為存儲(chǔ)被組織為一系列數(shù)據(jù)結(jié)構(gòu)的非暫態(tài)數(shù)據(jù)(例如轉(zhuǎn)發(fā)表、隊(duì)列),以用于處理暫態(tài)數(shù)據(jù)(例如分組)。每個(gè)存儲(chǔ)器控制器375都包含使得能夠訪問包含在相關(guān)外部存儲(chǔ)器340中的存儲(chǔ)器位置的邏輯。如這里所使用的,存儲(chǔ)器子系統(tǒng)包含外部存儲(chǔ)器340及其相關(guān)的存儲(chǔ)器控制器375。一列的處理器450被耦合到一個(gè)特定的外部存儲(chǔ)器子系統(tǒng)。例如,列1中的處理器(即行0到行N中的TMC1)被耦合到包含外部存儲(chǔ)器控制器B 375b和外部存儲(chǔ)器B 340b的外部存儲(chǔ)器子系統(tǒng)。
一行中的處理器450被組織成包含上下文存儲(chǔ)器430的集群400,上下文存儲(chǔ)器430被配置為保存由處理器450處理的上下文信息(例如分組頭部)。圖4是集群400的示意框圖。集群中的每個(gè)處理器450都被耦合到指令存儲(chǔ)器(IRAM)420、控制寄存器單元410、上下文存儲(chǔ)器430和存儲(chǔ)器管理單元(MMU)460,其中指令存儲(chǔ)器420被配置用于存儲(chǔ)被處理器450所執(zhí)行的指令??刂萍拇嫫鲉卧?10包括各種被分別用于存儲(chǔ)和用于控制TMC 450的操作的通用和控制寄存器。MMU 460被配置為除了其他功能之外還使處理器450能夠通過外部存儲(chǔ)器控制器375來訪問外部存儲(chǔ)器340。
上下文存儲(chǔ)器430是被配置為保存暫態(tài)(上下文)數(shù)據(jù)(例如分組頭部)的RAM。本地存儲(chǔ)器434是被配置用于保存各種可被集群400中的處理器450訪問的數(shù)據(jù)的內(nèi)部RAM。應(yīng)該注意,可以被特定一列中的處理器450訪問的諸如內(nèi)部或外部列存儲(chǔ)器(例如存儲(chǔ)器340)之類的其他形式的存儲(chǔ)器也可以被用于本發(fā)明。
每個(gè)集群400中的處理器450對(duì)通過輸入緩沖器360加載到上下文存儲(chǔ)器430中的暫態(tài)數(shù)據(jù)執(zhí)行操作,但是每列中的處理器以不同的相位并行地對(duì)暫態(tài)數(shù)據(jù)執(zhí)行幾乎相同的操作。暫態(tài)數(shù)據(jù)通過由耦合到處理器450的數(shù)據(jù)移動(dòng)器電路470提供的數(shù)據(jù)路徑通道440在引擎300的輸入和輸出緩沖器之間傳遞。流過集群400的上下文數(shù)據(jù)與其他數(shù)據(jù)和用于引用存儲(chǔ)在例如外部存儲(chǔ)器340中的數(shù)據(jù)和各種數(shù)據(jù)結(jié)構(gòu)(例如表)的指針一道被存儲(chǔ)在上下文存儲(chǔ)器430中,以待處理器450使用。
數(shù)據(jù)移動(dòng)器470包括使數(shù)據(jù)能夠根據(jù)本發(fā)明的技術(shù)被從上下文存儲(chǔ)器430傳輸?shù)捷敵鼍彌_器700的邏輯。為此,數(shù)據(jù)移動(dòng)器470除其他邏輯之外還包括實(shí)現(xiàn)命令表500、狀態(tài)機(jī)474和接口邏輯472的邏輯。接口邏輯472包括利用接口將數(shù)據(jù)移動(dòng)器470連接到輸出緩沖器700的邏輯,該邏輯例如使得能夠在數(shù)據(jù)移動(dòng)器470和輸出緩沖器700之間傳遞16字節(jié)的數(shù)據(jù)單元和相關(guān)的2字節(jié)位掩碼。狀態(tài)機(jī)474包含被配置用于實(shí)現(xiàn)傳統(tǒng)狀態(tài)機(jī)的組合和順序邏輯,所述狀態(tài)機(jī)除了其他功能之外還能夠使數(shù)據(jù)從上下文存儲(chǔ)器430被傳輸?shù)捷敵鼍彌_器700。
在所示實(shí)施例中,從上下文存儲(chǔ)器430傳輸?shù)捷敵鼍彌_器700的數(shù)據(jù)被處理器450產(chǎn)生的命令所修改。這些命令包含諸如插入數(shù)據(jù)操作和刪除數(shù)據(jù)操作之類的多種操作,所述插入數(shù)據(jù)操作和刪除數(shù)據(jù)操作分別實(shí)現(xiàn)向所傳輸數(shù)據(jù)的數(shù)據(jù)插入,和從所傳輸數(shù)據(jù)的數(shù)據(jù)刪除。由處理器450生成的命令被保存在命令表500中,該命令表500例如是被配置為包含了一個(gè)或多個(gè)條目的表的數(shù)據(jù)結(jié)構(gòu)。應(yīng)該注意,可以使用其他類型的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)命令表500,例如陣列、鏈表、變量、寄存器或寄存器文件。每個(gè)條目保存一條命令,該命令與對(duì)從上下文存儲(chǔ)器430傳輸?shù)捷敵鼍彌_器700的數(shù)據(jù)執(zhí)行的操作(例如插入數(shù)據(jù)操作或刪除數(shù)據(jù)操作)相關(guān)聯(lián)。
圖5是可以有利地用于本發(fā)明的命令表?xiàng)l目510的示意框圖。條目510包含操作碼(OP_CODE)字段520、上下文存儲(chǔ)器(源)地址(C_ADDR)字段540、長度(LEN)字段560和外部地址(X_ADDR)字段580。OP_CODE字段520保存了與對(duì)被傳輸?shù)臄?shù)據(jù)執(zhí)行的操作(例如插入數(shù)據(jù)、刪除數(shù)據(jù))相關(guān)聯(lián)的值。每個(gè)操作還與開始地址、長度和(可選地)外部地址相關(guān)聯(lián)。C_ADDR字段540保存了一個(gè)地址,該地址代表要對(duì)其執(zhí)行操作520的上下文存儲(chǔ)器中的數(shù)據(jù)的開始地址。LEN字段560保存的值例如代表由操作碼520操作的數(shù)據(jù)字節(jié)的量。X_ADDR字段580保存了一個(gè)地址,該地址與例如插入到被傳輸數(shù)據(jù)中的外部數(shù)據(jù)相關(guān)聯(lián)。
如上所述,在數(shù)據(jù)移動(dòng)器470和輸出緩沖器700之間一次例如傳輸16字節(jié)的數(shù)據(jù)。伴隨該數(shù)據(jù)還有一個(gè)2字節(jié)的位掩碼,該位掩碼與16字節(jié)的數(shù)據(jù)相關(guān)聯(lián),并指出在數(shù)據(jù)中哪些字節(jié)是“有效的”(被使能),哪些字節(jié)是“無效的”(未被使能)。如這里所使用的,如果一個(gè)字節(jié)包含有效的數(shù)據(jù)值,則該字節(jié)是“有效的”,如果該字節(jié)不包含有效的數(shù)據(jù)值(即“未被定義的”數(shù)據(jù)值),則該字節(jié)是“無效的”。應(yīng)該注意,雖然在所示實(shí)施例中位掩碼代表數(shù)據(jù)中的有效和無效字節(jié),但是例如代表被傳輸?shù)臄?shù)據(jù)中的有效或無效位或字的位掩碼也可以利用本發(fā)明的技術(shù)。
圖6是可以有利地用于本發(fā)明的位掩碼600的示意框圖。例如,位掩碼600包含16個(gè)一位的“字節(jié)使能”(BE)字段620a-p,其中每個(gè)字段與數(shù)據(jù)單元中的一個(gè)字節(jié)相關(guān)聯(lián),并包含了指示相關(guān)的數(shù)據(jù)類型是有效還是無效的值。例如,BE0 620a對(duì)應(yīng)于數(shù)據(jù)單元中的位置0中的字節(jié)(字節(jié)0),并指示字節(jié)0包含了有效的字節(jié)值,還是無效的字節(jié)值。例如,若將字段620配置為包含0,則指示相應(yīng)字節(jié)無效。類似地,若將字段620配置為包含1,則指示相應(yīng)字節(jié)有效。
輸出緩沖器700包含接口邏輯710,該接口邏輯710被配置用于獲取從數(shù)據(jù)移動(dòng)器470傳輸?shù)臄?shù)據(jù)和字節(jié)使能信息。圖7是接口邏輯710的部分示意框圖,其包含數(shù)據(jù)操縱(steering)邏輯720、工作寄存器740和輸出隊(duì)列780。數(shù)據(jù)操縱邏輯720包含如下邏輯該邏輯被配置用于將從數(shù)據(jù)移動(dòng)器470獲取的有效數(shù)據(jù)字節(jié)“操縱”(傳輸)到工作寄存器740,該工作寄存器740例如是移位寄存器。輸出隊(duì)列780例如是包含一個(gè)或多個(gè)條目782的先進(jìn)先出(FIFO)隊(duì)列,其中每個(gè)條目保存從工作寄存器740傳輸?shù)挠行?shù)據(jù)。從數(shù)據(jù)移動(dòng)器的接口邏輯472獲取的數(shù)據(jù)和字節(jié)使能信息被傳輸?shù)綌?shù)據(jù)操縱邏輯720,該數(shù)據(jù)操縱邏輯720通過將有效字節(jié)移位到寄存器740中,來操縱包含在數(shù)據(jù)中的有效數(shù)據(jù)字節(jié)以使其進(jìn)入工作寄存器740。然后,數(shù)據(jù)操縱邏輯引導(dǎo)工作寄存器將有效數(shù)據(jù)傳輸?shù)轿挥谳敵鯢IFO隊(duì)列780尾部的條目782中。
本發(fā)明涉及用于修改從中間節(jié)點(diǎn)(例如路由器200)的源(例如上下文存儲(chǔ)器430)傳輸?shù)侥康牡?例如輸出緩沖器700)的數(shù)據(jù)的有效技術(shù)。根據(jù)該技術(shù),包含用于修改數(shù)據(jù)的操作的命令例如由處理器450生成,并被放置在數(shù)據(jù)結(jié)構(gòu)(例如命令表500)中。當(dāng)數(shù)據(jù)從源被傳輸往目的地時(shí),與命令相關(guān)的操作修改數(shù)據(jù),如命令所指出的。
在所示實(shí)施例中,處理器450通過執(zhí)行指令以生成指出被執(zhí)行的修改的命令,來對(duì)從上下文存儲(chǔ)器430傳輸?shù)捷敵鼍彌_器700的數(shù)據(jù)進(jìn)行修改(例如插入數(shù)據(jù)或刪除數(shù)據(jù))。圖8是可以被用于向所傳輸?shù)臄?shù)據(jù)插入數(shù)據(jù)和從所傳輸?shù)臄?shù)據(jù)刪除數(shù)據(jù)的一系列示例性指令800。指令810是上下文存儲(chǔ)器插入數(shù)據(jù)指令(xcmi),該指令使“插入數(shù)據(jù)”被插入到從上下文存儲(chǔ)器430傳輸往輸出緩沖器700的數(shù)據(jù)中。指令810指示一個(gè)操作(即xcmi),該操作指示“插入數(shù)據(jù)”和各種變量/參數(shù),包括將插入的數(shù)據(jù)量(即2字節(jié))、數(shù)據(jù)被插入到的上下文存儲(chǔ)器地址(即110),和插入數(shù)據(jù)的地址(即500)。注意,插入數(shù)據(jù)的地址可以是例如上下文存儲(chǔ)器430、本地存儲(chǔ)器434或外部存儲(chǔ)器340中的地址。指令820是上下文存儲(chǔ)器刪除指令(xcmd),該指令使數(shù)據(jù)被從自上下文存儲(chǔ)器430傳輸往輸出緩沖器700的數(shù)據(jù)中刪除。指令820指示一個(gè)操作(即xcmd),該操作指示“刪除數(shù)據(jù)”、被刪除的數(shù)據(jù)量(即2字節(jié))和被刪除數(shù)據(jù)所在的上下文存儲(chǔ)器地址(即118)。指令830是上下文存儲(chǔ)器發(fā)送指令(xmt),該指令致使數(shù)據(jù)被從上下文存儲(chǔ)器430傳輸往輸出緩沖器700。指令830指示了一個(gè)操作(即xmt),該操作指示發(fā)送數(shù)據(jù)、開始的上下文存儲(chǔ)器地址(即100)和例如以字節(jié)表示的被傳輸?shù)臄?shù)據(jù)量(即64)。
圖9A-9C示出了可以被用于根據(jù)本發(fā)明的技術(shù)來處理指令800的一系列步驟的流程圖。還參考圖8,在步驟910處,處理器450獲取第一指令810,并判斷該指令是否是上下文存儲(chǔ)器插入指令(步驟920)。如果不是,序列則前進(jìn)至步驟930。如上所述,由于該指令是上下文存儲(chǔ)器插入指令,因此序列前進(jìn)至步驟925,在這里,處理器450生成如指令810所指出的向分組插入數(shù)據(jù)的命令,并將該命令放置在命令表?xiàng)l目510中。具體而言,處理器450通過生成代表指令810所指出的操作碼、上下文存儲(chǔ)器地址、長度和插入數(shù)據(jù)地址的值來生成命令。然后,處理器450將這些值分別放置在命令表500的條目510的OP_CODE 520、C_ADDR 540、LEN 560和X_ADDR 580字段中。
然后序列前進(jìn)至步驟942,在這里,獲取下一指令,然后返回到步驟920。假設(shè)指令820是下一指令。在步驟920處,執(zhí)行檢查以判斷指令820是否是上下文存儲(chǔ)器插入指令。由于指令820不是上下文存儲(chǔ)器插入指令,因此序列前進(jìn)至步驟930,在這里,執(zhí)行檢查以判斷指令820是否是上下文存儲(chǔ)器刪除指令。
如上所述,由于指令820是上下文存儲(chǔ)器刪除指令,因此序列前進(jìn)至步驟935,在這里,處理器450生成如指令820所指出的那樣用于從分組中刪除數(shù)據(jù)的命令,并將該命令放置在命令表?xiàng)l目510中。具體而言,處理器450通過生成代表由指令820指出的操作碼、上下文存儲(chǔ)器地址和長度的值來生成命令。然后,處理器450將這些值分別放置在命令表500的條目510的OP_CODE 520、C_ADDR 540和LEN 560字段中。
然后序列前進(jìn)至步驟942,在這里,獲取下一指令,然后再次返回到步驟920。假設(shè)指令830是下一指令。如上所述,在步驟920處,執(zhí)行檢查以判斷指令830是否是上下文存儲(chǔ)器插入指令。由于指令830不是上下文存儲(chǔ)器插入指令,因此序列前進(jìn)至步驟930,在這里,執(zhí)行檢查以判斷指令830是否是上下文存儲(chǔ)器刪除指令。由于指令830不是上下文存儲(chǔ)器刪除指令,因此序列前進(jìn)至步驟940,在這里執(zhí)行檢查以判斷指令830是否是上下文存儲(chǔ)器發(fā)送指令。如上所述,由于指令830是上下文存儲(chǔ)器發(fā)送指令,因此序列前進(jìn)至步驟945(圖9B),在這里,處理器450指導(dǎo)數(shù)據(jù)移動(dòng)器470將數(shù)據(jù)從上下文存儲(chǔ)器430傳輸?shù)捷敵鼍彌_器700。具體而言,處理器450指導(dǎo)數(shù)據(jù)移動(dòng)器470將來自數(shù)據(jù)移動(dòng)器470的開始于上下文存儲(chǔ)器位置100的64字節(jié)的數(shù)據(jù)傳輸?shù)捷敵鼍彌_器700。在步驟947處,數(shù)據(jù)移動(dòng)器470從開始于地址100的上下文存儲(chǔ)器中獲取16字節(jié)的數(shù)據(jù)。
在步驟950處,數(shù)據(jù)移動(dòng)器470搜索命令表500,以在命令表中找到與已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配的條目510。如果由C_ADDR字段540和LEN字段560的內(nèi)容組合所指定的一系列地址與已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相重疊,則條目510與已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配。例如,與已獲取的數(shù)據(jù)相關(guān)聯(lián)的一系列地址包括范圍100-115中的上下文存儲(chǔ)器地址。由指令810指定的一系列地址與該范圍重疊;因此,與指令810相關(guān)聯(lián)的條目510是匹配條目。在步驟955處,如果未找到匹配條目,數(shù)據(jù)移動(dòng)器470則假設(shè)已獲取的數(shù)據(jù)不被修改,并且序列前進(jìn)至步驟960,在這里,生成如上所述的用于已獲取的數(shù)據(jù)的位掩碼,并且將位掩碼和數(shù)據(jù)傳輸?shù)捷敵鼍彌_器。否則,如果找到了匹配條目,則序列前進(jìn)至步驟965。假設(shè)找到了與指令810相關(guān)聯(lián)的匹配條目510。
在步驟965處,匹配條目的OP_CODE字段520的內(nèi)容被檢查以判斷它是否代表“刪除數(shù)據(jù)”操作。如果是,則序列前進(jìn)至步驟970;否則,序列前進(jìn)至步驟975(圖9C)。如上所述,匹配條目510中的OP_CODE字段520的內(nèi)容指示插入數(shù)據(jù)操作;因此,序例前進(jìn)至步驟975。
在步驟975處,數(shù)據(jù)移動(dòng)器470生成用于已獲取的上下文存儲(chǔ)器數(shù)據(jù)中的“引導(dǎo)數(shù)據(jù)”的位掩碼600,并將已獲取的數(shù)據(jù)和位掩碼600傳輸?shù)捷敵鼍彌_器700。如這里所使用的,引導(dǎo)數(shù)據(jù)指的是在已獲取的上下文存儲(chǔ)器數(shù)據(jù)中位于被插入的數(shù)據(jù)之前的數(shù)據(jù)。例如,如上所述,由已獲取的上下文存儲(chǔ)器數(shù)據(jù)所代表的地址范圍從100到115,并且匹配條目的C_ADDR值是110。因此,引導(dǎo)數(shù)據(jù)包括從上下文存儲(chǔ)器地址位置100到109中獲取的有效數(shù)據(jù)字節(jié)。數(shù)據(jù)移動(dòng)器470通過以下方式來生成用于引導(dǎo)數(shù)據(jù)的位掩碼將掩碼600中代表字節(jié)位置100到109的那些位(即BE0 620a到BE9 620j)標(biāo)記為指示數(shù)據(jù)有效,并將掩碼600中的剩余位(即BE10 620k到BE15 620p)標(biāo)記為指示剩余數(shù)據(jù)無效(由于它與引導(dǎo)數(shù)據(jù)相關(guān))。如上所述,數(shù)據(jù)移動(dòng)器470然后將已獲取的數(shù)據(jù)與位掩碼600一道傳輸?shù)捷敵鼍彌_器邏輯700,輸出緩沖器700處理數(shù)據(jù)和位掩碼。
在步驟977處,數(shù)據(jù)移動(dòng)器470獲取“插入數(shù)據(jù)”,即被插入到從上下文存儲(chǔ)器430傳輸?shù)捷敵鼍彌_器700的數(shù)據(jù)流中的數(shù)據(jù)。在步驟980處,數(shù)據(jù)移動(dòng)器470生成用于已獲取的插入數(shù)據(jù)的位掩碼600,并將已獲取的插入數(shù)據(jù)和位掩碼600傳輸?shù)捷敵鼍彌_器700。具體而言,數(shù)據(jù)移動(dòng)器470獲取匹配條目510的LEN字段560和X_ADDR字段580的內(nèi)容。然后,數(shù)據(jù)移動(dòng)器獲取從匹配條目的X_ADDR字段580所指定的地址開始的例如16字節(jié)的插入數(shù)據(jù),或者由LEN字段560的內(nèi)容所代表的字節(jié)數(shù)目的插入數(shù)據(jù),以兩者中較小的字節(jié)數(shù)目為準(zhǔn)。然后,如上所述,數(shù)據(jù)移動(dòng)器470生成用于已獲取的插入數(shù)據(jù)的位掩碼600。插入數(shù)據(jù)和位掩碼600然后被傳輸?shù)捷敵鼍彌_器700,在輸出緩沖器700中它們被進(jìn)一步處理。
例如在與指令810相關(guān)聯(lián)的匹配條目510中,LEN字段560包含指示兩個(gè)字節(jié)的插入數(shù)據(jù)的值。數(shù)據(jù)移動(dòng)器470從由X_ADDR字段580指定的位置(即500)獲取兩字節(jié)的插入數(shù)據(jù)。然后通過以下方式來生成位掩碼600將對(duì)應(yīng)于例如字節(jié)0和1的字節(jié)使能位(BE0 620a和BE1 620b)標(biāo)記為指示它們是有效的,將剩余位(即BE2 620c到BE15 620p)標(biāo)記為指示它們是無效的。然后插入數(shù)據(jù)被放置在與所生成的位掩碼600一道傳輸?shù)捷敵鼍彌_器700的16字節(jié)數(shù)據(jù)單元中的字節(jié)位置0和1。
在步驟982處,數(shù)據(jù)移動(dòng)器470判斷由匹配條目的LEN字段560指出的所有插入數(shù)據(jù)是否都已被傳輸。如果不是,序列則前進(jìn)至步驟984,在這里,獲取下一插入數(shù)據(jù)。步驟980到984被重復(fù),直到由匹配條目的X_ADDR字段580和LEN字段560的內(nèi)容組合所代表的所有插入數(shù)據(jù)都已被傳輸?shù)捷敵鼍彌_器700為止。
然后序列前進(jìn)至步驟985,在這里,數(shù)據(jù)移動(dòng)器470以與上述相同的方式生成代表后續(xù)數(shù)據(jù)的位掩碼600,并將已獲取的上下文存儲(chǔ)器數(shù)據(jù)和生成的位掩碼600傳輸?shù)捷敵鼍彌_器700。如這里所使用的,后續(xù)數(shù)據(jù)是已獲取的上下文存儲(chǔ)器數(shù)據(jù)中未在步驟975處作為引導(dǎo)數(shù)據(jù)被傳輸?shù)挠行?shù)據(jù)。例如,如上所述,引導(dǎo)數(shù)據(jù)包含已獲取的上下文存儲(chǔ)器數(shù)據(jù)中的字節(jié)0到9。在已獲取的上下文存儲(chǔ)器數(shù)據(jù)中的剩余有效數(shù)據(jù)(即字節(jié)10到15)構(gòu)成后續(xù)數(shù)據(jù)。因此,數(shù)據(jù)移動(dòng)器470通過以下方式生成用于代表后續(xù)數(shù)據(jù)的位掩碼600在位掩碼中指示字節(jié)0到9包含無效數(shù)據(jù),而字節(jié)10到15包含有效數(shù)據(jù)。已生成的位掩碼600和已獲取的上下文存儲(chǔ)器數(shù)據(jù)然后被傳輸?shù)捷敵鼍彌_器700。
然后,序列前進(jìn)至步驟990(圖9B),在這里數(shù)據(jù)移動(dòng)器470判斷由發(fā)送指令830指定的數(shù)據(jù)量是否已被發(fā)送。如果是,序列則前進(jìn)至步驟994;否則,序列前進(jìn)至步驟992,在這里,獲取下一上下文存儲(chǔ)器數(shù)據(jù),然后返回到步驟950。由于發(fā)送指令830指定64字節(jié)而只有18字節(jié)已被傳輸(即10字節(jié)的引導(dǎo)數(shù)據(jù)、2字節(jié)的插入數(shù)據(jù)和6字節(jié)的后續(xù)數(shù)據(jù)),因此數(shù)據(jù)移動(dòng)器470獲取接下來的16字節(jié)的上下文存儲(chǔ)器數(shù)據(jù),并前進(jìn)至步驟950。
如上所述,在步驟950處,數(shù)據(jù)移動(dòng)器470搜索命令表,并定位到包含由指令820指出的信息的匹配條目500(步驟955)。然后,序列前進(jìn)至步驟965,在這里,數(shù)據(jù)移動(dòng)器470檢查匹配條目的OP_CODE字段520以判斷它是否指定了刪除操作。如上所述,OP_CODE字段520包含指示刪除操作的值,因此序列前進(jìn)至步驟970,在這里,數(shù)據(jù)移動(dòng)器470以與上述相同的方式生成代表被刪除數(shù)據(jù)的位掩碼600。然后,數(shù)據(jù)移動(dòng)器470將位掩碼600和已獲取的數(shù)據(jù)傳輸?shù)捷敵鼍彌_器。具體而言,數(shù)據(jù)移動(dòng)器470檢查匹配條目500的C_ADDR字段540和LEN字段560的內(nèi)容,并且確定已獲取的上下文存儲(chǔ)器數(shù)據(jù)中被刪除的字節(jié)。然后,如上所述,數(shù)據(jù)移動(dòng)器470生成位掩碼600,該位掩碼600將與被刪除字節(jié)相對(duì)應(yīng)的位標(biāo)記為無效。
例如,假設(shè)已獲取的上下文存儲(chǔ)器數(shù)據(jù)與上下文存儲(chǔ)器地址位置116到131相關(guān)聯(lián),并且在命令表500中找到的匹配條目510包含由指令820指定的信息。數(shù)據(jù)移動(dòng)器470生成位掩碼600,其中位BE2 620c和位BE3 620d被標(biāo)記為指示由這些位所代表的數(shù)據(jù)是無效的。數(shù)據(jù)移動(dòng)器470將剩余位(即BE0 620a、BE1 620b和BE4 620e到BE15 620p)標(biāo)記為指示由這些位代表的數(shù)據(jù)是有效的。然后,所生成的位掩碼600和已獲取的上下文存儲(chǔ)器數(shù)據(jù)被傳輸?shù)捷敵鼍彌_器700,在輸出緩沖器700中它們被進(jìn)一步處理。
步驟950到992重復(fù),直到在上下文存儲(chǔ)器發(fā)送指令中指定的所有數(shù)據(jù)都已被傳輸為止。然后,序列前進(jìn)至步驟994,在這里,命令表中的條目510被清除,然后到達(dá)步驟995,在這里序列結(jié)束。
圖10是可以被用于配置狀態(tài)機(jī)474以根據(jù)本發(fā)明的技術(shù)進(jìn)行操作的狀態(tài)圖1000。狀態(tài)機(jī)474開始于“空閑”狀態(tài)1010。處理器450執(zhí)行上下文存儲(chǔ)器發(fā)送指令,并指導(dǎo)數(shù)據(jù)移動(dòng)器470從上下文存儲(chǔ)器向輸出緩沖器傳輸數(shù)據(jù),如上所述。狀態(tài)機(jī)474從“空閑”狀態(tài)1010前進(jìn)至“獲取上下文數(shù)據(jù)和搜索命令表”狀態(tài)1020。在狀態(tài)1020處,狀態(tài)機(jī)474指導(dǎo)數(shù)據(jù)移動(dòng)器470從上下文存儲(chǔ)器430獲取上下文存儲(chǔ)器數(shù)據(jù)(例如16數(shù)據(jù)字節(jié))。然后,狀態(tài)機(jī)474搜索命令表500,并判斷是否已獲取的上下文存儲(chǔ)器數(shù)據(jù)中的任意一個(gè)的地址落入由命令表500的匹配條目510中的C_ADDR 540和LEN 560字段的內(nèi)容組合所代表的一系列地址內(nèi)。如果不是,狀態(tài)機(jī)474則前進(jìn)至“生成位掩碼”狀態(tài)1030,在這里,它生成用于已獲取數(shù)據(jù)的位掩碼600,如上所述。然后,狀態(tài)機(jī)474將數(shù)據(jù)和生成的位掩碼傳輸?shù)捷敵鼍彌_器,并且返回到“獲取上下文數(shù)據(jù)和搜索命令表”狀態(tài)1020。
如果已獲取的上下文存儲(chǔ)器數(shù)據(jù)中的任意一個(gè)的地址落入由匹配條目510中的C_ADDR 540和LEN 560字段的內(nèi)容組合所代表的一系列地址內(nèi),狀態(tài)機(jī)474則前進(jìn)至“檢查匹配條目的OP_CODE”狀態(tài)1040,在這里,數(shù)據(jù)移動(dòng)器470檢查匹配條目510的OP_CODE字段520。如果OP_CODE字段520包含指示“刪除數(shù)據(jù)”操作的值,狀態(tài)機(jī)474則前進(jìn)至“生成刪除數(shù)據(jù)位掩碼”狀態(tài)1050,在這里,生成代表被刪除的數(shù)據(jù)的位掩碼600,如上所述。然后,數(shù)據(jù)和生成的位掩碼被傳輸?shù)捷敵鼍彌_器700,狀態(tài)機(jī)474返回到“獲取上下文數(shù)據(jù)和搜索命令表”狀態(tài)1020。
如果OP_CODE字段520包含指示“插入數(shù)據(jù)”操作的值,狀態(tài)機(jī)474則前進(jìn)至“生成引導(dǎo)數(shù)據(jù)位掩碼”狀態(tài)1060,在這里,生成引導(dǎo)數(shù)據(jù)位掩碼600,如上所述。然后,數(shù)據(jù)和生成的位掩碼被傳輸?shù)捷敵鼍彌_器700,并且狀態(tài)機(jī)474前進(jìn)至“獲取插入數(shù)據(jù),生成插入數(shù)據(jù)使能位掩碼,并將數(shù)據(jù)和位掩碼傳輸?shù)捷敵鼍彌_器”狀態(tài)1070,在這里,獲取插入數(shù)據(jù),生成插入位掩碼600,并且將已獲取的插入數(shù)據(jù)和相關(guān)位掩碼600傳輸?shù)捷敵鼍彌_器700,如上所述。狀態(tài)機(jī)474返回該狀態(tài)1070,直到所有插入數(shù)據(jù)(由匹配條目510中的LEN字段560所指定的)都已被傳輸為止。然后,狀態(tài)機(jī)474前進(jìn)至“生成后續(xù)數(shù)據(jù)位掩碼”狀態(tài)1080,在這里,生成用于“后續(xù)數(shù)據(jù)”的位掩碼600,如上所述。生成的位掩碼600和后續(xù)數(shù)據(jù)隨后被傳輸?shù)捷敵鼍彌_器700,并且狀態(tài)機(jī)474返回到“獲取上下文數(shù)據(jù)和搜索命令表”狀態(tài)1020。在由發(fā)送指令指定的所有數(shù)據(jù)都已被傳輸之后,狀態(tài)機(jī)474返回到“空閑”狀態(tài)1010。
雖然本發(fā)明的上述實(shí)施例將本發(fā)明描述為使用各種硬件設(shè)備來實(shí)現(xiàn),但是不希望這是對(duì)本發(fā)明的限制。相反,本發(fā)明可以全部或部分以軟件形式來實(shí)現(xiàn),所述軟件被存儲(chǔ)為包含用于在處理器中執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),例如動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器(DRAM)或盤。例如,命令表可以作為軟件數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn),例如表、鏈表、數(shù)組、變量、寄存器或寄存器文件。此外,在命令表中放置命令的過程,以及由包括狀態(tài)機(jī)的數(shù)據(jù)移動(dòng)器所執(zhí)行的功能都可以作為軟件例程或函數(shù)來實(shí)現(xiàn)。
還應(yīng)注意,雖然本發(fā)明的上述實(shí)施例采用本發(fā)明的技術(shù)來修改從上下文存儲(chǔ)器傳輸?shù)捷敵鼍彌_器的數(shù)據(jù),但是在本發(fā)明的其他實(shí)施例中,本發(fā)明的技術(shù)被用于變形(修改)從源傳輸?shù)侥康牡氐臄?shù)據(jù)。例如,在本發(fā)明的一個(gè)實(shí)施例中,本發(fā)明的技術(shù)被用于修改從諸如網(wǎng)絡(luò)上的節(jié)點(diǎn)之類的源獲取,并被傳輸?shù)街T如連接到網(wǎng)絡(luò)的存儲(chǔ)設(shè)備之類的目的地的數(shù)據(jù)(例如插入數(shù)據(jù)、刪除數(shù)據(jù))。此外,應(yīng)該理解,本發(fā)明的技術(shù)可以被用于以除了向所傳輸?shù)臄?shù)據(jù)插入數(shù)據(jù)和從所傳輸?shù)臄?shù)據(jù)刪除數(shù)據(jù)之外的方式來變形(修改)從源傳輸?shù)侥康牡氐臄?shù)據(jù)。例如,本發(fā)明的技術(shù)可以被應(yīng)用于加密從源傳輸?shù)侥康牡氐臄?shù)據(jù)。
上述描述已針對(duì)本發(fā)明的特定實(shí)施例。將會(huì)意識(shí)到,可以對(duì)所描述的實(shí)施例執(zhí)行其他變化和修改,以達(dá)到其優(yōu)點(diǎn)中的一些或全部。因此,所附權(quán)利要求書將覆蓋落入本發(fā)明真實(shí)精神和范圍內(nèi)的全部此類變化和修改。
權(quán)利要求
1.一種用于修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)的方法,該方法包括以下步驟生成一個(gè)或多個(gè)命令,其中每個(gè)命令與一個(gè)用于修改所述數(shù)據(jù)的操作相關(guān)聯(lián);將所述命令放置在數(shù)據(jù)結(jié)構(gòu)中;以及當(dāng)所述數(shù)據(jù)被從所述源傳輸往所述目的地時(shí),執(zhí)行與包含在所述數(shù)據(jù)結(jié)構(gòu)中的命令相關(guān)聯(lián)的所述操作,以按照所述命令的指導(dǎo)修改所述數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,還包括以下步驟從所述源獲取所述數(shù)據(jù)。
3.如權(quán)利要求2所述的方法,還包括以下步驟生成與已獲取的數(shù)據(jù)相關(guān)聯(lián)的位掩碼;以及將所述位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
4.如權(quán)利要求2所述的方法,其中所述數(shù)據(jù)結(jié)構(gòu)包括一個(gè)或多個(gè)條目,其中每個(gè)條目與一個(gè)命令相關(guān)聯(lián),并且所述條目包含與一系列地址和一個(gè)操作碼相關(guān)聯(lián)的信息,所述一系列地址和一個(gè)操作碼與所述命令相關(guān)聯(lián)。
5.如權(quán)利要求4所述的方法,還包括以下步驟搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配;如果找到匹配條目,則判斷包含在所述匹配條目中的操作碼是否指示刪除數(shù)據(jù)操作;以及如果是指示刪除數(shù)據(jù)操作,則生成代表在所述已獲取的數(shù)據(jù)中被刪除的數(shù)據(jù)的刪除位掩碼,并將所述刪除位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
6.如權(quán)利要求4所述的方法,還包括以下步驟搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配;如果找到匹配條目,則判斷包含在所述匹配條目中的操作碼是否指示插入數(shù)據(jù)操作;并且如果是指示插入數(shù)據(jù)操作,則a)生成代表包含在所述已獲取的數(shù)據(jù)中的引導(dǎo)數(shù)據(jù)的引導(dǎo)位掩碼,b)將所述引導(dǎo)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡兀琧)獲取插入數(shù)據(jù),d)生成代表所述插入數(shù)據(jù)的插入數(shù)據(jù)位掩碼,e)將所述插入數(shù)據(jù)位掩碼和所述插入數(shù)據(jù)傳輸?shù)剿瞿康牡?,f)生成代表包含在所述已獲取的數(shù)據(jù)中的后續(xù)數(shù)據(jù)的后續(xù)位掩碼,并且g)將所述后續(xù)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
7.如權(quán)利要求4所述的方法,其中每個(gè)條目包含與所述命令相關(guān)聯(lián)的長度和源地址。
8.如權(quán)利要求7所述的方法,還包括以下步驟搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址是由包含在與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配的條目中的長度和源地址的組合所指定的。
9.如權(quán)利要求1所述的方法,其中所述數(shù)據(jù)結(jié)構(gòu)是表。
10.如權(quán)利要求1所述的方法,還包括以下步驟清空所述數(shù)據(jù)結(jié)構(gòu)。
11.如權(quán)利要求1所述的方法,其中所述源是上下文存儲(chǔ)器。
12.如權(quán)利要求1所述的方法,其中所述目的地是輸出緩沖器。
13.一種系統(tǒng),包括被配置用于保存數(shù)據(jù)的上下文存儲(chǔ)器;被配置用于保存一個(gè)或多個(gè)命令的數(shù)據(jù)結(jié)構(gòu);處理器,該處理器被配置用于生成用于修改所述數(shù)據(jù)的一個(gè)或多個(gè)命令,并將所述命令放置在所述數(shù)據(jù)結(jié)構(gòu)中;輸出緩沖器;以及耦合到所述上下文存儲(chǔ)器和所述輸出緩沖器的數(shù)據(jù)移動(dòng)器,該數(shù)據(jù)移動(dòng)器被配置用于從所述上下文存儲(chǔ)器獲取所述數(shù)據(jù),按照包含在所述數(shù)據(jù)結(jié)構(gòu)中的命令的指導(dǎo)修改所述數(shù)據(jù),并將修改后的數(shù)據(jù)傳輸?shù)剿鲚敵鼍彌_器。
14.如權(quán)利要求13所述的系統(tǒng),其中所述數(shù)據(jù)結(jié)構(gòu)是表。
15.如權(quán)利要求13所述的系統(tǒng),其中所述數(shù)據(jù)結(jié)構(gòu)包含一個(gè)或多個(gè)條目,其中每個(gè)條目與一個(gè)命令相關(guān)聯(lián),并且所述條目包含與一系列地址和一個(gè)操作碼相關(guān)聯(lián)的信息,所述一系列地址和一個(gè)操作碼與所述命令相關(guān)聯(lián)。
16.如權(quán)利要求15所述的系統(tǒng),其中所述數(shù)據(jù)移動(dòng)器被配置用于搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配,并且如果找到匹配條目,則判斷包含在所述匹配條目中的操作碼是否指示刪除數(shù)據(jù)操作,如果是指示刪除數(shù)據(jù)操作,則生成代表在所述已獲取的數(shù)據(jù)中被刪除的數(shù)據(jù)的刪除位掩碼。
17.如權(quán)利要求15所述的系統(tǒng),其中所述數(shù)據(jù)移動(dòng)器被配置用于搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配,并且如果找到匹配條目,則判斷包含在所述匹配條目中的操作碼是否指示插入數(shù)據(jù)操作,如果是指示插入數(shù)據(jù)操作,則(i)生成代表包含在所述已獲取的數(shù)據(jù)中的引導(dǎo)數(shù)據(jù)的引導(dǎo)位掩碼,(ii)將所述引導(dǎo)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡兀?iii)獲取插入數(shù)據(jù),(iv)生成代表所述插入數(shù)據(jù)的插入數(shù)據(jù)位掩碼,(v)將所述插入數(shù)據(jù)位掩碼和所述插入數(shù)據(jù)傳輸?shù)剿瞿康牡兀?vi)生成代表包含在所述已獲取的數(shù)據(jù)中的后續(xù)數(shù)據(jù)的后續(xù)位掩碼,并且(vii)將所述后續(xù)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
18.如權(quán)利要求15所述的系統(tǒng),其中所述數(shù)據(jù)結(jié)構(gòu)中的每個(gè)條目都包含與所述命令相關(guān)聯(lián)的長度和源地址。
19.如權(quán)利要求18所述的系統(tǒng),其中所述數(shù)據(jù)移動(dòng)器被配置用于搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址是由包含在與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配的條目中的長度和源地址的組合所指定的。
20.如權(quán)利要求13所述的系統(tǒng),其中所述數(shù)據(jù)移動(dòng)器被配置用于生成與所述數(shù)據(jù)相關(guān)聯(lián)的位掩碼,并將所述位掩碼傳輸?shù)剿鲚敵鼍彌_器。
21.如權(quán)利要求20所述的系統(tǒng),其中所述輸出緩沖器包含數(shù)據(jù)操縱邏輯,該數(shù)據(jù)操縱邏輯被配置用于使用所述位掩碼來標(biāo)識(shí)包含在所述被傳輸?shù)臄?shù)據(jù)中的有效數(shù)據(jù);耦合到所述數(shù)據(jù)操縱邏輯的工作寄存器,該工作寄存器被配置用于保存從所述數(shù)據(jù)操縱邏輯傳輸?shù)挠行?shù)據(jù);以及耦合到所述工作寄存器的輸出隊(duì)列,該輸出隊(duì)列被配置用于保存從所述工作寄存器傳輸?shù)挠行?shù)據(jù)。
22.一種用于修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)的裝置,所述裝置包括用于生成一個(gè)或多個(gè)命令的裝置,其中每個(gè)命令與一個(gè)用于修改所述數(shù)據(jù)的操作相關(guān)聯(lián);用于將所述命令放置在數(shù)據(jù)結(jié)構(gòu)中的裝置;以及用于當(dāng)所述數(shù)據(jù)被從所述源傳輸往所述目的地時(shí),執(zhí)行與包含在所述數(shù)據(jù)結(jié)構(gòu)中的命令相關(guān)聯(lián)的所述操作,以按照所述命令的指導(dǎo)修改所述數(shù)據(jù)的裝置。
23.如權(quán)利要求22所述的裝置,包括用于從所述源獲取所述數(shù)據(jù)的裝置。
24.如權(quán)利要求23所述的裝置,包括用于生成與已獲取的數(shù)據(jù)相關(guān)聯(lián)的位掩碼的裝置;以及將所述位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
25.如權(quán)利要求23所述的裝置,其中所述數(shù)據(jù)結(jié)構(gòu)包括一個(gè)或多個(gè)條目,其中每個(gè)條目與一個(gè)命令相關(guān)聯(lián),并且所述條目包含與一系列地址和一個(gè)操作碼相關(guān)聯(lián)的信息,所述一系列地址和一個(gè)操作碼與所述命令相關(guān)聯(lián)。
26.如權(quán)利要求25所述的裝置,包括用于搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目的裝置所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配;用于判斷包含在所述匹配條目中的操作碼是否指示刪除數(shù)據(jù)操作的裝置;以及用于如果所述匹配條目中的操作碼指示刪除數(shù)據(jù)操作,則生成代表在所述已獲取的數(shù)據(jù)中被刪除的數(shù)據(jù)的刪除位掩碼,并將所述刪除位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡氐难b置。
27.如權(quán)利要求25所述的裝置,包括用于搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目的裝置所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配;用于判斷包含在匹配條目中的操作碼是否指示插入數(shù)據(jù)操作的裝置;以及用于如果所述操作碼指示插入數(shù)據(jù)操作,則(i)生成代表包含在所述已獲取的數(shù)據(jù)中的引導(dǎo)數(shù)據(jù)的引導(dǎo)位掩碼,(ii)將所述引導(dǎo)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡兀?iii)獲取插入數(shù)據(jù),(iv)生成代表所述插入數(shù)據(jù)的插入數(shù)據(jù)位掩碼,(v)將所述插入數(shù)據(jù)位掩碼和所述插入數(shù)據(jù)傳輸?shù)剿瞿康牡兀?vi)生成代表包含在所述已獲取的數(shù)據(jù)中的后續(xù)數(shù)據(jù)的后續(xù)位掩碼,并且(vii)將所述后續(xù)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡氐难b置。
28.一種包含計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述指令用于在處理器中執(zhí)行以下操作生成一個(gè)或多個(gè)命令,其中每個(gè)命令與一個(gè)用于修改數(shù)據(jù)的操作相關(guān)聯(lián);將所述命令放置在數(shù)據(jù)結(jié)構(gòu)中;以及當(dāng)所述數(shù)據(jù)被從所述源傳輸往所述目的地時(shí),執(zhí)行與包含在所述數(shù)據(jù)結(jié)構(gòu)中的命令相關(guān)聯(lián)的所述操作,以按照所述命令的指導(dǎo)修改所述數(shù)據(jù)。
29.如權(quán)利要求28所述的計(jì)算機(jī)可讀介質(zhì),包括用于在處理器中執(zhí)行以下操作的計(jì)算機(jī)可執(zhí)行指令從所述源獲取所述數(shù)據(jù)。
30.如權(quán)利要求29所述的計(jì)算機(jī)可讀介質(zhì),包括用于在處理器中執(zhí)行以下操作的計(jì)算機(jī)可執(zhí)行指令生成與已獲取的數(shù)據(jù)相關(guān)聯(lián)的位掩碼;以及將所述位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
31.如權(quán)利要求29所述的計(jì)算機(jī)可讀介質(zhì),其中所述數(shù)據(jù)結(jié)構(gòu)包括一個(gè)或多個(gè)條目,其中每個(gè)條目與一個(gè)命令相關(guān)聯(lián),并且所述條目包含與一系列地址和一個(gè)操作碼相關(guān)聯(lián)的信息,所述一系列地址和一個(gè)操作碼與所述命令相關(guān)聯(lián)。
32.如權(quán)利要求31所述的計(jì)算機(jī)可讀介質(zhì),包括用于在處理器中執(zhí)行以下操作的計(jì)算機(jī)可執(zhí)行指令搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配;如果找到匹配條目,則判斷包含在所述匹配條目中的操作碼是否指示刪除數(shù)據(jù)操作;以及如果是指示刪除數(shù)據(jù)操作,則生成代表在所述已獲取的數(shù)據(jù)中被刪除的數(shù)據(jù)的刪除位掩碼,并將所述刪除位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
33.如權(quán)利要求31所述的計(jì)算機(jī)可讀介質(zhì),包括用于在處理器中執(zhí)行以下操作的計(jì)算機(jī)可執(zhí)行指令搜索所述數(shù)據(jù)結(jié)構(gòu)以找到包含與如下的一系列地址相關(guān)聯(lián)的信息的條目所述的一系列地址與所述已獲取的數(shù)據(jù)所關(guān)聯(lián)的一系列地址相匹配;如果找到匹配條目,則判斷包含在所述匹配條目中的操作碼是否指示插入數(shù)據(jù)操作;并且如果是指示插入數(shù)據(jù)操作,則a)生成代表包含在所述已獲取的數(shù)據(jù)中的引導(dǎo)數(shù)據(jù)的引導(dǎo)位掩碼,b)將所述引導(dǎo)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡?,c)獲取插入數(shù)據(jù),d)生成代表所述插入數(shù)據(jù)的插入數(shù)據(jù)位掩碼,e)將所述插入數(shù)據(jù)位掩碼和所述插入數(shù)據(jù)傳輸?shù)剿瞿康牡?,f)生成代表包含在所述已獲取的數(shù)據(jù)中的后續(xù)數(shù)據(jù)的后續(xù)位掩碼,并且g)所述后續(xù)位掩碼和所述已獲取的數(shù)據(jù)傳輸?shù)剿瞿康牡亍?br>
全文摘要
一種技術(shù)在網(wǎng)絡(luò)中的中間節(jié)點(diǎn)上修改從源傳輸?shù)侥康牡氐臄?shù)據(jù)。根據(jù)該技術(shù),節(jié)點(diǎn)的處理器發(fā)布用于修改數(shù)據(jù)的命令。這些命令被保存在數(shù)據(jù)結(jié)構(gòu)中,并且當(dāng)數(shù)據(jù)被從源傳輸往目的地時(shí)才執(zhí)行這些命令。當(dāng)數(shù)據(jù)被傳輸時(shí),包含在數(shù)據(jù)結(jié)構(gòu)中的命令被執(zhí)行,并且按照命令的指導(dǎo)修改數(shù)據(jù)。
文檔編號(hào)H04L29/06GK1781293SQ200480011280
公開日2006年5月31日 申請(qǐng)日期2004年6月23日 優(yōu)先權(quán)日2003年6月25日
發(fā)明者約翰·W·馬歇爾, 威納亞克·K·帕若姆施瓦若, 杰弗里·B·斯科特 申請(qǐng)人:思科技術(shù)公司