專利名稱:路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)屬于下一代互聯(lián)網(wǎng)IPv6高性能 核心路由器技術(shù)領(lǐng)域。
背景技術(shù):
IPv6協(xié)議解決了 IPv4協(xié)議地址枯竭、安全性不足以及移動性差等問題。從IPv4 過渡到IPv6是一個漸進(jìn)而漫長的過程,兩者將共存相當(dāng)長時間。隨著IPv6的大規(guī)模發(fā) 展,出現(xiàn)純IPv6主干網(wǎng)絡(luò),IPv6上引入大量業(yè)務(wù)。因為IPv6與IPv4協(xié)議的不兼容性, 已有的網(wǎng)絡(luò)用戶遷移到純IPv6網(wǎng)絡(luò)后,將無法與資源豐富的IPv4網(wǎng)絡(luò)互聯(lián)。這使得原 IPv4網(wǎng)絡(luò)的用戶和資源遷移到IPv6網(wǎng)絡(luò)的過程十分緩慢,導(dǎo)致已建成的純IPv6網(wǎng)絡(luò)使 用率不高。為了推動IPv4-IPv6網(wǎng)絡(luò)的過渡,急需一種可以實現(xiàn)IPv4和IPv6網(wǎng)絡(luò)互訪, IPv4數(shù)據(jù)包經(jīng)IPv6網(wǎng)絡(luò)傳輸?shù)乃淼兰夹g(shù)或者協(xié)議轉(zhuǎn)換技術(shù)。 目前采用IPv4協(xié)議封裝IPv6報文的隧道技術(shù)應(yīng)用較廣,也較成熟,而IPv6協(xié)議 封裝IPv4報文的隧道技術(shù)則不夠成熟,目前采用IPv6頭封裝IPv4報文的隧道技術(shù)還沒有 統(tǒng)一的國際標(biāo)準(zhǔn),市場上一些采用IPv6頭封裝IPv4報文的隧道技術(shù)大部分是用軟件實現(xiàn) 的,封裝的體系結(jié)構(gòu)各不相同,速度低,不能滿足高速網(wǎng)絡(luò)的實際應(yīng)用需要。
本發(fā)明實現(xiàn)路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā),解決IPv4網(wǎng)絡(luò)通過純 IPv6主干網(wǎng)絡(luò)實現(xiàn)互聯(lián)的問題,方法簡單、高效,達(dá)到3.2Gbit/s的封裝和轉(zhuǎn)發(fā)速度。
FPGA(Field Programmable Gate Array)是上世紀(jì)80年代末開始使用的大規(guī)??删?程數(shù)字集成電路器件。它充分利用計算機輔助設(shè)計技術(shù)進(jìn)行器件的開發(fā)與應(yīng)用。用戶借 助于計算機不僅能自行設(shè)計專用集成電路芯片,還可在計算機上進(jìn)行功能仿真和實時仿 真,及時發(fā)現(xiàn)問題,調(diào)整電路,改進(jìn)設(shè)計方案。這樣,設(shè)計者不必動手搭接電路、調(diào)試 驗證,只須在計算機上操作很短的時間,即可設(shè)計出與實際系統(tǒng)相差無幾的理想電路。 而且,F(xiàn)PGA器件采用標(biāo)準(zhǔn)化結(jié)構(gòu),體積小、集成度高、功耗低、速度快,可無限次反復(fù) 編程,因此,成為科研產(chǎn)品開發(fā)及其小型化的首選器件,其應(yīng)用極為廣泛。
CAM(ContentAddressable Memory)是一種特殊的存儲器,它將輸入數(shù)據(jù)與CAM 中存儲的所有數(shù)據(jù)項同時進(jìn)行并行比較,迅速判斷輸入數(shù)據(jù)是否與CAM中存儲的數(shù)據(jù)項 匹配,并給出數(shù)據(jù)項對應(yīng)地址和匹配信息。CAM是目前使用最多的實現(xiàn)快速路由查找的 器件,CAM能夠在有限的幾個硬件時鐘周期內(nèi)完成關(guān)鍵字的精確匹配查找,如果采用流 水線操作,每個時鐘周期輸入一個查找的關(guān)鍵字,則CAM能在每個硬件時鐘周期流水輸 出一個查找結(jié)果。 TCAM(Ternary Content Addressable Memory)也是一種CAM,但它的每個存儲位 有三種狀態(tài)0、 1或X(不關(guān)心),每一個表項都包含數(shù)值比特串和掩碼比特串,因此可 以用來確定最長前綴匹配。
發(fā)明內(nèi)容
本發(fā)明目的在于提供一種路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng),具 體實現(xiàn)采用FPGA和CAM技術(shù)。采用本發(fā)明的路由器可以連接IPv6主干網(wǎng)和IPv4孤 島,實現(xiàn)IPv4孤島之間通過IPv6主干網(wǎng)的透明傳輸。
本發(fā)明的特征 含有 一個集成于FPGA芯片上的隧道處理電路、SRAM單端口存儲器、SRAM 雙端口存儲器、CAM內(nèi)容可尋址存儲器以及CPU控制單元,其中 所述的隧道處理電路,含有IP包輸入接口電路、包過濾電路、包輸入隊列存 儲器FIFO、 IPv6協(xié)議封裝電路、IPv6包隊列存儲器FIFO、包相關(guān)信息提取電路、檢索 指令隊列存儲器FIFO、 CAM控制電路、檢索結(jié)果隊列存儲器FIFO、 IPv6數(shù)據(jù)包相關(guān)信 息隊列存儲器FIFO、 IPv6數(shù)據(jù)包存儲器RAM、包發(fā)送電路、CAM維護(hù)指令隊列存儲器 FIFO、第0個上交包隊列存儲器FIFO、第1個上交包隊列存儲器FIFO、上交包發(fā)送電 路、以及CPU接口電路,其中 IP包輸入接口電路,輸入端接收上級物理和數(shù)據(jù)鏈路層處理電路輸出的數(shù)據(jù)就 緒信號和數(shù)據(jù)總線信號,輸出讀信號給上級物理和數(shù)據(jù)鏈路層處理電路,所述IP包輸入 接口電路數(shù)據(jù)輸出端和包過濾電路的輸入端相連,對輸入輸出的IPv4和IPv6包頭信號和 包尾信號分別進(jìn)行計數(shù),將包頭包尾計數(shù)輸出信號發(fā)送給CPU接口電路,并接收CPU接 口電路輸入的復(fù)位信號和計數(shù)器清零信號; 包過濾電路,輸入端和IP包輸入接口電路相連,還分別和第O個上交包隊列存 儲器FIFO、包輸入隊列存儲器FIFO輸出快滿信號相連,輸出端分別和第O個上交包隊列 存儲器FIFO的輸入端、包輸入隊列存儲器FIFO的輸入端相連,對輸入輸出的包頭信號 和包尾信號進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU接口電路輸入的復(fù)位信號 和計數(shù)器清零信號; 包輸入隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為36位,輸入 端與上述包過濾電路的IP包輸出端相連,讀信號來自IPv6協(xié)議封裝電路,復(fù)位信號來自 CPU接口電路; IPv6協(xié)議封裝電路,輸入端和所述包輸入隊列存儲器FIFO相連,輸出端和IPv6 包隊列存儲器FIFO相連,此外輸入端還接收IPv6包隊列存儲器FIFO輸出的快滿信號, IPv6協(xié)議封裝電路對輸入輸出的包頭信號和包尾信號進(jìn)行計數(shù),并發(fā)送給CPU接口電 路,同時接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號; IPv6包隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為40位,數(shù) 據(jù)輸入端與上述IPv6協(xié)議封裝電路相連,讀輸入信號和包相關(guān)信息提取電路的讀輸出相 連,輸出端和包相關(guān)信息提取電路相連,復(fù)位信號來自CPU接口電路;
包相關(guān)信息提取電路,輸入端和IPv6包隊列存儲器的輸出端相連,輸出端分別 和檢索指令隊列存儲FIFO、 IPv6數(shù)據(jù)包存儲器RAM、 IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器 FIFO相連,對輸入輸出的包頭信號和包尾信號進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時 接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號; 檢索指令隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為100位, 數(shù)據(jù)輸入端與上述包相關(guān)信息提取電路相連,讀輸入信號和CAM控制電路的讀輸出相連,數(shù)據(jù)輸出端和CAM控制電路相連; CAM控制電路,輸入端分別和檢索指令隊列存儲器FIFO輸出端、CAM維護(hù)指 令隊列存儲器FIFO輸出端相連,CAM控制電路輸出的CAM存儲器讀寫控制命令總線信 號以及雙向數(shù)據(jù)請求總線REQDATA信號和CAM存儲器相連,CAM控制電路和SRAM 單端口存儲器的數(shù)據(jù)總線相連,CAM控制電路輸入端還和CAM存儲器輸出的讀確認(rèn)信 號、查找匹配信號、查找輸出有效信號相連,CAM控制電路輸出的檢索信息輸出端和 檢索結(jié)果隊列存儲器FIFO相連,此外CAM控制電路的讀信號分別和檢索指令隊列存儲 器FIFO的讀輸入端、CAM維護(hù)指令隊列存儲器FIFO讀輸入端相連,CAM控制電路輸 出端和CPU接口電路相連,將路由表保存的表項發(fā)送給CPU接口電路,CAM控制電路 對IPv6路由查詢次數(shù)和查詢命中的信息進(jìn)行計數(shù),將這些信息作為查詢狀態(tài)信息發(fā)送給 CPU接口電路,并接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;
檢索結(jié)果隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為148位, 數(shù)據(jù)輸入端與CAM控制電路的輸出相連,讀輸入信號和包發(fā)送電路的讀輸出相連,數(shù)據(jù) 輸出端和包發(fā)送電路的輸入端相連; IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度 為60位,數(shù)據(jù)輸入端與上述包相關(guān)信息提取電路相連,讀輸入信號和包發(fā)送電路的讀輸 出相連,數(shù)據(jù)輸出端和包發(fā)送電路相連; CAM維護(hù)指令隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為90 位,數(shù)據(jù)輸入端和CPU接口電路相連,讀輸入信號和CAM控制電路輸出的讀信號相連, 數(shù)據(jù)輸出端和CAM控制電路的數(shù)據(jù)輸入端相連; 包發(fā)送電路,分別向檢索結(jié)果隊列存儲器FIFO、 IPv6數(shù)據(jù)包相關(guān)信息隊列存 儲器FIFO發(fā)出讀信號,并和檢索結(jié)果隊列存儲器FIFO、 IPv6數(shù)據(jù)包相關(guān)信息隊列存儲 器FIFO的輸出端相連,包發(fā)送電路輸出的讀信號、讀地址和IPv6數(shù)據(jù)包存儲器RAM相 連,IPv6數(shù)據(jù)包存儲器RAM的數(shù)據(jù)輸出端和包發(fā)送電路相連,包發(fā)送電路的輸出還和第 l個上交包隊列存儲器FIFO以及FPGA片外的上行FIFO相連,包發(fā)送電路對輸入輸出的 IPv4、 IPv6包頭信號和包尾信號分別進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU 接口電路輸入的復(fù)位信號和計數(shù)器清零信號; IPv6數(shù)據(jù)包存儲器RAM是一個雙端口的FPGA片內(nèi)讀寫存儲器,有一個數(shù)據(jù)寫 入端口和一個數(shù)據(jù)輸出端口,數(shù)據(jù)寫入端口和包相關(guān)信息提取電路的IPv6數(shù)據(jù)輸出端相 連,讀端口的所有信號和包發(fā)送電路相連,IPv6數(shù)據(jù)包存儲器RAM數(shù)據(jù)寬度為36位, 讀寫端口分別有14根地址線; 第0個上交包隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為36 位,數(shù)據(jù)輸入端與上述包過濾電路相連,讀輸入信號和上交包發(fā)送電路的讀輸出相連, 數(shù)據(jù)輸出端和上交包發(fā)送電路相連; 第l個上交包隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為36 位,數(shù)據(jù)輸入端與包發(fā)送電路相連,讀輸入信號和上交包發(fā)送電路的讀輸出相連,數(shù)據(jù) 輸出端和上交包發(fā)送電路相連; 上交包發(fā)送電路,輸入端和第0個上交包隊列存儲器FIFO、第1個上交包隊列 存儲器FIFO相連,數(shù)據(jù)輸出端和SRAM雙端口存儲器的數(shù)據(jù)輸入端相連,上交包發(fā)送電
10路發(fā)送的CPU中斷信號、SRAM雙端口存儲器數(shù)據(jù)起始地址和終止地址、SRAM雙端口 存儲器中待傳送數(shù)據(jù)的長度信號輸出端和CPU接口電路相連,CPU接口電路將CPU響應(yīng) 信號輸出給上交包發(fā)送電路的輸入端,上交包發(fā)送電路對輸入輸出的IPv4、 IPv6包頭信 號和包尾信號分別進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU接口電路輸入的復(fù) 位信號和計數(shù)器清零信號; CPU接口電路,和由FPGA實現(xiàn)的隧道處理電路內(nèi)部各個電路相連,接收各個 電路輸入的IPv4、 IPv6輸入輸出包頭信號和包尾信號計數(shù),以及CAM控制電路的查詢 狀態(tài)計數(shù),CPU接口電路與FPGA片外CPU控制單元的CPU地址總線、數(shù)據(jù)總線、讀 寫控制信號相連,輸出的中斷信號和CPU控制單元的中斷輸入相連,CPU接口電路還和 SRAM雙端口存儲器數(shù)據(jù)輸出端口的地址總線、數(shù)據(jù)總線、讀寫控制信號相連,CPU接 口電路接收CPU控制單元輸入的復(fù)位信號,并將復(fù)位信號傳送給FPGA內(nèi)的其它各個電 路,將清零信號傳送給IP包輸入接口電路、包過濾電路、IPv6協(xié)議封裝電路、包相關(guān)信 息提取電路、CAM控制電路、上交包發(fā)送電路、包發(fā)送電路,CPU接口電路還和CAM 維護(hù)指令隊列存儲器FIFO的數(shù)據(jù)輸入端相連,接收CAM控制電路輸出的路由表表項數(shù) 據(jù),接收上交包發(fā)送電路輸出的SRAM雙端口存儲器數(shù)據(jù)起始地址和終止地址、SRAM 雙端口存儲器中待傳送數(shù)據(jù)的長度以及中斷請求信息,也向上交包發(fā)送電路發(fā)送CPU中 斷響應(yīng)指示信號; 所述包過濾電路是一個電路組件,其中輸入IP包數(shù)據(jù)寄存器,輸入端和IP包 輸入接口電路的輸出端相連;輸入IP包數(shù)據(jù)寄存器的輸出端分別和IPv4數(shù)據(jù)包寄存器、 IPv6數(shù)據(jù)包寄存器相連;IPv4數(shù)據(jù)包寄存器的輸出端分別和IPv4數(shù)據(jù)包延遲寄存器組、 IPv4包頭校驗和寄存器、生存時間寄存器、包類型寄存器、狀態(tài)控制機的輸入端相連, 同時也接收狀態(tài)控制機的輸出;IPv4數(shù)據(jù)包延遲寄存器組的輸出端和數(shù)據(jù)選擇器A的輸 入端相連;IPv4數(shù)據(jù)包頭校驗和生成器的輸入端分別和IPv4頭校驗和寄存器輸出、生存 時間更新寄存器輸出相連;生存時間寄存器的輸出端和減一減法器A的輸入端以及狀態(tài) 控制機的輸入端相連,減一減法器A的輸出端和生存時間更新寄存器的輸入端相連,生 存時間更新寄存器的輸出端分別和IPv4數(shù)據(jù)包頭校驗和生成器、狀態(tài)控制機相連;數(shù)據(jù) 選擇器A的輸入端又分別和IPv4數(shù)據(jù)包延遲寄存器組的輸出端、IPv4數(shù)據(jù)包頭校驗和生 成器的輸出端以及狀態(tài)控制機的輸出端相連,數(shù)據(jù)選擇器A的輸出端和更新后的IPv4數(shù) 據(jù)包寄存器輸入端相連; IPv6數(shù)據(jù)包寄存器的輸出端分別和IPv6數(shù)據(jù)包延遲寄存器組、跳數(shù)寄存器、下 一個頭寄存器、IPv6目的地址寄存器、狀態(tài)控制機的輸入端相連,同時也接收狀態(tài)控制 機的輸出;跳數(shù)寄存器的輸出端和減一減法器B的輸入端相連以及狀態(tài)控制機相連,跳 數(shù)更新寄存器的輸出端還和狀態(tài)控制機相連;減一減法器B的輸出端和跳數(shù)更新寄存器 的輸入端相連;數(shù)據(jù)選擇器B的輸入端分別和IPv6數(shù)據(jù)包延遲寄存器組、跳數(shù)更新寄存 器、狀態(tài)控制機的輸出端相連,數(shù)據(jù)選擇器B的輸出端和更新后的IPv6數(shù)據(jù)包寄存器輸 入端相連;下一個頭寄存器的輸入端和IPv6數(shù)據(jù)包寄存器的輸出端相連,輸出端和狀態(tài) 控制機相連;IPv6目的地址寄存器的輸出端和比較器的輸入端相連,比較器的另一個輸 入端和本路由器IPv6地址寄存器輸出端相連;比較器的輸出端和狀態(tài)控制機的輸入端相 連;本路由器IPv6地址寄存器輸入端和CPU接口電路的輸出相連;
數(shù)據(jù)選擇器C的輸入端分別和更新后的IPv4數(shù)據(jù)包寄存器、更新后的IPv6數(shù)據(jù) 包寄存器的輸出端相連、狀態(tài)控制機以及包輸入隊列存儲器FIFO的快滿信號相連,數(shù)據(jù) 選擇器C的輸出端分別和第0個上交包隊列存儲器FIFO、包輸入隊列存儲器FIFO相連, 同時數(shù)據(jù)選擇器C的包頭信號和包尾信號輸出端也和計數(shù)器的輸入端相連;計數(shù)器接收 CPU接口電路輸出的計數(shù)器清零信號,并將包頭包尾信號計數(shù)信號傳送給CPU接口電路 的輸入端; 所述IPv6協(xié)議封裝電路是一個電路組件,其中包輸入隊列存儲器FIFO接口電 路,數(shù)據(jù)輸入端和包輸入隊列存儲器FIFO的數(shù)據(jù)輸出端相連,輸出的讀信號和包輸入隊 列存儲器FIFO的讀輸入信號相連,控制輸入輸出端和狀態(tài)控制機電路相連;IPv4包頭數(shù) 據(jù)寄存器,輸入端和包輸入隊列存儲器FIFO接口電路輸出端以及狀態(tài)控制機電路輸出端 相連, 一個輸出端和IPv4包頭轉(zhuǎn)IPv6隧道包頭電路相連,另一個輸出端和多路數(shù)據(jù)選擇 器電路輸入端相連;IPv4負(fù)載數(shù)據(jù)寄存器,輸入端和包輸入隊列存儲器FIFO接口電路輸 出端相連,輸出端和多路數(shù)據(jù)選擇器電路輸入端相連;IPv6數(shù)據(jù)寄存器,輸入端和包輸 入隊列存儲器FIFO接口電路的輸出端相連,輸出端和多路數(shù)據(jù)選擇器電路輸入端相連; IPv6隧道包頭數(shù)據(jù)寄存器,輸入端和IPv4包頭轉(zhuǎn)IPv6隧道包頭電路以及狀態(tài)控制機電路 相連,輸出端和多路數(shù)據(jù)選擇器電路相連;多路數(shù)據(jù)選擇器電路的輸出端和IPv6包隊列 存儲器FIFO的輸入端相連;包輸入隊列存儲器FIFO接口電路將接收的數(shù)據(jù)包頭信號和 尾信號發(fā)送給計數(shù)器電路,多路數(shù)據(jù)選擇器電路也把輸出的數(shù)據(jù)包頭、包尾信號傳送給 計數(shù)器電路,計數(shù)器電路輸出的輸入輸出包頭包尾信號計數(shù)和CPU接口電路的狀態(tài)計數(shù) 器值輸入端相連,同時接收CPU接口電路輸入的計數(shù)器清零信號; 所述包相關(guān)信息提取電路是一個電路組件,由一系列的電路組成IPv6包隊列 存儲器接口電路,所述數(shù)據(jù)輸入端和IPv6包隊列存儲器FIFO相連,輸出的讀信號和IPv6 包隊列存儲器FIFO的讀輸入信號相連,控制輸入輸出端和狀態(tài)控制機電路相連,輸出 端和包上交標(biāo)識寄存器、包優(yōu)先級寄存器、包源端口編號寄存器、包起始地址寄存器、 包終止地址寄存器、包序列號寄存器、包目的地址寄存器、隧道標(biāo)識寄存器以及包寫入 RAM電路相連;IPv6包信息發(fā)送電路的輸入端和所述包上交標(biāo)識寄存器、包優(yōu)先級寄存 器、包起始地址寄存器、包源端口編號寄存器、包終止地址寄存器、包序列號寄存器相 連,控制信息來自于狀態(tài)控制機,輸出端接IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO;檢索 指令發(fā)送電路的輸入端和包序列號寄存器、包目的地址寄存器、隧道標(biāo)識寄存器相連, 輸出端和檢索指令隊列存儲器FIFO相連,控制輸入端和狀態(tài)控制機相連;包寫入RAM 電路的輸出端和IPv6數(shù)據(jù)包存儲器RAM相連,它的控制輸入端和狀態(tài)控制機相連;計 數(shù)器的輸入端分別和IPv6包隊列存儲器FIFO接口電路的輸入包頭信號以及輸入包尾信號 相連,還和包寫入RAM電路輸出的包頭信號和包尾信號相連,同時也和CPU接口電路輸 入的計數(shù)器清零信號相連,輸出的包頭尾信號計數(shù)和CPU接口電路相連;
所述CAM控制電路是一個電路組件,由一系列的電路組成檢索指令隊列存儲 器FIFO接口電路的數(shù)據(jù)輸入端和檢索指令隊列存儲器FIFO輸出端相連,輸出的讀信號 和檢索指令隊列存儲器FIFO的讀信號相連,并且輸出端也和狀態(tài)控制機互連,接收狀態(tài) 控制機輸出的控制信號;CAM寫入數(shù)據(jù)寄存器的輸入端和檢索指令隊列存儲器FIFO接 口電路、以及CAM維護(hù)指令隊列存儲器FIFO接口電路的輸出端相連,輸出端和CAM數(shù)據(jù)總線讀寫控制電路相連;CAM操作指令發(fā)送電路的輸入端和檢索指令隊列存儲器 FIFO接口電路的輸出端、CAM維護(hù)指令隊列存儲器FIFO接口電路的輸出端相連,輸出 端直接和CAM存儲器的命令總線INST、 LTIN、 SEGSEL、 GMASK、 CRB和請求選通信 號REQSTB相連;SRAM寫入數(shù)據(jù)寄存器的輸入端和CAM維護(hù)指令隊列存儲器FIFO接 口電路輸出端,以及檢索指令隊列存儲器FIFO接口電路的輸出端相連,輸出端和SRAM 數(shù)據(jù)總線讀寫控制電路輸入端相連;SRAM數(shù)據(jù)總線讀寫控制電路的輸出端和SRAM讀 出數(shù)據(jù)寄存器、檢索結(jié)果寄存器以及SRAM單端口存儲器相連,控制信號輸入端和狀態(tài) 機輸出相連;CPU讀出數(shù)據(jù)寄存器的輸入端和CAM讀出數(shù)據(jù)寄存器的輸出端、SRAM讀 出數(shù)據(jù)寄存器的輸出端相連,輸出端和CPU接口電路相連;檢索結(jié)果寄存器的輸入端和 數(shù)據(jù)包序列號寄存器的輸出端相連,輸出端和檢索結(jié)果隊列存儲器FIFO相連;數(shù)據(jù)包序 列號寄存器的輸入端和檢索指令隊列存儲器FIFO接口電路的輸出端以及狀態(tài)控制機的輸 出端相連;計數(shù)器的輸入端和檢索結(jié)果寄存器的輸出端相連,還和CPU接口電路輸入的 計算器清零信號相連,它輸出的查詢狀態(tài)計數(shù)輸出和CPU接口電路相連;
所述包發(fā)送電路是一個電路組件,由一系列的電路組成IPv6數(shù)據(jù)包相關(guān)信息 隊列存儲器FIFO接口電路,數(shù)據(jù)輸入端和IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO的輸出 端相連,控制輸入和輸出端與狀態(tài)機控制電路相連,輸出的讀信號和IPv6數(shù)據(jù)包相關(guān)信 息隊列存儲器FIFO讀輸入端相連,輸出端分別和包存儲起始地址寄存器、包存儲終止地 址寄存器、包長度寄存器、包優(yōu)先級寄存器、源端口編號寄存器、包序列號寄存器A的 輸入端相連;檢索結(jié)果隊列存儲器FIFO接口電路,數(shù)據(jù)輸入端和檢索結(jié)果隊列存儲器 FIFO的輸出相連,控制輸入和輸出端與狀態(tài)機控制電路相連,輸出端分別和包序列號寄 存器B、目的端口編號寄存器、目的線卡編號寄存器、下一跳IPv6地址寄存器、下一跳 IPv4地址寄存器、隧道IPv6目的地址寄存器的輸入端相連;位寬為36位的附加數(shù)據(jù)寄存 器組的輸入端分別和包優(yōu)先級寄存器、包長度寄存器、源端口編號寄存器、源線卡編號 寄存器、目的端口編號寄存器、目的線卡編號寄存器、下一跳IPv6地址寄存器、下一跳 IPv4地址寄存器、隧道IPv6目的地址寄存器的數(shù)據(jù)輸出端相連;源線卡編號寄存器的輸 入來自CPU接口電路;增10加法器,輸入端和包存儲起始地址的輸出相連,輸出端與地
址寄存器A相連;地址寄存器B的輸入端和包存儲起始地址的輸出相連;增l加法器的 輸出端分別和IPv6數(shù)據(jù)包存儲器讀地址寄存器的輸出端、地址寄存器C的輸入端相連; 多路數(shù)據(jù)選擇器A,輸入端分別和地址寄存器A、地址寄存器B、地址寄存器C相連,控 制輸入端和狀態(tài)機控制電路的輸出相連,輸出端和IPv6數(shù)據(jù)包存儲器讀地址寄存器的輸 入端相連;數(shù)據(jù)比較器A,輸入端和包存儲終止地址寄存器的輸出端以及IPv6數(shù)據(jù)包存 儲器讀地址寄存器的輸出端相連,輸出端和狀態(tài)機控制電路的輸入端相連;位寬為36位 的IP數(shù)據(jù)寄存器,輸入端和IPv6數(shù)據(jù)包存儲器RAM的數(shù)據(jù)輸出端相連,輸出端和多路 數(shù)據(jù)選擇器B的輸入端相連;多路數(shù)據(jù)選擇器B,數(shù)據(jù)輸入端分別和位寬為36位的附加 數(shù)據(jù)寄存器組的輸出端、位寬為36位的IP數(shù)據(jù)寄存器的輸出端相連,輸出端和上交數(shù)據(jù) 包寄存器、帶附加數(shù)據(jù)的IPv4或IPv6數(shù)據(jù)包寄存器的輸入端相連;上交數(shù)據(jù)包寄存器的 輸出端和第1個上交包隊列存儲器FIFO的輸入端相連;帶附加數(shù)據(jù)的IPv4或IPv6包寄 存器的輸出端發(fā)往與FPGA相連的上行FIFO ;帶附加數(shù)據(jù)的IPv4或IPv6包寄存器的還 將發(fā)送的數(shù)據(jù)包頭信號和包尾信號分別傳送給計數(shù)器,計數(shù)器還和CPU接口電路輸入的計數(shù)器清零信號相連,計數(shù)器輸出的包頭包尾信號計數(shù)信號發(fā)送給CPU接口電路;
所述CAM存儲器,是系統(tǒng)的FPGA片外存儲器,讀寫控制命令總線信號以及數(shù) 據(jù)請求總線REQDATA信號來自CAM控制電路,輸出的地址總線信號和讀寫信號分別與 SRAM單端口存儲器的地址總線和讀寫信號相連,輸出的讀確認(rèn)信號、查找匹配信號、 查找輸出有效信號和CAM控制電路輸入端相連; 所述SRAM單端口存儲器,是系統(tǒng)的FPGA片外靜態(tài)SRAM存儲器,讀寫輸入 信號和地址信號來自CAM存儲器的輸出,數(shù)據(jù)輸入輸出端和CAM控制電路相連;
所述SRAM雙端口存儲器,是系統(tǒng)的FPGA片外靜態(tài)雙端口 SRAM存儲器, 分為數(shù)據(jù)寫入端口和數(shù)據(jù)輸出端口 ,數(shù)據(jù)寫入端口的雙向數(shù)據(jù)總線和上交包發(fā)送電路相 連,數(shù)據(jù)寫入端口的讀寫信號線、地址總線和上交包發(fā)送電路的輸出端相連,數(shù)據(jù)輸出 端口的雙向數(shù)據(jù)總線和CPU接口電路相連,數(shù)據(jù)輸出端口的讀寫信號線、地址總線和 CPU接口電路的輸出端相連。 通過上述方法構(gòu)建的路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng),由一片 FPGA芯片EP1S25F780、兩片IDT75k62100(TCAM)、兩片IDT71T75602(SRAM)、 一片 CY7C1300A(SRAM雙端口存儲器)芯片構(gòu)成,F(xiàn)PGA和外圍芯片采用同一個時鐘進(jìn)行工 作。 FPGA只有一個主時鐘CLK,該時鐘頻率為100MHZ時,上述所有模塊的復(fù)位 信號來自于CPU接口電路,CPU接口電路的復(fù)位信號來自于CPU控制單元,上述所有模 塊的時鐘都為CLK,但在上面為避免重復(fù),沒有提,路由器中采用IPv6頭封裝IPv4包的 隧道轉(zhuǎn)發(fā)系統(tǒng)達(dá)到的性能指標(biāo)為 IDT75k62100和FPGA共用一個主時鐘100MHZ CLK,兩片IDT71T75602的工 作頻率為50MHZ,該50MHZ和主100MHZ的時鐘源相同,是100MHZ CLK主時鐘經(jīng)二 分頻得到的; 通過利用CAM系統(tǒng)構(gòu)造的查找表,支持表項條數(shù)的動態(tài)分配,支持IPv6包的 IPv6路由查找,系統(tǒng)能保證以3.2Gbit/s線速收發(fā)數(shù)據(jù)包。 通過上述方法,使用一片EPlS25780和級聯(lián)兩片IDT75k62100構(gòu)建的路由查找 器最大支持64K*288bits的IPv6路由表項。 該隧道傳輸處理系統(tǒng)可以處理IPv6隧道數(shù)據(jù)包、IPv4數(shù)據(jù)包和IPv6非隧道數(shù)據(jù) 包,最大處理32k字節(jié)數(shù)據(jù)包。系統(tǒng)能保證3.2Gbit/s線速收發(fā)數(shù)據(jù)包,如果超過3.2Gbit/ s會丟包,但沒有丟的包能正確傳送,如果包速率又回到3.2Gbit/s,仍然不會丟包。
支持上交包整包緩存。 通過CPU對FPGA內(nèi)的各電路模塊及CAM系統(tǒng)進(jìn)行控制和維護(hù)。
圖1路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)在核心路由器線卡中的位 置以及和周圍器件的關(guān)系 圖2路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)的芯片之間連接關(guān)系
圖3路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)FPGA內(nèi)部的各個子電路 之間的關(guān)系
圖4包過濾電路
圖5IPv 6協(xié)議封裝電路
圖6包相關(guān)信息提取電路
圖7CAM控制電路
圖8包發(fā)送電路 圖9CAM存儲器存儲的表項數(shù)據(jù)結(jié)構(gòu) 說明目的IPv6地址128位(127 0),隧道標(biāo)識占1位,保留位置0。
圖10SRAM單端口存儲器存儲的表項數(shù)據(jù)結(jié)構(gòu) 說明標(biāo)識(bit71 69) : 000——IPv4轉(zhuǎn)發(fā);001——上交;010——丟棄,
011——普通IPv6轉(zhuǎn)發(fā);100——IPv6隧道轉(zhuǎn)發(fā); 目的線卡編號bit71 68 ;目的端口編號bit67 64。 IPv6隧道目的地址共128位,由SRAM單端口存儲器第三個和第四個表項的 bit63 0構(gòu)成。
保留位置0。
圖11IP包輸入接口電路接收的經(jīng)過上級電路處理的PPP包數(shù)據(jù)結(jié)構(gòu)
圖12包輸入隊列存儲器FIFO中的數(shù)據(jù)結(jié)構(gòu) 說明(1)bit35 34為包的頭尾指示10——數(shù)據(jù)包開始,00——數(shù)據(jù)包中間 數(shù)據(jù),01——數(shù)據(jù)包結(jié)束,11——數(shù)據(jù)包錯誤。bit33 32為MOD域,最后一個32位有 效字節(jié)指示,只有在包尾時才有意義00——最后四個字節(jié)都有效,01——最后四個字 節(jié)中三個字節(jié)有效(bit31 8), 10——最后四個字節(jié)中兩個字節(jié)有效(bit31 16), 11—— 最后四個字節(jié)中一個字節(jié)有效(bit31 24);無效位用0填充。bit31 31,數(shù)據(jù)包的具 體內(nèi)容。 圖13IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO中的數(shù)據(jù)結(jié)構(gòu)
圖14檢索指令隊列存儲器FIFO中的數(shù)據(jù)結(jié)構(gòu)
圖15CAM維護(hù)指令隊列存儲器FIFO數(shù)據(jù)結(jié)構(gòu)
圖16檢索結(jié)果隊列存儲器FIFO中的數(shù)據(jù)結(jié)構(gòu)
圖17發(fā)送給上行FIFO的數(shù)據(jù)結(jié)構(gòu) 說明(1)bit35 34為包的頭尾指示10——數(shù)據(jù)包開始,00——數(shù)據(jù)包中間 數(shù)據(jù),01——數(shù)據(jù)包結(jié)束,11——數(shù)據(jù)包錯誤。bit33 32為MOD域,最后一個32位有 效字節(jié)指示,只有在包尾時才有意義00——最后四個字節(jié)都有效,01——最后四個字 節(jié)中三個字節(jié)有效(bit31 8), 10——最后四個字節(jié)中兩個字節(jié)有效(bit31 16), 11—— 最后四個字節(jié)中一個字節(jié)有效(bit31 24);無效位用0填充。bit31 31,數(shù)據(jù)包的具 體內(nèi)容。 (2)源位置編號bitl5 8,共8位,其中bitll 8標(biāo)識源端口編號,bitl5 12標(biāo)識源線卡編號。 (3)目的端口編號bitl9 8,共12位,但目前只用了 bitll 8,其它位置0,
用來指明數(shù)據(jù)包到達(dá)目標(biāo)線卡后的輸出端口。
圖18上交數(shù)據(jù)結(jié)構(gòu) 說明bit35 34為包的頭尾指示10——數(shù)據(jù)包開始,00——數(shù)據(jù)包中間數(shù)據(jù),01——數(shù)據(jù)包結(jié)束,11——數(shù)據(jù)包錯誤。bit33 32為MOD域,最后一個32位有 效字節(jié)指示,只有在包尾時才有意義00——最后四個字節(jié)都有效,01——最后四個字 節(jié)中三個字節(jié)有效(bit31 8), 10——最后四個字節(jié)中兩個字節(jié)有效(bit31 16), 11—— 最后四個字節(jié)中一個字節(jié)有效(bit31 24);無效位用0填充。bit31 31,數(shù)據(jù)包的具 體內(nèi)容。 圖19采用IPv6頭封裝IPv4報文的隧道數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)
具體實施例方式
路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)用在線路接口卡上,解決IPv4 網(wǎng)絡(luò)通過純IPv6主干網(wǎng)絡(luò)實現(xiàn)互聯(lián)的問題,具體實現(xiàn)采用FPGA技術(shù)。它由隧道處理電 路和外部SRAM雙端口存儲器芯片、SRAM單端口存儲器芯片、CAM存儲器芯片、CPU 控制單元實現(xiàn),隧道處理電路由一片F(xiàn)PGA實現(xiàn)。該系統(tǒng)在高性能核心路由器中的位置 見附圖1,構(gòu)成該系統(tǒng)的芯片之間連接關(guān)系如圖2所示。 由圖可知,路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)從物理和數(shù)據(jù)鏈 路層處理電路接收按照PPP協(xié)議封裝的數(shù)據(jù)包,該數(shù)據(jù)包只含有協(xié)議域、信息域和填充 域,隧道傳輸處理系統(tǒng)根據(jù)協(xié)議域標(biāo)識提取其中的純IPv6數(shù)據(jù)報文和IPv4數(shù)據(jù)報文。 對IPv4數(shù)據(jù)報文進(jìn)行封裝,加上IPv6數(shù)據(jù)包頭,成為IPv6隧道數(shù)據(jù)包;對IPv6數(shù)據(jù)報 文的目的地址和跳數(shù)進(jìn)行檢查,將目的地址為本路由器的IPv6數(shù)據(jù)包直接上交給CPU控 制單元進(jìn)行處理。對于目的地址不為本路由器的IPv6數(shù)據(jù)包,從中提取路由查找信息, 并將查找信息提交給CAM查找系統(tǒng)(CAM+SRAM)進(jìn)行查找,由FPGA構(gòu)成的隧道處理 電路,根據(jù)查找返回的結(jié)果,決定對IPv6數(shù)據(jù)包是進(jìn)行普通IPv6轉(zhuǎn)發(fā)、采用IPv6頭封 裝IPv4包的隧道轉(zhuǎn)發(fā)、IPv4轉(zhuǎn)發(fā)、丟棄還是上交給CPU進(jìn)行處理。轉(zhuǎn)發(fā)的包通過上行 FIFO存儲器發(fā)送給后續(xù)的交換結(jié)構(gòu)協(xié)處理器和交換結(jié)構(gòu)進(jìn)行處理。 隧道傳輸處理系統(tǒng)上電后,CPU控制單元通過CPU接口電路對整個系統(tǒng)進(jìn)行初 始化,將CAM配置成288位查找模式,并配置SRAM表項。初始化完成后,系統(tǒng)才可 以正常工作。 系統(tǒng)使用的CAM單個表項的存儲位寬為72位,所以支持的表項長度是72bit的 整數(shù)倍,由于IPv6包的目的地址是128位,因此至少需要2個CAM表項來存儲IPv6包 的目的地址。IPv4包進(jìn)入路由器之后,離開路由器時,如果采用IPv6頭封裝IPv4包的隧 道轉(zhuǎn)發(fā),系統(tǒng)除了要提供隧道末端出口的IPv6地址外,還需要提供隧道包離開當(dāng)前路由 器后途經(jīng)的下一跳路由器IPv6地址,這樣提供查找結(jié)果的SRAM至少需要256位。系統(tǒng) 使用的SRAM單端口存儲器支持的表項長度是72bit的整數(shù)倍,這樣以來,實際上SRAM 提供的存儲容量為288位,對應(yīng)SRAM有4個存儲單元。288位SRAM必須要有288位 CAM配對,才能在時序上匹配,所以系統(tǒng)采用4個CAM表項共288位來表示一個路由表 項。第一個表項的bit71 69位取100,說明是IPv6表項,bit68如果取1 ,說明查的是 用IPv6封裝的隧道包的路由,bit68如果取0,說明查的是普通IPv6包的路由,bit67 64位保留不用,bit63 0對應(yīng)IPv6目的地址的高64位。第二個表項的bit71 64位保 留不用,bit63 0對應(yīng)IPv6目的地址的低64位。還有2個表項保留不用,置0,如圖 9所示。
系統(tǒng)使用的SRAM單端口存儲器支持的每個路由表項結(jié)構(gòu)如圖10所示第一個 表項的bit71 69構(gòu)成路由查找結(jié)果的標(biāo)識位,用于表示查找結(jié)果的類型IPv4轉(zhuǎn)發(fā)、 普通IPv6轉(zhuǎn)發(fā)、IPv6隧道轉(zhuǎn)發(fā)、丟棄、數(shù)據(jù)上交給CPU控制單元;目的線卡編號由第二 個表項的bit71 68構(gòu)成,共4位,用于表示數(shù)據(jù)包通過交換結(jié)構(gòu)將要到達(dá)的目的線卡; 目的端口編號由bit67 64構(gòu)成,共4位,用于表示轉(zhuǎn)發(fā)的數(shù)據(jù)包經(jīng)過交換結(jié)構(gòu)到達(dá)目的 線卡后,通過線卡的哪一個端口發(fā)送出去;第一個表項和第二個表項的bit63 0里存儲 的是下一跳目的地址,如果是普通IPv6轉(zhuǎn)發(fā),則下一跳的IP地址是128位,如果是IPv4 轉(zhuǎn)發(fā),則下一跳的IP地址是32位,此時只有第二個表項的bit31 0位有效;標(biāo)識位等 于OOO時,數(shù)據(jù)包以IPv4轉(zhuǎn)發(fā),等于001時,數(shù)據(jù)包被丟棄,等于010時,數(shù)據(jù)包被上 交給CPU控制單元,等于011時,數(shù)據(jù)包以普通IPv6轉(zhuǎn)發(fā),等于100時,數(shù)據(jù)包以IPv6 隧道轉(zhuǎn)發(fā);SRAM第三和第四個表項的bit63 0里存儲的是IPv4數(shù)據(jù)包以IPv6隧道方 式轉(zhuǎn)發(fā)時,IPv6隧道末端出口路由器的128位IPv6目的地址。
整個系統(tǒng)的工作流程如下 l)IP包輸入接口電路從物理和數(shù)據(jù)鏈路層處理電路讀取經(jīng)過處理的PPP協(xié)議數(shù) 據(jù)包和數(shù)據(jù)源端口編號,經(jīng)過處理的PPP協(xié)議數(shù)據(jù)包只含有協(xié)議域、信息域和填充域, PPP數(shù)據(jù)包的其它部分已經(jīng)在上級電路被剔除了。根據(jù)PPP包的16位協(xié)議編號,提取其 中的純IPv6或IPv4數(shù)據(jù)包,將去掉PPP 16位協(xié)議域和填充域的純IPv6報文或IPv4報文 發(fā)送到包過濾電路。 2)包過濾電路接收IPv4和IPv6數(shù)據(jù)包,如果接收的是單播IPv4數(shù)據(jù)包,則對 IPv4包的生存時間TTL域進(jìn)行檢查,如果其TTL為O,則將該IPv4數(shù)據(jù)包丟棄;如果 TTL大于1,則對IPv4數(shù)據(jù)包的TTL域進(jìn)行減l操作,如果減1后,TTL等于O,則將該 IPv4數(shù)據(jù)包發(fā)送給第0個上交包隊列存儲器FIFO ;如果接收的IPv4數(shù)據(jù)包是多播數(shù)據(jù), 也發(fā)送給第0個上交包隊列存儲器FIFO ;如果接收的單播IPv4包的TTL不為0, TTL進(jìn) 行減1操作后得到的TTL也不為0,則讓該IPv4包完成TTL減1操作,重新生成新的首 部校驗和后讓該包通過,發(fā)送給下一級包輸入隊列存儲器FIFO。 包過濾電路接收的IPv6數(shù)據(jù)包分三種單播、多播、任播。在后續(xù)的處理中, 本系統(tǒng)對任播的處理和單播一樣,所有對單播的處理方式也同時應(yīng)用于任播,但不再說 明。 包過濾電路接收到IPv6包后,首先查看包的跳數(shù)限制,如果它的跳數(shù)限制為 0,就將該IPv6包丟棄;如果它的跳數(shù)限制大于或等于l,則將跳數(shù)限制進(jìn)行減l操作, 如果減1后,跳數(shù)為0,則將該IPv6數(shù)據(jù)包發(fā)送給第O個上交包隊列存儲器FIFO;如果 跳數(shù)減1后,跳數(shù)仍然不為0,包過濾電路就對該IPv6包目的地址進(jìn)行檢查;如果是多播 包就發(fā)送給第0個上交包隊列存儲器FIFO。 如果接收的IPv6數(shù)據(jù)包的目的地址是本路由器,分兩種情況,第一種是情況 該數(shù)據(jù)包不是IPv6隧道包,則發(fā)送給第0個上交包隊列存儲器FIFO;第二種是情況該 數(shù)據(jù)包是隧道包,那么小于61字節(jié)的包都丟棄,不小于61字節(jié)的就發(fā)送給下一級包輸入 隊列存儲器FIFO。 如果接收的IPv6數(shù)據(jù)包的目的地址不是本路由器,也分兩種情況第一種情況 是該數(shù)據(jù)包是IPv6隧道包,那么小于61字節(jié)的包都丟棄,不小于61字節(jié)的就發(fā)送給下一級包輸入隊列存儲器FIFO;第二種情況是該數(shù)據(jù)包不是IPv6隧道數(shù)據(jù)包,則對數(shù)據(jù)包 的大小不進(jìn)行檢查直接發(fā)送給下一級包輸入隊列存儲器FIFO。 3)IPv6協(xié)議封裝電路通過包輸入隊列存儲器FIFO接口電路讀取數(shù)據(jù)包,根據(jù)IP 數(shù)據(jù)的版本號,包輸入隊列存儲器FIFO接口電路知道讀入的數(shù)據(jù)是IPv4數(shù)據(jù)包還是IPv6
數(shù)據(jù)包。 如果是IPv4數(shù)據(jù),在狀態(tài)控制機電路的控制下,包輸入隊列存儲器FIFO接口電 路讀取IPv4包頭數(shù)據(jù),并將其保存在IPv4包頭數(shù)據(jù)寄存器中,IPv4包頭數(shù)據(jù)寄存器中的 數(shù)據(jù)又輸出給IPv4包頭轉(zhuǎn)IPv6隧道包頭電路。IPv4包頭轉(zhuǎn)IPv6隧道包頭電路對應(yīng)每一 個IPv4包頭,生成一個IPv6封裝包頭IPv6包頭的源地址就是本路由器的IPv6地址, 包頭目的地址最高96位bitl27 32置0,最低32位就是當(dāng)前處理的IPv4數(shù)據(jù)包的目的 地址,包頭下一個首部域設(shè)置為十進(jìn)制的101,跳數(shù)限制設(shè)為十進(jìn)制的64,包的流量類 別設(shè)置為0,流標(biāo)號置0。生成的IPv6包頭發(fā)送到IPv6隧道包頭數(shù)據(jù)寄存器中。多路數(shù) 據(jù)選擇器將保存在IPv6隧道包頭數(shù)據(jù)寄存器中的IPv6包頭和保存在IPv4包頭數(shù)據(jù)寄存器 中的數(shù)據(jù)依次選通發(fā)送到下一級的IPv6包隊列存儲器FIFO中,與此同時包輸入隊列存儲 器FIFO接口電路繼續(xù)讀取IPv4數(shù)據(jù)包的負(fù)載部分,并將它們保存在IPv4負(fù)載數(shù)據(jù)寄存 器中,在發(fā)送完IPv4包頭數(shù)據(jù)寄存器中的數(shù)據(jù)后,多路數(shù)據(jù)選擇器立即選通IPv4負(fù)載數(shù) 據(jù)寄存器的輸出,這樣IPv6隧道包就像流水一樣不斷線地發(fā)送到下一級的IPv6包隊列存 儲器FIFO中。 如果是IPv6隧道包,包輸入隊列存儲器FIFO接口電路讀取IPv6頭,并將IPv6 頭丟棄,緊接著讀取IPv6隧道包的IPv4包頭數(shù)據(jù),并將其保存在IPv4包頭數(shù)據(jù)寄存器 中,IPv4包頭數(shù)據(jù)寄存器中的數(shù)據(jù)又輸出給IPv4包頭轉(zhuǎn)IPv6隧道包頭電路。在狀態(tài)控 制機電路的控制下,IPv4包頭轉(zhuǎn)IPv6隧道包頭電路對應(yīng)每一個IPv4包頭,又生成一個 IPv6封裝包頭IPv6包頭的源地址就是本路由器的IPv6地址,包頭目的地址最高96位 bitl27 32置0,最低32位就是當(dāng)前處理的IPv4數(shù)據(jù)包的目的地址,包頭下一個首部域 設(shè)置為十進(jìn)制的101,跳數(shù)限制設(shè)為十進(jìn)制的2,包的流量類別設(shè)置為0,流標(biāo)號置0。 生成的IPv6包頭發(fā)送到IPv6隧道包頭數(shù)據(jù)寄存器中。多路數(shù)據(jù)選擇器將保存在IPv6隧 道包頭數(shù)據(jù)寄存器中的IPv6包頭和保存在IPv4包頭數(shù)據(jù)寄存器中的數(shù)據(jù)依次選通發(fā)送到 下一級的IPv6包隊列存儲器FIFO中,與此同時包輸入隊列存儲器FIFO接口電路繼續(xù)讀 取IPv6隧道包的IPv4數(shù)據(jù)負(fù)載部分,并將它們保存在IPv4負(fù)載數(shù)據(jù)寄存器中,在發(fā)送 完IPv4包頭數(shù)據(jù)寄存器中的數(shù)據(jù)后,多路數(shù)據(jù)選擇器立即選通IPv4負(fù)載數(shù)據(jù)寄存器的輸 出,這樣已經(jīng)更新的IPv6隧道包就像流水一樣不斷線地發(fā)送到下一級的IPv6包隊列存儲 器FIFO中。 包輸入隊列存儲器FIFO接口電路讀取的IPv6數(shù)據(jù)包如果不是隧道包,則不對 IPv6數(shù)據(jù)包進(jìn)行任何處理,只將它暫存在IPv6數(shù)據(jù)寄存器中,通過多路數(shù)據(jù)選擇器,直 接將它傳送到下一級的IPv6包隊列存儲器FIFO。 4)包相關(guān)信息提取電路通過IPv6包隊列存儲器FIFO接口電路從IPv6包隊列存 儲器FIFO中讀取IPv6數(shù)據(jù)包,每一個節(jié)拍讀40位,其中8位是邊帶信息,32位是IP數(shù) 據(jù)包。IPv6包隊列存儲器FIFO接口電路中有一個節(jié)拍計算器、 一個包計算器,節(jié)拍計 算器記錄接收的數(shù)據(jù)包節(jié)拍數(shù),每個節(jié)拍含32位IP數(shù)據(jù),包計算器記錄接收的數(shù)據(jù)包個數(shù)。系統(tǒng)初始化時,節(jié)拍計算器和包計算器被清O。 IPv6包隊列存儲器FIFO接口電路 接收一個數(shù)據(jù)包時,該數(shù)據(jù)包第一節(jié)拍數(shù)據(jù)對應(yīng)的節(jié)拍計算器值,就是該IPv6數(shù)據(jù)包在 IPv6存儲器RAM中保存的起始地址,數(shù)據(jù)包最后一節(jié)拍數(shù)據(jù)對應(yīng)的計算器值,就是該數(shù) 據(jù)包在IPv6存儲器RAM中保存的終止地址。每接收一節(jié)拍數(shù)據(jù)后,計算器值加l。數(shù) 據(jù)包的起始地址和終止地址被輸出,分別保存在包起始地址寄存器、包終止地址寄存器 中。相應(yīng)地,接收一個數(shù)據(jù)包時,該數(shù)據(jù)包第一節(jié)拍數(shù)據(jù)對應(yīng)的包計算器值,就是該數(shù) 據(jù)包對應(yīng)的序列號,該序列號被輸出給包序列號寄存器保存。每接收完一個數(shù)據(jù)包,包 計算器值加1,包計算器加1是在接收數(shù)據(jù)包的最后一個節(jié)拍之后發(fā)生的。
在狀態(tài)控制機電路的作用下,IPv6包隊列存儲器FIFO接口電路通過包寫入 RAM電路,將接收的IPv6包發(fā)送到與包相關(guān)信息提取電路相連的IPv6數(shù)據(jù)包存儲器 RAM, IPv6數(shù)據(jù)包存儲器RAM是一個讀寫與時鐘同步的雙端口 RAM存儲器, 一個端口 專門用來寫數(shù)據(jù), 一個端口專門用來讀數(shù)據(jù)。 在狀態(tài)控制機電路的作用下,IPv6包隊列存儲器FIFO接口電路提取數(shù)據(jù)包的源 端口編號,并將源端口編號發(fā)送到源端口編號寄存器。對于接收的IPv6數(shù)據(jù)包,如果它 的下一個首部域是0,則置上交標(biāo)識,并將該上交標(biāo)識輸出給包上交標(biāo)識寄存器,在該寄 存器中進(jìn)行保存。 在狀態(tài)控制機電路的作用下,IPv6包隊列存儲器FIFO接口電路提取包的流量類 別保存在包優(yōu)先級寄存器中。如果IPv6包是隧道包,就將隧道標(biāo)識寄存器置l,否則置 0。 包上交標(biāo)識寄存器、包優(yōu)先級寄存器、包源端口號寄存器、包終止地址寄存 器、包起始地址寄存器、包序列號寄存器的值輸出給IPv6包信息發(fā)送電路,IPv6信息發(fā) 送電路在狀態(tài)控制機電路控制下,將數(shù)據(jù)發(fā)送給與包相關(guān)信息提取電路相連的IPv6數(shù)據(jù) 包相關(guān)信息隊列存儲器FIFO。 CAM工作受它的命令總線和請求數(shù)據(jù)總線控制,檢索指令發(fā)送電路生成CAM 命令總線控制數(shù)據(jù)請求選通信號REQSTB、操作指令類型信號INST、查找類型信號 LTIN、段選信號SEGSEL、掩碼寄存器選擇信號GMASK, CAM命令總線控制數(shù)據(jù)由檢 索指令發(fā)送電路發(fā)送到檢索指令隊列存儲器FIFO。 包序列號寄存器、隧道標(biāo)識寄存器和包目的地址寄存器經(jīng)檢索指令發(fā)送電路發(fā) 送給與包相關(guān)信息提取電路相連的檢索指令隊列存儲器FIFO,其中隧道標(biāo)識寄存器和包 目的地址寄存器保存的數(shù)據(jù)對應(yīng)CAM數(shù)據(jù)總線輸入的72位寬度REQDATA數(shù)據(jù),用來 進(jìn)行CAM查找。 5)CAM控制電路內(nèi)部的檢索指令隊列存儲器FIFO接口電路從檢索指令隊列存 儲器FIFO中讀取檢索指令,并將REQDATA數(shù)據(jù)寫入CAM寫入數(shù)據(jù)寄存器。CAM 存儲器的操作受命令總線的控制,因此讀取的總線控制命令REQSTB、 INST、 LTIN、 SEGSEL、 GMASK寫入CAM操作指令發(fā)送電路。檢索指令隊列存儲器FIFO接口電路 還將檢索指令對應(yīng)的數(shù)據(jù)包序列號保存到數(shù)據(jù)包序列號存儲器中。 CAM表項和SRAM表項初始化完成后,在CAM運行的過程中,操作系統(tǒng)要不 斷地對CAM表項和SRAM表項進(jìn)行刪除、添加等操作,這些操作是CPU通過CPU接 口電路向CAM維護(hù)指令隊列存儲器FIFO發(fā)送CAM維護(hù)指令來完成的。CAM控制電路通過CAM維護(hù)指令隊列存儲器FIFO接口電路讀取CAM維護(hù)指令隊列存儲器FIFO的 CAM維護(hù)指令,并將REQDATA數(shù)據(jù)寫入CAM寫入數(shù)據(jù)寄存器,讀取的總線控制命令 REQSTB、 INST、 LTIN、 SEGSEL、 GMASK寫入CAM操作指令發(fā)送電路。CAM維護(hù) 指令隊列存儲器FIFO接口電路還將需要寫的SRAM表項保存在SRAM寫入數(shù)據(jù)寄存器 中。 在狀態(tài)控制機電路的作用下,CAM數(shù)據(jù)總線讀寫控制電路和SRAM讀寫數(shù)據(jù)總 線控制電路把對應(yīng)的表項寫入CAM和SRAM存儲器中,或?qū)⒉檎业慕Y(jié)果輸出給CAM讀 出數(shù)據(jù)寄存器、SRAM讀出數(shù)據(jù)寄存器。如果是對CAM進(jìn)行維護(hù)操作,CPU讀出數(shù)據(jù)寄 存器將讀取的CAM和SRAM數(shù)據(jù)發(fā)送給CPU接口電路,通過CPU接口電路上交CPU。 如果對CAM進(jìn)行操作的指令來自檢索指令隊列存儲器FIFO接口電路,則將SRAM檢索 的結(jié)果以及數(shù)據(jù)包序列號寄存器保存的序列號輸出到檢索結(jié)果寄存器,通過檢索結(jié)果寄 存器發(fā)送到與CAM控制電路相連的檢索結(jié)果隊列存儲器FIFO。 6)包發(fā)送電路通過IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO接口電路,讀取包在 IPv6數(shù)據(jù)包存儲器RAM中存儲的起始地址、終止地址、上交標(biāo)識以及數(shù)據(jù)包序列號, 并將終止地址保存在終止地址寄存器中。檢索結(jié)果隊列存儲器FIFO接口電路,讀取檢 索結(jié)果隊列存儲器FIFO,根據(jù)標(biāo)識位和IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO接口電路 得到的上交標(biāo)識位,狀態(tài)機控制電路知道包發(fā)送電路對數(shù)據(jù)包進(jìn)行處理方式要么是按照 IPv4轉(zhuǎn)發(fā),要么是將數(shù)據(jù)包上交,要么是將數(shù)據(jù)包丟棄,要么是按照普通IPv6轉(zhuǎn)發(fā)該數(shù) 據(jù)包,要么是按照IPv6隧道方式轉(zhuǎn)發(fā)該數(shù)據(jù)包。此外如果經(jīng)由IPv6數(shù)據(jù)包相關(guān)信息隊列 存儲器FIFO接口電路和檢索結(jié)果隊列存儲器FIFO接口電路得到的數(shù)據(jù)包序列號分別保 存到4位的包序列號寄存器A和包序列號寄存器B,包序列號寄存器A和包序列號寄存 器B中的數(shù)據(jù)輸入到數(shù)據(jù)比較器B,如果比較的結(jié)果是兩個數(shù)據(jù)不相等,說明系統(tǒng)出現(xiàn)錯 誤,數(shù)據(jù)比較器B向CPU接口電路發(fā)送指示信號,通過CPU接口電路對整個系統(tǒng)進(jìn)行復(fù) 位。復(fù)位之后按照上面的方法對系統(tǒng)進(jìn)行初始化。 IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO接口電路從IPv6數(shù)據(jù)包相關(guān)信息隊列存 儲器FIFO讀取數(shù)據(jù)包長度、包優(yōu)先級、源端口編號,并將其分別保存在數(shù)據(jù)包長度寄存 器、包優(yōu)先級寄存器、源端口編號寄存器中。檢索結(jié)果隊列存儲器FIFO接口電路讀取目 的端口編號、目的線卡編號、下一跳IPv6或IPv4地址、隧道IPv6目的地址,分別將它們 保存在目的端口編號寄存器、目的線卡編號寄存器、下一跳IPv6寄存器或IPv4地址寄存 器、隧道IPv6目的地址寄存器中。 如果數(shù)據(jù)按照IPv4轉(zhuǎn)發(fā),則將包長度寄存器、包優(yōu)先級寄存器、源線卡編號寄 存器、源端口編號寄存器、目的端口編號寄存器、目的線卡編號寄存器、下一跳IPv4寄 存器輸出的值,保存在3個位寬為36位的附加數(shù)據(jù)寄存器組中。在狀態(tài)控制機的作用 下,多路選擇器B分3拍將3個位寬為36位的附加數(shù)據(jù)寄存器組中的數(shù)據(jù)發(fā)送出去,這 些數(shù)據(jù)作為IPv4數(shù)據(jù)包的附加數(shù)據(jù)頭,添加在IPv4數(shù)據(jù)包的前面,發(fā)送給上行FIFO。
緊接IPv4附加數(shù)據(jù)頭的就是IPv4數(shù)據(jù)包,在狀態(tài)控制機電路的作用下,增10加 法器從輸入端接收包存儲起始地址,對該地址值實現(xiàn)加10操作,并將結(jié)果輸出給地址寄 存器A進(jìn)行保存,多路數(shù)據(jù)選擇器A選擇地址寄存器A中的數(shù)據(jù)輸出給IPv6數(shù)據(jù)包存儲 器RAM讀地址寄存器,讀地址寄存器將讀地址發(fā)送給IPv6數(shù)據(jù)包存儲器RAM讀端口的讀地址總線。IPv6數(shù)據(jù)包存儲器RAM將讀得的數(shù)據(jù)發(fā)送給位寬為36位的IP數(shù)據(jù)寄存 器,多路選擇器B選通位寬為36位的IP數(shù)據(jù)寄存器,這樣IPv4數(shù)據(jù)包第一拍數(shù)據(jù)就緊 隨IPv4的附加數(shù)據(jù)頭發(fā)送給上行FIFO。 在狀態(tài)控制機電路的作用下,增1加法器讀取IPv6數(shù)據(jù)包存儲器RAM讀地址寄 存器的值,對該地址進(jìn)行加1運算后提交給地址寄存器C。多路數(shù)據(jù)選擇器A選通地址 寄存器C中的數(shù)據(jù),將該數(shù)據(jù)交給IPv6數(shù)據(jù)包存儲器RAM讀地址寄存器。此后系統(tǒng)運 行的過程和發(fā)送IPv4數(shù)據(jù)包第一拍數(shù)據(jù)時一樣。 每個時鐘周期,數(shù)據(jù)比較器A將輸入的IPv6數(shù)據(jù)包存儲器RAM讀地址寄存器 值和輸入的包存儲終止地址寄存器的值進(jìn)行比較,如果兩者相等,說明該數(shù)據(jù)包的數(shù)據(jù) 已經(jīng)全部輸出。如果包存儲器電路中還有別的數(shù)據(jù),在狀態(tài)控制機的作用下,包發(fā)送電 路對后續(xù)的數(shù)據(jù)包也進(jìn)行同樣的處理。 如果數(shù)據(jù)按照普通IPv6轉(zhuǎn)發(fā),包發(fā)送電路的工作過程和轉(zhuǎn)發(fā)IPv4數(shù)據(jù)包的工作 過程總體相似,只有小部分不一樣。不一樣的部分是 (1)如果數(shù)據(jù)按照普通IPv6轉(zhuǎn)發(fā),則將包長度寄存器、包優(yōu)先級寄存器、源線 卡編號寄存器、源端口編號寄存器、目的端口編號寄存器、目的線卡編號寄存器、下一 跳IPv6寄存器輸出的值,保存在6個位寬為36位的附加數(shù)據(jù)寄存器組中。在狀態(tài)控制 機的作用下,多路選擇器B分6拍將6個位寬為36位附加數(shù)據(jù)寄存器組中的東西發(fā)送出 去,這些數(shù)據(jù)作為IPv6數(shù)據(jù)包的附加數(shù)據(jù)頭,添加在IPv6數(shù)據(jù)包的前面,交給下一級上 行FIFO。 (2)IPv6數(shù)據(jù)包的第一拍數(shù)據(jù)的地址是通過包存儲起始地址發(fā)送給地址寄存器 B,再通過多路數(shù)據(jù)選擇器A發(fā)送給IPv6數(shù)據(jù)包存儲器RAM讀地址寄存器,不能通過增 IO加法器進(jìn)行加IO操作。 如果數(shù)據(jù)按照IPv6隧道轉(zhuǎn)發(fā),包發(fā)送電路的工作過程和轉(zhuǎn)發(fā)IPv6數(shù)據(jù)包的工作 過程總體相似,只有小部分不一樣。不一樣的部分是如果數(shù)據(jù)按照IPv6轉(zhuǎn)發(fā),則將 包長度寄存器、包優(yōu)先級寄存器、源線卡編號寄存器、源端口編號寄存器、目的端口編 號寄存器、目的線卡編號寄存器、下一跳IPv6寄存器、隧道IPv6目的地址寄存器輸出的 值,保存在10個位寬為36位的附加數(shù)據(jù)寄存器組中;在狀態(tài)控制機的作用下,在發(fā)送隧 道IPv6數(shù)據(jù)包時,隧道包128位的IPv6目的地址,來自于IPv6協(xié)議封裝電路,在這里 要用位寬為36位附加數(shù)據(jù)寄存器組中保存的通過CAM查表得到的隧道IPv6目的地址取 代。 如果數(shù)據(jù)不進(jìn)行IPv4、普通IPv6轉(zhuǎn)發(fā)、IPv6隧道轉(zhuǎn)發(fā),還是進(jìn)行上交,包發(fā)送 電路的工作過程和轉(zhuǎn)發(fā)IPv6數(shù)據(jù)包的工作過程總體相似,只有小部分不一樣。不一樣的 地方是 (1)IPv6數(shù)據(jù)包的上交時,IPv6數(shù)據(jù)包的附加數(shù)據(jù)只有一拍,附加數(shù)據(jù)只含有源 線卡編號和源端口編號。不足36位的其它數(shù)據(jù)用0來填充。 (2)通過多路數(shù)據(jù)選擇器B選擇的數(shù)據(jù)發(fā)送給上交數(shù)據(jù)包寄存器,通過上交數(shù)據(jù) 包寄存器發(fā)送給第1個上交包隊列存儲器FIFO。 如果數(shù)據(jù)不進(jìn)行IPv4、普通IPv6轉(zhuǎn)發(fā)、IPv6隧道轉(zhuǎn)發(fā),也不需要上交,還是丟 棄,在狀態(tài)控制機電路的作用下,包發(fā)送電路不再對IPv6數(shù)據(jù)包存儲器RAM進(jìn)行任何操作。多路數(shù)據(jù)選擇器A和多路數(shù)據(jù)選擇器B也不進(jìn)行任何操作。 跟在被丟棄數(shù)據(jù)包后面如果還有別的數(shù)據(jù)包,則狀態(tài)控制機電路指示IPv6數(shù) 據(jù)包相關(guān)信息隊列存儲器FIFO接口電路和檢索結(jié)果隊列存儲器FIFO接口電路提取下一 個數(shù)據(jù)包的轉(zhuǎn)發(fā)信息,根據(jù)轉(zhuǎn)發(fā)信息的標(biāo)識按照上面所說的方式進(jìn)行數(shù)據(jù)包的轉(zhuǎn)發(fā)、上 交、丟棄處理。 7)只要第0個上交包隊列存儲器FIFO或第1個上交包隊列存儲器FIFO不空, 上交包發(fā)送電路就能輪流從不空的第0個上交包隊列存儲器FIFO和第1個上交包隊列存 儲器FIFO中讀取數(shù)據(jù)包發(fā)送給SRAM雙端口存儲器,當(dāng)SRAM雙端口存儲器中存儲的 上交數(shù)據(jù)包字節(jié)數(shù)達(dá)到一定門檻值,或接收一個數(shù)據(jù)包后一段時間內(nèi)沒有收到新數(shù)據(jù)包 時,上交包發(fā)送電路就向CPU接口電路發(fā)送中斷信號,并將上交數(shù)據(jù)包在雙端口存儲器 RAM中存儲的起始地址、終止地址以及待傳送數(shù)據(jù)的長度傳送給CPU接口電路,CPU接 口電路將中斷信號傳送給CPU,如果CPU不忙,就對中斷請求進(jìn)行相應(yīng),啟動上交包數(shù) 據(jù)傳送,CPU接口電路將上交數(shù)據(jù)包從SRAM雙端口存儲器中讀出來,再發(fā)送給CPU進(jìn) 行處理。
權(quán)利要求
路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng),其特征在于,含有一個集成于FPGA芯片上的隧道處理電路、SRAM單端口存儲器、SRAM雙端口存儲器、CAM內(nèi)容可尋址存儲器以及CPU控制單元,其中所述的隧道處理電路,含有IP包輸入接口電路、包過濾電路、包輸入隊列存儲器FIFO、IPv6協(xié)議封裝電路、IPv6包隊列存儲器FIFO、包相關(guān)信息提取電路、檢索指令隊列存儲器FIFO、CAM控制電路、檢索結(jié)果隊列存儲器FIFO、IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO、IPv6數(shù)據(jù)包存儲器RAM、包發(fā)送電路、CAM維護(hù)指令隊列存儲器FIFO、第0個上交包隊列存儲器FIFO、第1個上交包隊列存儲器FIFO、上交包發(fā)送電路、以及CPU接口電路,其中IP包輸入接口電路,輸入端接收上級物理和數(shù)據(jù)鏈路層處理電路輸出的數(shù)據(jù)就緒信號和數(shù)據(jù)總線信號,輸出讀信號給上級物理和數(shù)據(jù)鏈路層處理電路,所述IP包輸入接口電路數(shù)據(jù)輸出端和包過濾電路的輸入端相連,對輸入輸出的IPv4和IPv6包頭信號和包尾信號分別進(jìn)行計數(shù),將包頭包尾計數(shù)輸出信號發(fā)送給CPU接口電路,并接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;包過濾電路,輸入端和IP包輸入接口電路相連,還分別和第0個上交包隊列存儲器FIFO、包輸入隊列存儲器FIFO輸出快滿信號相連,輸出端分別和第0個上交包隊列存儲器FIFO的輸入端、包輸入隊列存儲器FIFO的輸入端相連,對輸入輸出的包頭信號和包尾信號進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;包輸入隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為36位,輸入端與上述包過濾電路的IP包輸出端相連,讀信號來自IPv6協(xié)議封裝電路,復(fù)位信號來自CPU接口電路;IPv6協(xié)議封裝電路,輸入端和所述包輸入隊列存儲器FIFO相連,輸出端和IPv6包隊列存儲器FIFO相連,此外輸入端還接收IPv6包隊列存儲器FIFO輸出的快滿信號,IPv6協(xié)議封裝電路對輸入輸出的包頭信號和包尾信號進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;IPv6包隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為40位,數(shù)據(jù)輸入端與上述IPv6協(xié)議封裝電路相連,讀輸入信號和包相關(guān)信息提取電路的讀輸出相連,輸出端和包相關(guān)信息提取電路相連,復(fù)位信號來自CPU接口電路;包相關(guān)信息提取電路,輸入端和IPv6包隊列存儲器的輸出端相連,輸出端分別和檢索指令隊列存儲FIFO、IPv6數(shù)據(jù)包存儲器RAM、IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO相連,對輸入輸出的包頭信號和包尾信號進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;檢索指令隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為100位,數(shù)據(jù)輸入端與上述包相關(guān)信息提取電路相連,讀輸入信號和CAM控制電路的讀輸出相連,數(shù)據(jù)輸出端和CAM控制電路相連;CAM控制電路,輸入端分別和檢索指令隊列存儲器FIFO輸出端、CAM維護(hù)指令隊列存儲器FIFO輸出端相連,CAM控制電路輸出的CAM存儲器讀寫控制命令總線信號以及雙向數(shù)據(jù)請求總線REQDATA信號和CAM存儲器相連,CAM控制電路和SRAM單端口存儲器的數(shù)據(jù)總線相連,CAM控制電路輸入端還和CAM存儲器輸出的讀確認(rèn)信號、查找匹配信號、查找輸出有效信號相連,CAM控制電路輸出的檢索信息輸出端和檢索結(jié)果隊列存儲器FIFO相連,此外CAM控制電路的讀信號分別和檢索指令隊列存儲器FIFO的讀輸入端、CAM維護(hù)指令隊列存儲器FIFO讀輸入端相連,CAM控制電路輸出端和CPU接口電路相連,將路由表保存的表項發(fā)送給CPU接口電路,CAM控制電路對IPv6路由查詢次數(shù)和查詢命中的信息進(jìn)行計數(shù),將這些信息作為查詢狀態(tài)信息發(fā)送給CPU接口電路,并接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;檢索結(jié)果隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為148位,數(shù)據(jù)輸入端與CAM控制電路的輸出相連,讀輸入信號和包發(fā)送電路的讀輸出相連,數(shù)據(jù)輸出端和包發(fā)送電路的輸入端相連;IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為60位,數(shù)據(jù)輸入端與上述包相關(guān)信息提取電路相連,讀輸入信號和包發(fā)送電路的讀輸出相連,數(shù)據(jù)輸出端和包發(fā)送電路相連;CAM維護(hù)指令隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為90位,數(shù)據(jù)輸入端和CPU接口電路相連,讀輸入信號和CAM控制電路輸出的讀信號相連,數(shù)據(jù)輸出端和CAM控制電路的數(shù)據(jù)輸入端相連;包發(fā)送電路,分別向檢索結(jié)果隊列存儲器FIFO、IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO發(fā)出讀信號,并和檢索結(jié)果隊列存儲器FIFO、IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO的輸出端相連,包發(fā)送電路輸出的讀信號、讀地址和IPv6數(shù)據(jù)包存儲器RAM相連,IPv6數(shù)據(jù)包存儲器RAM的數(shù)據(jù)輸出端和包發(fā)送電路相連,包發(fā)送電路的輸出還和第1個上交包隊列存儲器FIFO以及FPGA片外的上行FIFO相連,包發(fā)送電路對輸入輸出的IPv4、IPv6包頭信號和包尾信號分別進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;IPv6數(shù)據(jù)包存儲器RAM是一個雙端口的FPGA片內(nèi)讀寫存儲器,有一個數(shù)據(jù)寫入端口和一個數(shù)據(jù)輸出端口,數(shù)據(jù)寫入端口和包相關(guān)信息提取電路的IPv6數(shù)據(jù)輸出端相連,讀端口的所有信號和包發(fā)送電路相連,IPv6數(shù)據(jù)包存儲器RAM數(shù)據(jù)寬度為36位,讀寫端口分別有14根地址線;第0個上交包隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為36位,數(shù)據(jù)輸入端與上述包過濾電路相連,讀輸入信號和上交包發(fā)送電路的讀輸出相連,數(shù)據(jù)輸出端和上交包發(fā)送電路相連;第1個上交包隊列存儲器FIFO,是一個先進(jìn)先出隊列存儲器,數(shù)據(jù)寬度為36位,數(shù)據(jù)輸入端與包發(fā)送電路相連,讀輸入信號和上交包發(fā)送電路的讀輸出相連,數(shù)據(jù)輸出端和上交包發(fā)送電路相連;上交包發(fā)送電路,輸入端和第0個上交包隊列存儲器FIFO、第1個上交包隊列存儲器FIFO相連,數(shù)據(jù)輸出端和SRAM雙端口存儲器的數(shù)據(jù)輸入端相連,上交包發(fā)送電路發(fā)送的CPU中斷信號、SRAM雙端口存儲器數(shù)據(jù)起始地址和終止地址、SRAM雙端口存儲器中待傳送數(shù)據(jù)的長度信號輸出端和CPU接口電路相連,CPU接口電路將CPU響應(yīng)信號輸出給上交包發(fā)送電路的輸入端,上交包發(fā)送電路對輸入輸出的IPv4、IPv6包頭信號和包尾信號分別進(jìn)行計數(shù),并發(fā)送給CPU接口電路,同時接收CPU接口電路輸入的復(fù)位信號和計數(shù)器清零信號;CPU接口電路,和由FPGA實現(xiàn)的隧道處理電路內(nèi)部各個電路相連,接收各個電路輸入的IPv4、IPv6輸入輸出包頭信號和包尾信號計數(shù),以及CAM控制電路的查詢狀態(tài)計數(shù),CPU接口電路與FPGA片外CPU控制單元的CPU地址總線、數(shù)據(jù)總線、讀寫控制信號相連,輸出的中斷信號和CPU控制單元的中斷輸入相連,CPU接口電路還和SRAM雙端口存儲器數(shù)據(jù)輸出端口的地址總線、數(shù)據(jù)總線、讀寫控制信號相連,CPU接口電路接收CPU控制單元輸入的復(fù)位信號,并將復(fù)位信號傳送給FPGA內(nèi)的其它各個電路,將清零信號傳送給IP包輸入接口電路、包過濾電路、IPv6協(xié)議封裝電路、包相關(guān)信息提取電路、CAM控制電路、上交包發(fā)送電路、包發(fā)送電路,CPU接口電路還和CAM維護(hù)指令隊列存儲器FIFO的數(shù)據(jù)輸入端相連,接收CAM控制電路輸出的路由表表項數(shù)據(jù),接收上交包發(fā)送電路輸出的SRAM雙端口存儲器數(shù)據(jù)起始地址和終止地址、SRAM雙端口存儲器中待傳送數(shù)據(jù)的長度以及中斷請求信息,也向上交包發(fā)送電路發(fā)送CPU中斷響應(yīng)指示信號;所述包過濾電路是一個電路組件,其中輸入IP包數(shù)據(jù)寄存器,輸入端和IP包輸入接口電路的輸出端相連;輸入IP包數(shù)據(jù)寄存器的輸出端分別和IPv4數(shù)據(jù)包寄存器、IPv6數(shù)據(jù)包寄存器相連;IPv4數(shù)據(jù)包寄存器的輸出端分別和IPv4數(shù)據(jù)包延遲寄存器組、IPv4包頭校驗和寄存器、生存時間寄存器、包類型寄存器、狀態(tài)控制機的輸入端相連,同時也接收狀態(tài)控制機的輸出;IPv4數(shù)據(jù)包延遲寄存器組的輸出端和數(shù)據(jù)選擇器A的輸入端相連;IPv4數(shù)據(jù)包頭校驗和生成器的輸入端分別和IPv4頭校驗和寄存器輸出、生存時間更新寄存器輸出相連;生存時間寄存器的輸出端和減一減法器A的輸入端以及狀態(tài)控制機的輸入端相連,減一減法器A的輸出端和生存時間更新寄存器的輸入端相連,生存時間更新寄存器的輸出端分別和IPv4數(shù)據(jù)包頭校驗和生成器、狀態(tài)控制機相連;數(shù)據(jù)選擇器A的輸入端又分別和IPv4數(shù)據(jù)包延遲寄存器組的輸出端、IPv4數(shù)據(jù)包頭校驗和生成器的輸出端以及狀態(tài)控制機的輸出端相連,數(shù)據(jù)選擇器A的輸出端和更新后的IPv4數(shù)據(jù)包寄存器輸入端相連;IPv6數(shù)據(jù)包寄存器的輸出端分別和IPv6數(shù)據(jù)包延遲寄存器組、跳數(shù)寄存器、下一個頭寄存器、IPv6目的地址寄存器、狀態(tài)控制機的輸入端相連,同時也接收狀態(tài)控制機的輸出;跳數(shù)寄存器的輸出端和減一減法器B的輸入端相連以及狀態(tài)控制機相連,跳數(shù)更新寄存器的輸出端還和狀態(tài)控制機相連;減一減法器B的輸出端和跳數(shù)更新寄存器的輸入端相連;數(shù)據(jù)選擇器B的輸入端分別和IPv6數(shù)據(jù)包延遲寄存器組、跳數(shù)更新寄存器、狀態(tài)控制機的輸出端相連,數(shù)據(jù)選擇器B的輸出端和更新后的IPv6數(shù)據(jù)包寄存器輸入端相連;下一個頭寄存器的輸入端和IPv6數(shù)據(jù)包寄存器的輸出端相連,輸出端和狀態(tài)控制機相連;IPv6目的地址寄存器的輸出端和比較器的輸入端相連,比較器的另一個輸入端和本路由器IPv6地址寄存器輸出端相連;比較器的輸出端和狀態(tài)控制機的輸入端相連;本路由器IPv6地址寄存器輸入端和CPU接口電路的輸出相連;數(shù)據(jù)選擇器C的輸入端分別和更新后的IPv4數(shù)據(jù)包寄存器、更新后的IPv6數(shù)據(jù)包寄存器的輸出端相連、狀態(tài)控制機以及包輸入隊列存儲器FIFO的快滿信號相連,數(shù)據(jù)選擇器C的輸出端分別和第0個上交包隊列存儲器FIFO、包輸入隊列存儲器FIFO相連,同時數(shù)據(jù)選擇器C的包頭信號和包尾信號輸出端也和計數(shù)器的輸入端相連;計數(shù)器接收CPU接口電路輸出的計數(shù)器清零信號,并將包頭包尾信號計數(shù)信號傳送給CPU接口電路的輸入端;所述IPv6協(xié)議封裝電路是一個電路組件,其中包輸入隊列存儲器FIFO接口電路,數(shù)據(jù)輸入端和包輸入隊列存儲器FIFO的數(shù)據(jù)輸出端相連,輸出的讀信號和包輸入隊列存儲器FIFO的讀輸入信號相連,控制輸入輸出端和狀態(tài)控制機電路相連;IPv4包頭數(shù)據(jù)寄存器,輸入端和包輸入隊列存儲器FIFO接口電路輸出端以及狀態(tài)控制機電路輸出端相連,一個輸出端和IPv4包頭轉(zhuǎn)IPv6隧道包頭電路相連,另一個輸出端和多路數(shù)據(jù)選擇器電路輸入端相連;IPv4負(fù)載數(shù)據(jù)寄存器,輸入端和包輸入隊列存儲器FIFO接口電路輸出端相連,輸出端和多路數(shù)據(jù)選擇器電路輸入端相連;IPv6數(shù)據(jù)寄存器,輸入端和包輸入隊列存儲器FIFO接口電路的輸出端相連,輸出端和多路數(shù)據(jù)選擇器電路輸入端相連;IPv6隧道包頭數(shù)據(jù)寄存器,輸入端和IPv4包頭轉(zhuǎn)IPv6隧道包頭電路以及狀態(tài)控制機電路相連,輸出端和多路數(shù)據(jù)選擇器電路相連;多路數(shù)據(jù)選擇器電路的輸出端和IPv6包隊列存儲器FIFO的輸入端相連;包輸入隊列存儲器FIFO接口電路將接收的數(shù)據(jù)包頭信號和尾信號發(fā)送給計數(shù)器電路,多路數(shù)據(jù)選擇器電路也把輸出的數(shù)據(jù)包頭、包尾信號傳送給計數(shù)器電路,計數(shù)器電路輸出的輸入輸出包頭包尾信號計數(shù)和CPU接口電路的狀態(tài)計數(shù)器值輸入端相連,同時接收CPU接口電路輸入的計數(shù)器清零信號;所述包相關(guān)信息提取電路是一個電路組件,由一系列的電路組成IPv6包隊列存儲器接口電路,所述數(shù)據(jù)輸入端和IPv6包隊列存儲器FIFO相連,輸出的讀信號和IPv6包隊列存儲器FIFO的讀輸入信號相連,控制輸入輸出端和狀態(tài)控制機電路相連,輸出端和包上交標(biāo)識寄存器、包優(yōu)先級寄存器、包源端口編號寄存器、包起始地址寄存器、包終止地址寄存器、包序列號寄存器、包目的地址寄存器、隧道標(biāo)識寄存器以及包寫入RAM電路相連;IPv6包信息發(fā)送電路的輸入端和所述包上交標(biāo)識寄存器、包優(yōu)先級寄存器、包起始地址寄存器、包源端口編號寄存器、包終止地址寄存器、包序列號寄存器相連,控制信息來自于狀態(tài)控制機,輸出端接IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO;檢索指令發(fā)送電路的輸入端和包序列號寄存器、包目的地址寄存器、隧道標(biāo)識寄存器相連,輸出端和檢索指令隊列存儲器FIFO相連,控制輸入端和狀態(tài)控制機相連;包寫入RAM電路的輸出端和IPv6數(shù)據(jù)包存儲器RAM相連,它的控制輸入端和狀態(tài)控制機相連;計數(shù)器的輸入端分別和IPv6包隊列存儲器FIFO接口電路的輸入包頭信號以及輸入包尾信號相連,還和包寫入RAM電路輸出的包頭信號和包尾信號相連,同時也和CPU接口電路輸入的計數(shù)器清零信號相連,輸出的包頭尾信號計數(shù)和CPU接口電路相連;所述CAM控制電路是一個電路組件,由一系列的電路組成檢索指令隊列存儲器FIFO接口電路的數(shù)據(jù)輸入端和檢索指令隊列存儲器FIFO輸出端相連,輸出的讀信號和檢索指令隊列存儲器FIFO的讀信號相連,并且輸出端也和狀態(tài)控制機互連,接收狀態(tài)控制機輸出的控制信號;CAM寫入數(shù)據(jù)寄存器的輸入端和檢索指令隊列存儲器FIFO接口電路、以及CAM維護(hù)指令隊列存儲器FIFO接口電路的輸出端相連,輸出端和CAM數(shù)據(jù)總線讀寫控制電路相連;CAM操作指令發(fā)送電路的輸入端和檢索指令隊列存儲器FIFO接口電路的輸出端、CAM維護(hù)指令隊列存儲器FIFO接口電路的輸出端相連,輸出端直接和CAM存儲器的命令總線INST、LTIN、SEGSEL、GMASK、CRB和請求選通信號REQSTB相連;SRAM寫入數(shù)據(jù)寄存器的輸入端和CAM維護(hù)指令隊列存儲器FIFO接口電路輸出端,以及檢索指令隊列存儲器FIFO接口電路的輸出端相連,輸出端和SRAM數(shù)據(jù)總線讀寫控制電路輸入端相連;SRAM數(shù)據(jù)總線讀寫控制電路的輸出端和SRAM讀出數(shù)據(jù)寄存器、檢索結(jié)果寄存器以及SRAM單端口存儲器相連,控制信號輸入端和狀態(tài)機輸出相連;CPU讀出數(shù)據(jù)寄存器的輸入端和CAM讀出數(shù)據(jù)寄存器的輸出端、SRAM讀出數(shù)據(jù)寄存器的輸出端相連,輸出端和CPU接口電路相連;檢索結(jié)果寄存器的輸入端和數(shù)據(jù)包序列號寄存器的輸出端相連,輸出端和檢索結(jié)果隊列存儲器FIFO相連;數(shù)據(jù)包序列號寄存器的輸入端和檢索指令隊列存儲器FIFO接口電路的輸出端以及狀態(tài)控制機的輸出端相連;計數(shù)器的輸入端和檢索結(jié)果寄存器的輸出端相連,還和CPU接口電路輸入的計算器清零信號相連,它輸出的查詢狀態(tài)計數(shù)輸出和CPU接口電路相連;所述包發(fā)送電路是一個電路組件,由一系列的電路組成IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO接口電路,數(shù)據(jù)輸入端和IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO的輸出端相連,控制輸入和輸出端與狀態(tài)機控制電路相連,輸出的讀信號和IPv6數(shù)據(jù)包相關(guān)信息隊列存儲器FIFO讀輸入端相連,輸出端分別和包存儲起始地址寄存器、包存儲終止地址寄存器、包長度寄存器、包優(yōu)先級寄存器、源端口編號寄存器、包序列號寄存器A的輸入端相連;檢索結(jié)果隊列存儲器FIFO接口電路,數(shù)據(jù)輸入端和檢索結(jié)果隊列存儲器FIFO的輸出相連,控制輸入和輸出端與狀態(tài)機控制電路相連,輸出端分別和包序列號寄存器B、目的端口編號寄存器、目的線卡編號寄存器、下一跳IPv6地址寄存器、下一跳IPv4地址寄存器、隧道IPv6目的地址寄存器的輸入端相連;位寬為36位的附加數(shù)據(jù)寄存器組的輸入端分別和包優(yōu)先級寄存器、包長度寄存器、源端口編號寄存器、源線卡編號寄存器、目的端口編號寄存器、目的線卡編號寄存器、下一跳IPv6地址寄存器、下一跳IPv4地址寄存器、隧道IPv6目的地址寄存器的數(shù)據(jù)輸出端相連;源線卡編號寄存器的輸入來自CPU接口電路;增10加法器,輸入端和包存儲起始地址的輸出相連,輸出端與地址寄存器A相連;地址寄存器B的輸入端和包存儲起始地址的輸出相連;增1加法器的輸出端分別和IPv6數(shù)據(jù)包存儲器讀地址寄存器的輸出端、地址寄存器C的輸入端相連;多路數(shù)據(jù)選擇器A,輸入端分別和地址寄存器A、地址寄存器B、地址寄存器C相連,控制輸入端和狀態(tài)機控制電路的輸出相連,輸出端和IPv6數(shù)據(jù)包存儲器讀地址寄存器的輸入端相連;數(shù)據(jù)比較器A,輸入端和包存儲終止地址寄存器的輸出端以及IPv6數(shù)據(jù)包存儲器讀地址寄存器的輸出端相連,輸出端和狀態(tài)機控制電路的輸入端相連;位寬為36位的IP數(shù)據(jù)寄存器,輸入端和IPv6數(shù)據(jù)包存儲器RAM的數(shù)據(jù)輸出端相連,輸出端和多路數(shù)據(jù)選擇器B的輸入端相連;多路數(shù)據(jù)選擇器B,數(shù)據(jù)輸入端分別和位寬為36位的附加數(shù)據(jù)寄存器組的輸出端、位寬為36位的IP數(shù)據(jù)寄存器的輸出端相連,輸出端和上交數(shù)據(jù)包寄存器、帶附加數(shù)據(jù)的IPv4或IPv6數(shù)據(jù)包寄存器的輸入端相連;上交數(shù)據(jù)包寄存器的輸出端和第1個上交包隊列存儲器FIFO的輸入端相連;帶附加數(shù)據(jù)的IPv4或IPv6包寄存器的輸出端發(fā)往與FPGA相連的上行FIFO;帶附加數(shù)據(jù)的IPv4或IPv6包寄存器的還將發(fā)送的數(shù)據(jù)包頭信號和包尾信號分別傳送給計數(shù)器,計數(shù)器還和CPU接口電路輸入的計數(shù)器清零信號相連,計數(shù)器輸出的包頭包尾信號計數(shù)信號發(fā)送給CPU接口電路;所述CAM存儲器,是系統(tǒng)的FPGA片外存儲器,讀寫控制命令總線信號以及數(shù)據(jù)請求總線REQDATA信號來自CAM控制電路,輸出的地址總線信號和讀寫信號分別與SRAM單端口存儲器的地址總線和讀寫信號相連,輸出的讀確認(rèn)信號、查找匹配信號、查找輸出有效信號和CAM控制電路輸入端相連;所述SRAM單端口存儲器,是系統(tǒng)的FPGA片外靜態(tài)SRAM存儲器,讀寫輸入信號和地址信號來自CAM存儲器的輸出,數(shù)據(jù)輸入輸出端和CAM控制電路相連;所述SRAM雙端口存儲器,是系統(tǒng)的FPGA片外靜態(tài)雙端口SRAM存儲器,分為數(shù)據(jù)寫入端口和數(shù)據(jù)輸出端口,數(shù)據(jù)寫入端口的雙向數(shù)據(jù)總線和上交包發(fā)送電路相連,數(shù)據(jù)寫入端口的讀寫信號線、地址總線和上交包發(fā)送電路的輸出端相連,數(shù)據(jù)輸出端口的雙向數(shù)據(jù)總線和CPU接口電路相連,數(shù)據(jù)輸出端口的讀寫信號線、地址總線和CPU接口電路的輸出端相連。
2. 根據(jù)權(quán)利要求1所述的路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng),其 特征在于所述的CAM由兩片IDT75k62100芯片構(gòu)成,SRAM單端口存儲器由兩片 IDT71T75602芯片構(gòu)成。
3. 根據(jù)權(quán)利要求1所述的路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng),其特征 在于FPGA和片外的CPU控制單元相連。
4. 根據(jù)權(quán)利要求1所述的路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng),SRAM 雙端口存儲器由一片CY7C1300A芯片構(gòu)成。
5. 根據(jù)權(quán)利要求1所述的路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng),F(xiàn)PGA 和外圍芯片采用同一個主時鐘CLK進(jìn)行工作,IDT75k62100和FPGA共用一個主時鐘 CLK,兩片IDT71T75602的工作頻率為CLK/2,該CLK/2和主CLK的時鐘源相同,是 CLK主時鐘經(jīng)二分頻得到的。
全文摘要
路由器中采用IPv6頭封裝IPv4包的隧道轉(zhuǎn)發(fā)系統(tǒng)屬于IPv6路由器技術(shù)領(lǐng)域,其特征在于,它由一片F(xiàn)PGA實現(xiàn)的隧道處理電路和兩片級聯(lián)的CAM、兩片單端口SRAM和一片雙端口SRAM及CPU控制單元構(gòu)成,最大支持64K*288bits的V6路由表項,時鐘頻率為100MHZ時,保證3.2Gbit/s的線速轉(zhuǎn)發(fā)。利用CAM構(gòu)造路由查找表,支持表項條數(shù)的動態(tài)分配,同時還負(fù)責(zé)路由表讀寫及維護(hù)。系統(tǒng)接收的IP數(shù)據(jù)包若是V4包,給V4包加一個V6包頭成為V6隧道包;若是V6數(shù)據(jù)包,就不轉(zhuǎn)換。然后提取包的查找信息,進(jìn)行路由查找,根據(jù)返回的結(jié)果,對包進(jìn)行處理按照V4或V6轉(zhuǎn)發(fā)、上交CPU處理、丟棄。
文檔編號H04L12/46GK101692647SQ20091009353
公開日2010年4月7日 申請日期2009年10月12日 優(yōu)先權(quán)日2009年10月12日
發(fā)明者全成斌, 徐明偉, 楊珂, 趙有健, 陳文龍 申請人:清華大學(xué)